LangChain 整体总结:AI Agent 第一阶段学习完成
LangChain 部分学完了,我们来整体总结一下。
LangChain 部分学完了,我们来整体总结一下。
我们学了 LangChain 的各种功能:tool、MCP、RAG、memory、prompt template、output parser 等,并且学了 LCEL 的写法,把流程组装成 chain 来调用。LCEL 就是基于 Runnable 的 API 来声明 chain,然后统一执行。声明的 chain 可以用 invoke、batch、stream 等 API 来同步调用、批量调用、流式返回——因为所有 Runnable 都实现了这些方法。
LangChain 很多 API 都实现了 Runnable 接口,比如 PromptTemplate、OutputParser、ChatOpenAI 等。而且 Runnable 相关的 API 也有很多。
prompt 毫无疑问是 AI Agent 中最核心的部分:我们调用大模型完成各种功能,都是在 prompt 里描述的;类似 RAG 查询向量数据库,查到的文档也是放在 prompt 里给到大模型。
前面学了输出控制:用 model.withStructuredOutput 来控制输出的结构,它底层会根据模型来决定用 tool 或者 output parser,确保输出一定是符合格式要求的。一般用 withStructuredOutput 就可以了,但当流式返回内容的时候,如果要实现打字机效果,就要直接用 output parser 了,比如 tool 参数的流式打印。
我们已经调用大模型完成过很多功能了,但输出一直没做控制,都是自然语言的形式。而很多情况下,我们希望大模型按照我们的格式要求,返回一个 JSON——这就需要用到 output parser 的 API 了。
我们给大模型扩展了 Tool,让它可以做一些事情而不只是回答问题;给大模型扩展了 RAG,基于 query 获取向量数据库里相关的知识放入 prompt。但这些其实都依赖一个东西:Memory。
我们学了 loader、splitter、向量数据库 Milvus,这样 RAG 流程就完整跑通了:
前面我们实现了 RAG:文档向量化放到向量数据库,每次查询根据向量化的 query 去数据库做相似度匹配,查出相关文档放到 prompt 里给大模型,大模型来生成回答。
上节我们学了 loader 和 splitter:知识可能有各种来源,比如一个视频、一个 pdf、一个网页、一个 word 文档,这时候就需要通过各种 loader 从中提取信息,把它们转换成 Document。但是 Document 可能会很大,需要用 Splitter 分割成一个个比较小的 Document(chunk),之后用嵌入模型,把分块的文档向量化后存入向量数据库。