上篇笔记写到,LangChain的使用主要分为以下四步:准备数据、生成提示、调用模型、解析输出。本篇笔记主要涉及后两步。
调用模型
LangChain把其支持的模型分为三类,分别是大语言模型(LLM)、聊天模型(Chat Model)和文本嵌入模型(Embedding Model)。所有支持模型都可以用LangChain的函数进行直接调用,不需要跟着不同模型的repo去构建代码,而能体系化地复用已写好的LangChain结构的代码,非常方便,也适合进行不同模型之间的性能比较。
在我看来,LangChain最精髓的地方就是对多种大模型的集中整合和快速调用。LangChain能做到这一点的很大一部分原因是因为它能直接载入HuggingFace中的开源模型,这样成百上千的模型都可以通过LangChain这一个框架接入自己的代码,同时也简化了模型的使用方式。同样,LangChain也支持本地自定义模型的接入。由于本篇笔记只总结要点与思路,因此这里就不用具体的代码进行举例了。
解析输出
最后一步就是解析大模型生成的输出。如果是作为一个普通用户进行一次性使用的话,其实也可以不需要这一步,但如果是将大模型用作一种生产工具、想要将其输出传入到下游工作流,这种标准化就十分必要。LangChain提供了多种类型的输出解析器,用于不同的数据处理目的,包括列表解析器、日期时间解析器、结构化输出解析器、Pydantic(JSON)解析器、自动修复解析器和重试解析器等,可谓应有尽有。输出解析器是通过将输出格式构建成模板输入大模型的方式来规定大模型的输出格式的。
这其中尤其让我惊奇的是自动修复解析器和重试解析器,这两类解析器能分别自动修复输出的格式错误和内容错误。它们能自动进行修复的核心在于它们都再次调用了大模型,让大模型帮助它们修复输出错误。这让我直接体会到了“将大模型作为生产工具使用”的真正含义,不仅是在用大模型帮我们完成特定的任务,在使用这一大模型的过程中,又使用了其他大模型来帮助这一大模型进行更好的输出。
而将这些功能集成在一起的LangChain也是为用户提供了很大的方便。