链是 LangChain 框架的核心功能之一,它为组合多个组件提供了强大且灵活的方式。在 LangChain 里,“链”(Chains)是一种将多个组件或工具,模型或处理步骤组合起来,形成特定工作流程的机制。借助链,能够把简单的组件组合成一个整体,完成复杂的任务。
一、链介绍
上一篇介绍了基础链、顺序链和路由链,本篇内容继续介绍检索对话问答链、检查验证链、内存链,请跟我一起开始吧(文末送智能体相关书,欢迎关注)。
二、检索问答链实战
1. VectorDBQA
VectorDBQA是最简单的检索链,直接从向量数据库检索相关文档并生成回答,如以下代码所示:
2.RetrievalQA
RetrievalQA是更通用的检索链,支持多种检索器(不限于向量数据库)。如以下代码所示:
3.RetrievalQAWithSourcesChain
RetrievalQAWithSourcesChain在RetrievalQA基础上增加了来源信息,返回回答的同时提供引用的文档来源。如以下代码所示:
4.VectorDBQAWithSourcesChain
VectorDBQAWithSourcesChain是VectorDBQA的变体,专门用于处理带来源的问答,内部封装了向量数据库检索逻辑。如以下代码所示:
5.MultiRetrievalQAChain
MultiRetrievalQAChain支持从多个检索器获取信息,适用于混合数据源的复杂场景。如以下代码所示:
三、对话问答链实战
1.ChatVectorDBChain
支持对话历史的向量数据库问答链,适合多轮对话。应用场景包括聊天机器人、交互式文档问答等。如以下代码所示:
四、验证链实战
LLMCheckerChain和
LLMSummarizationCheckerChain是用于验证和改进生成内容的重要工具。
1.LLMCheckerChain
LLMCheckerChain用于验证 LLM 生成的回答是否准确,并在必要时提供修正。如以下代码所示:
2.LLMSummarizationCheckerChain
LLMSummarizationCheckerChain专门用于验证和改进文本摘要,确保摘要准确反映原文内容。如以下代码所示:
五、内存链实战
用于在多轮对话中保存上下文信息,实现有记忆的交互。
1.ConversationChain
最简单的记忆链,基于ConversationBufferMemory可保存完整对话历史,适合闲聊、客服等场景。如以下代码所示:
2.ConversationalRetrievalChain
ConversationalRetrievalChain是在基础对话链上的增强版本,它集成了检索功能,可以从外部文档或知识库中获取相关信息,以增强对话的上下文。如以下代码所示:
六、总结
LangChain提供了丰富的链类型,从简单的 LLM 调用到复杂的代理系统,覆盖了各种应用场景。在实际开发中,应根据任务需求选择合适的链类型,遵循 "从简单到复杂" 的原则,合理组合现有组件,并在必要时自定义链以满足特定需求。通过遵循最佳实践,可以构建出高效、可维护、更强大且安全的 LLM 应用。
