要使用 RAG(Retrieval-Augmented Generation,检索增强生成)来做一个回答用户问题的聊天机器人,可以按照以下步骤进行:
总结:
加载所需的库和模块。其中,feedparse用于解析RSS订阅源ollama用于在python程序中跑大模型,使用前请确保ollama服务已经开启并下载好模型|从订阅源获取内容下面函数用于从指定的RSS订阅url提取内容,这里只是给了一个url,如果需要接收多个url,只要稍微改动即可。然后,通过一个专门的文本拆分器将长文本拆分成较小的块,并附带相关的元数据如标题、发布日期和链接。最终,这些文档被合并成一个列表并返回,可用于进一步的数据处理或信息提取任务。|为文档内容生成向量这里,我们使用文本向量模型bge-m3。https://huggingface.co/BAAI/bge-m3bge-m3是智源研究院发布的新一代通用向量模型,它具有以下特点:支持超过100种语言的语义表示及检索任务,多语言、跨语言能力全面领先(M ulti-Lingual)最高支持8192长度的输入文本,高效实现句子、段落、篇章、文档等不同粒度的检索任务(M ulti-Granularity)同时集成了稠密检索、稀疏检索、多向量检索三大能力,一站式支撑不同语义检索场景(M ulti-Functionality)从hf下载好模型之后,假设放置在某个路径/path/to/bge-m3,通过下面函数,利用FAISS创建一个高效的向量存储。|实现RAG
基于用户的问题,从向量数据库中检索相关段落,并根据设定的阈值进行过滤,最后让模型参考上下文信息回答用户的问题,从而实现RAG。|创建网页UI最后,通过gradio创建网页UI,并进行评测。生成的Web UI如下:需要上述完整代码的读者,关注本公众号,然后发送fin,即可获取github仓库代码链接。问答测试对于同样的问题和上下文,我基于Qwen-7b、Gemma、Mistral、Mixtral和GPT-4分别进行了多次测试。下面是一些case:qwengemmamistralmixtralgpt4主要结论(只是针对有限的几次测试,个人主观评判)如下:👍 GPT-4表现最好,指令遵循能力很强,在回答的时候能附上引用段落编号✌️ Mixtral表现第二,但没有在回答的时候附上引用💪 Qwen-7b表现第三,也没有在回答的时候附上引用😅 Gemma表现一般,而且回答里面有一些幻觉😅 Mistral表现一般,使用英文回复,不过在回答的时候附上了引用段落编号总结1.本文展示了如何使用Langchain和Ollama技术栈在本地部署一个资讯问答机器人,同时结合RSSHub来处理和提供资讯。2.上下文数据质量和大模型的性能决定了RAG系统性能的上限。3.RAG通过结合检索技术和生成模型来提升答案的质量和相关性,可以缓解大模型幻觉、信息滞后的问题,但并不意味着可以消除。
经过调研,我决定先采取Langchain+Ollama的技术栈来作为demo实现,当然,后续我也会考虑使用dify、fastgpt等更加直观易用的AI开发平台。整体框架设计思路如下:另外,本次开发的运行环境是Intel Mac,其他操作系统也可以。下载模型等可能需要梯子。Langchain简介https://www.langchain.com/langchainLangchain是当前大模型应用开发的主流框架之一,旨在帮助开发者构建和部署基于大型语言模型(LLM)的应用。它提供了一系列的工具和接口,使得与LLM交互变得简单。通过Langchain,开发者可以轻松创建定制的高级应用,如聊天机器人、问答系统和多种智能应用。Langchain的核心在于其“链”概念,这是一个模块化的组件系统,包括Model I/O(模型输入输出)、Retrieval(数据检索)、Chains(链)、Agents(代理)、Memory(内存)、和Callbacks(回调)。这些组件可灵活组合,以支持复杂的应用逻辑。Model I/O模块负责处理与语言模型的直接交互,包括发送请求和解析响应。Retrieval模块用于增强语言模型的回答能力,通过向量数据库检索相关信息来支持回答生成。Chains模块则是多个组件的集成,用于构建更复杂的应用逻辑。Langchain的生态系统还包括LangSmith、LangGraph和LangServe等工具,这些工具能帮助开发者高效管理从原型到生产的各个阶段,以便优化LLM应用。Ollama简介https://ollama.com/Ollama是一个开箱即用的用于在本地运行大模型的框架。它的主要功能和特点包括: