返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

大模型RAG实战|对接Streamlit实现类似ChatGPT的流式输出

[复制链接]
链载Ai 显示全部楼层 发表于 昨天 11:04 |阅读模式 打印 上一主题 下一主题

ThinkRAG大模型RAG实战系列文章,带你深入探索使用LlamaIndex框架,构建本地大模型知识库问答系统。本系列涵盖知识库管理、检索优化、模型本地部署等主题,通过代码与实例,讲解如何打造生产级系统,实现本地知识库的快速检索与智能问答。


前文讨论了实现混合检索的方法。当我们把检索到的内容,发送给大模型生成回答时,希望能够快速得到响应。


类似ChatGPT的流式(streaming)输出可以提升用户的体验。


特别是当我们要求大模型输出长文本时,例如:生成一篇2000字文章,用户无需等待生成完毕,即可开始阅读生成的内容。


现在的大语言模型(LLM)基本都支持流式输出。在LlamaIndex中实现方式很简单:我们在构建问答引擎(Query Engine)时,只需要明确设置参数streaming=True即可。


代码实例如下:


from llama_index.core.query_engine import RetrieverQueryEnginequery_engine = RetrieverQueryEngine.from_args(retriever=retriever,text_qa_template=text_qa_template,refine_template=refine_template,node_postprocessors=node_postprocessors,response_mode="simple_summarize",verbose=True,streaming=True,)


这时,我们通过query_engine的query方法向大模型提问:“流程有哪三个特征”,该方法会返回一个response对象。


prompt = "流程有哪三个特征?"response = query_engine.query(prompt)
response_text = st.write_stream(response.response_gen)


我们将response对象的reponse_gen方法,对接到Streamlit的write_stream方法,就可以接收大模型生成的流式输出,并同步在前端显示了。


该方法的返回值response_text,则是此次流式输出的全文,可以进一步处理或保存到对话记录中。


目前,ThinkRAG已采用流式输出。如果你运行ThinkRAG进行提问,可以看到系统的响应速度非常快,软件记录的时间为0.05秒。


效果如下:



如果,你的LlamaIndex应用不是通过Streamlit输出,而是在终端(console)输出,那么我们直接调用print_response_stream方法即可。


response.print_response_stream()


如果你自行开发软件前端,需要对流式输出进行手动处理,那么可以参考以下方法实现。


fortextinresponse.response_gen:#dosomethingwithtextastheyarrive.pass


文中代码实例,可参考开源项目ThinkRAG


https://github.com/wzdavid/ThinkRAG


ThinkRAG是基于LlamaIndex框架,前端使用Streamlit开发的大模型本地知识库RAG系统,可在笔记本电脑上部署和离线运行。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ