说一下前端怎么实现大模型,就是像什么通义千问文心一言GPT那样的,这个我之前做过啊就是这样的,这是我们以前在公司做的,对大家以后开发这种东西有一些参考,那我们当时做的时候是没有参考的,网上有这种相关的代码仓库,它模拟那种GPT实现的,但是它那个做的非常复杂。他用了十几个这种组件,然后几十个方法,而且数据存储都放在前端,根本无法参考,太麻烦了。
我这个就一个组件几千行代码实现了的,包括什么文心一言通义千问那个你也看不到他的代码,有一些他做的那种防止那他他做那种防止调试的,包括你最多只能看到他那个html,他那时候js看不到,包括他那个 html也是vue react转出来的,所以没法参考,所以当时做的很难,那只能硬着头皮自己做.
我跟大家说这里面的难点
第一就是通信,那么通信我当时用的是sse,因为GPT它用sse,但是 GPT是全放在前端数据存储,我做的话前端我只放了两条,就是你发对话的时候放了两条,所以我这边建议大家如果用做把所有你发的话跟后端返返回的话,你都用websocket来存,不要用sse这个比较麻烦,因为我以前用也做过这种大模型对话,这是第一通信问题。
第二个难的就是就是说整个对话效果,你要让它定位到始终定到最新的那个其实也也不算难,但是要注意的就是说你获取那个整个列表的滚动条高度,让它每次都定到最底下,你写一个这样的方法,然后最好还可以用那个requestfragment优化一下,让他不卡。
所以当时我们就是用了几千行代码就实现了就是就现在这个效果它能对话,像大模型一样,后端它调的那种大模型接口,前端这块,sse通信它有个问题,它是单向的,就是你前端只能收后端,前端不能发给后端,我们的话要发过去的,所以这个如果大家后面做的时候,你要通过post请求去做,那你想办法有一个库可以让它支持post请求,因为sse它只是支持get请求的,所以说其实这个东西真的做下来没那么难。
因为现在很多公司可能有需求,你要做这种AI对话的东西,其实没那么难,几千个代码就搞定了,整个页面的话你就写就行了,左边一个列表正常写就行了,里面就是一个通信问题,通信我建议用做所有东西放后端,我们当时是有一部分,我是放前端的,我就把比如说我发的两条话放到前端,这样的话它点发送的时候他马上可以渲染到页面上,如果用websocket可以做的话,后端接口比较慢的话,他那个话发出来的话,肯定等这个半秒钟再回来,这个显得就特别卡。
就是说所以说这是我们当时做的其实也没有那么难,只是说只是说网上没有什么参考,你从0去做没有什么参考,所以才难。
你要是我也不可能去找那些什么通义千问那些人,程序员问他们你怎么怎么实现的,也没那个能力对吧,所以说实际上大概是这样实现的