LangChain 入门学习第八篇-带工具的博客问答 Agent

💡 原文中文,约2600字,阅读约需7分钟。
📝

内容提要

本文介绍如何将Agent与RAG结合,构建博客问答Agent。它提供三个工具:检索文章、列出分类、读取来源,让Agent自主决定调用工具获取信息。通过工具抽象,Agent无需关心内部实现,并强调工具边界安全。最终,Agent负责决策,RAG工具查资料,LLM总结回答,实现更灵活的问答系统。

🔎

延伸解读

工具抽象与安全边界

文章强调将RAG检索封装为工具后,Agent无需关心内部实现,只需调用接口。同时,读取来源工具限制了路径,只能访问指定目录,防止任意文件读取。这提醒开发者,在赋予Agent工具能力时,必须考虑安全边界,避免潜在风险。

Agent与RAG的分工

Agent负责决策,RAG工具负责检索,LLM负责总结。这种组合适用于问题类型多样的场景,如查询分类、阅读文章等。相比固定RAG链路,Agent能更灵活地调度不同工具,但简单问答场景下,直接使用RAG链可能更高效。

调试与可观测性

运行demo时,输出会打印消息过程,包括模型调用工具和工具返回结果。这有助于确认模型是否真正使用了工具,而非凭记忆回答。对于开发调试,这种可观测性很重要,能帮助定位问题,确保Agent行为符合预期。

Q&A

LangChain 第八篇博客问答 Agent 提供了哪些工具?

提供了三个工具:search_blog_posts(根据问题检索博客文章)、list_blog_categories(列出博客分类)、read_blog_source(读取某篇博客正文开头)。

如何确保博客问答 Agent 不会读取任意文件?

在 read_blog_source 工具中进行了路径限制,只允许读取 blog/content/post 目录下的文章,如果路径不在该目录下则返回错误信息。

博客问答 Agent 中 system prompt 的作用是什么?

system prompt 明确要求回答博客内容相关问题时必须先调用 search_blog_posts,否则模型可能直接根据已有知识回答,失去 RAG 的意义。

Agent 和 RAG 是如何结合的?

Agent 负责决策,RAG 工具负责查资料,LLM 负责总结回答。Agent 根据用户问题自主选择调用工具,RAG 工具提供检索结果,LLM 基于结果生成最终答案。

运行博客问答 Agent 的 demo 命令是什么?

在 code/langchain-demo 目录下运行:uv run python -m chapter08.blog_qa_agent "Python 函数式编程讲了什么?请给出参考文章。"

为什么说工具抽象对 Agent 有好处?

工具抽象让 Agent 无需关心工具内部实现(如关键词检索、向量检索或数据库调用),只需知道工具的功能即可,简化了 Agent 的决策过程。

🏷️

标签

➡️

继续阅读