LangChain 知识点总结与思考(4) | 豆包MarsCode AI刷题

45 阅读3分钟

在这篇笔记中,主要对LangChain中的链和代理两个模块进行深入,它们也是LangChain能够简洁地实现复杂功能关键模块,对大模型的全流程使用进行了规范化的封装,能够方便地进行调整,也具有很好的迁移性。

既然LangChain的名字本身就包含Chain,链这个模块当然也是其实现差异化的核心。在之前笔记提到的大模型全流程使用中,我们都是一步一步实现准备数据、生成提示、调用模型、解析输出等部分,并将它们手动组装起来,而链则将这一整套流程封装到了单个模块中,并提供了丰富的接口。这样一来,一旦写好了一个链的流程,就能很方便地进行复用和改造,而且还可以将多个链组合在一起完成更复杂的任务,并在这一过程中减轻管理和维护的压力。

和之前笔记中提到的很多其他模块一样,LangChain也提供了很多种不同类型的链的实现,主要包括大语言模型链(LLMChain,最基础的链)、顺序链、转换链、路由链等,还有其他使用特定工具完成特定任务的链,如进行数学计算或进行向量化数据查询的链。

其中,顺序链可以将若干的链按照顺序拼接起来,让前一链的输出作为后一链的输入,从而实现多个模型的协作,完成一个多步骤任务。路由链也能将多个链组合在一起,而它的功能是能够根据用户的输入动态选择之后使用哪一个链进行推理,使得推理更加智能,让专精领域各不相同的大模型负责各自拿手的任务。同时,它也提供了通用的默认链负责处理无法被分类的任务。

代理

代理,在我看来就是给大模型赋予了手脚。代理最重要的特征是它能根据需求去调用外部工具解决问题。而所谓“外部工具”所具有的可能性就很多了,这给予了大模型极大的扩展能力。例如,针对大模型无法获取实时信息的问题,可以接入搜索引擎;针对大模型在数学运算上准确度不高的问题,可以接入计算器。这在我看来是LangChain除了能够自由调用大量模型以外最为重要的功能模块。

在这一模块中,也引入了ReAct框架,即引导模型遵循观察-思考-行动的路径来解决问题,这同样也是一步一步地解决问题,因此也可以与之前笔记中提到的思维链结合起来。通过这样的推理路径,代理就能够判断什么时候需要调用工具,毕竟工具就是一种中间步骤,如果仍是之前一步到底的推理模式,大模型也无法很好地运用工具。

同样,和之前提到过的其他模块一样,LangChain提供了很多种类型的代理,也提供了丰富的工具。一些封装好的代理类型的例子有结构化工具对话代理和自主询问搜索代理,前者可以调用给定工具箱中的多种工具组合起来完成目标,后者可以通过自问自答结合搜索引擎的方式得到复杂问题的中间答案,从而更好地回答隐含多步查询的复杂问题。LangChain提供的工具更是多种多样,从搜索引擎到浏览器操作,从文献查询到邮箱操作,只要提供适当的权限,大模型能够跳出代码框架帮助实现很多任务。我认为,能够使大模型进一步成为一种生产工具的核心就是这多种多样的工具接口。