当前位置:   article > 正文

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

flask 模型推理结果流式输出

掘金的文章也是我写的,只是复制过来,因为csdn无法上传图片。

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

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

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

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

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

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

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

还有走异步机制的:

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

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

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

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

 
  1. def get_llm_lc(self, app, r: ChatCompletionRequestStruct):
  2. """
  3. 获取ai响应langchain版
  4. """
  5. return ChatOpenAI(
  6. temperature=0.5,
  7. openai_api_key=Config.ZHIPUAI_API_KEY,
  8. openai_api_base=Config.ZHIPUAI_OPENAI_API_URL,
  9. model=Config.ZHIPUAI_MODEL,
  10. streaming=r.streaming,
  11. callbacks=[StreamingStdOutCallbackHandler()],
  12. )
'
运行
 
  1. def get_prompt_lc(self):
  2. return ChatPromptTemplate.from_messages(
  3. [
  4. # ("system", "你是一个专业的AI助手。"),
  5. ("human", "{question}")
  6. ]
  7. )
 
  1. llm = self.get_llm_lc(app, r)
  2. prompt = self.get_prompt_lc()
  3. llm_chain = prompt | llm
  4. ret = llm_chain.stream({"question": r.question})
  5. for _token in ret:
  6. token = _token.content
  7. finish_reason = ''
  8. if 'finish_reason' in _token.response_metadata:
  9. finish_reason = _token.response_metadata['finish_reason']
  10. reply = ChatCompletionResponseStruct()
  11. reply.text = token
  12. reply.finish_reason = finish_reason
  13. yield json.dumps(reply.to_dict(), ensure_ascii=False) + '\n'
'
运行

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

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/880258
推荐阅读
相关标签
  

闽ICP备14008679号