首页 > 其他分享 >困扰了一天的flask结合智谱ai langchain流式输出json问题终于解决了

困扰了一天的flask结合智谱ai langchain流式输出json问题终于解决了

时间:2024-05-11 17:21:55浏览次数:17  
标签:flask reason 流式 ai token langchain llm 智谱

本次对接的大模型是智谱,首先想到去智谱开放平台找找有没有和langchain结合的文档:

 

结果还真有,就省去了谷歌的时间,但是智谱的文档只提供了非流式的示例代码,想着先拷过来跑一下再说,结果就是非流式是正常输出的,流式就遇到问题了,不管我咋配置,好像只能在控制台输出流失内容,遂去谷歌“langchain 流式输出”:

 

前面三篇文章都看了,第一篇内容:

 

好像和智谱官方的文档写法不一样,遂放弃使用该方式,接着又看了第二篇文章:

 

他这里说是要在初始化llm的时候加一个callbacks参数,并且自定义callbacks,最终的代码大致如下:

 

但他这里没有写全,起初我也没看懂为啥这么写,遂看了下其他人的写法:

 

原来在初始化llm的时候就需要注入自己的callbacks,然后我也试了这样写,确实能在on_llm_new_token中拿到每次流式的内容,但是不能yield出来,我就有点搞不明白,然后又看了一些更复杂的代码,我发现我看不懂:

 

还有走异步机制的:

 

我都有点迷惑了,到底啥代码才适合我呢?然后我就一直在尝试callbacks,搞到晚上11点,此时我心态有点崩了,遂盖上笔记本,不搞了先,然后我就和项目负责人说了langchain的流式搞不定,还是用原生的写法了,不用langchain。

然后第二天我还是打算再会一会这个langchain的流式输出,我就不信了。

先在群里请教了一下,然后给我发了一段很长的代码,额,这啥。

遂想到昨天谷歌搜索时的第二个网站的内容,抱着试试的心态,ctrl c、ctrl v,它就流起来了,它真的流起来:

  

def get_llm_lc(self, app, r: ChatCompletionRequestStruct):

  """

  获取ai响应langchain版

  """

  return ChatOpenAI(

    temperature=0.5,

    openai_api_key=Config.ZHIPUAI_API_KEY,

    openai_api_base=Config.ZHIPUAI_OPENAI_API_URL,

    model=Config.ZHIPUAI_MODEL,

    streaming=r.streaming,

    callbacks=[StreamingStdOutCallbackHandler()],

  )

 

def get_prompt_lc(self):

  return ChatPromptTemplate.from_messages(

    [

    # ("system", "你是一个专业的AI助手。"),

    ("human", "{question}")

    ]

  )

 

llm = self.get_llm_lc(app, r)

prompt = self.get_prompt_lc()

llm_chain = prompt | llm

ret = llm_chain.stream({"question": r.question})

for _token in ret:

  token = _token.content

  finish_reason = ''

  if 'finish_reason' in _token.response_metadata:

  finish_reason = _token.response_metadata['finish_reason']

  reply = ChatCompletionResponseStruct()

  reply.text = token

  reply.finish_reason = finish_reason

  yield json.dumps(reply.to_dict(), ensure_ascii=False) + '\n'

 

总算舒了一口气,流式响应需求算是完成了,接下来是rag的,到目前位置我还不知道rag是啥,咋实现的。

我的公众号,欢迎大家订阅,我会同步文章到公众号上:

 

这篇文章就到这里啦!如果你对文章内容有疑问或想要深入讨论,欢迎在评论区留言,我会尽力回答。同时,如果你觉得这篇文章对你有帮助,不妨点个赞并分享给其他同学,让更多人受益。

想要了解更多相关知识,可以查看我以往的文章,其中有许多精彩内容。记得关注我,获取及时更新,我们可以一起学习、讨论技术,共同进步。

感谢你的阅读与支持,期待在未来的文章中与你再次相遇!

标签:flask,reason,流式,ai,token,langchain,llm,智谱
From: https://www.cnblogs.com/shuinanxun/p/18186838

相关文章

  • 网易Airtest集群方案大揭秘:小型便携式集群方案来啦
    此文章来源于项目官方公众号:“AirtestProject”版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途一、前言中小型企业/工作室搭建便携设备集群的制胜法宝是什么?当然非网易Airtest便携式机柜莫属啦。得益于广大企业客户对我们便携式集群的支持,我们团队也一直在坚......
  • SciTech-BigDataAIML-TensorFlow-Model的编译:设置(LossFunction+Optimizer+Metrics)与
    机器学习|model.compile()用法model.compile()的作用:为经过设计的Model(神经网络模型)设置好:loss损失函数、optimizer优化器、metrics准确性评价函数。并且进行编译;Optimizers优化器:Optimizer的主要功能是作用在GD(梯度下降)的过程,使得Gradient(梯度)更快(快速......
  • 【坑】严重性 代码 说明 项目 文件 行 禁止显示状态 错误 NETSDK1141 无法解析位于 E:
    错误严重性代码说明项目文件行禁止显示状态错误NETSDK1141无法解析位于E:\firefox\WPF-Samples-main\WPF-Samples-main\global.json的global.json中指定的.NETSDK版本。DragDropObjectsC:\ProgramFiles\dotnet\sdk\8.0.202\Sdks\Microsoft.NET.Sdk\targets\M......
  • AIX7100-安装JDK1.8
    上传java8_64.zip解压java8_64.zip链接:https://pan.baidu.com/s/1ALnhiXLkDWbbhyfCf8djVQ?pwd=hz28提取码:hz28#cd/usr/local/#unzipjava8_64.zip#vi/etc/profile#find/usr/local/java8_64-name"java"-typef/usr/local/java8_64/jre/bin/java"......
  • Copilot - OpenAI与GitHub联合出品的自动代码生成AI+VirtualLCD - 可用于 GUI 移植的
    1、AntOS-适用8051的超轻量级实时操作系统AntOS是一款超轻量级实时操作系统,抢占式调度极简内核,专门为小型家电及轻量型物联网终端设计,适合在8051为内核的MCU上运行。项目主页: https://gitee.com/zeweni/ant-osAntOS提供层级服务,可以进行任意裁剪。内核层包含两个子系......
  • The cowherd and the weaving maid
    ThecowherdandtheweavingmaidInthecelestialcourtoftheJadeEmperorlivedsevenprincesses.Eachhadtheirchosenplaceincourt,buttheyoungestprincesshadaspecialskill.Shecouldpluckcloudsfromtheskyandspinthemintothesoftestrob......
  • langchain教程
    参考网址:https://python.langchain.com/docs/get_started/introduction/https://python.langchain.com/docs/modules/1、简介LangChain是一个用于开发由大型语言模型(LLM)驱动的应用程序的框架。LangChain简化了LLM申请生命周期的每个阶段:开发:使用LangChain的LCLE和......
  • Springboot Data Jdbc中Contains和Containing的用法
    Contains和Containing的用法privateStringtitle;privateList<String>tags;//查询标题包含指定字符串的书籍List<Book>findByTitleContains(Stringtitle);//查询包含指定标签的书籍List<Book>findByTagsContaining(Stringtag);--查询标题包含"Spring"的书......
  • EPAI手绘建模APP工程图顶部工具栏
    7、工程图图 302 工程图工程图包括顶部常用工具栏、右侧工程图工具栏、左侧模型列表栏、中间的工程图。(1) 常用工具栏① 删除,选中场景中工程图元素后,删除。可以选择多个工程图元素同时删除。② 设置,打开工程图设置页面,修改工程图参数。图 303 工程图设置-1图 3......
  • Failed to open libcc.dll
      [-].\Navicat-Cracker\NavicatCrackerDlg.cpp:300->  Failedtoopenlibcc.dll  拒绝访问。 (0x5) 解决方法:以管理员身份运行exe文件。 Navicatpremium是一款数据库管理工具,是一个可多重连线资料库的管理工具,它可以让你以单一程式同时连线到My......