AI Agent 软件工程关键技术综述
目录
文章目录
- 目录
- Agent 框架:LangChain、LangGraph 和 LangSmith
- LangChain v.s. LangGraph
- LangChain
- LangGraph
- LangSmith
- Agent-chat UI
- 外部知识检索:RAG
- 上下文协议:MCP
- 上下文工程:Context Engineering
- 记忆系统:Memory
- 参考文档
Agent 框架:LangChain、LangGraph 和 LangSmith
LangChain v.s. LangGraph
LangChain 和 LangGraph 出自于同一个团队,都被设计用于与 LLM 集成并协同工作,两者常被混淆。但顾名思义,两者有着显著的区别:
- LangChain(链条):静态顺序工作流,每个步骤都遵循预先定义的顺序。
- LangGraph(有向图):动态分支工作流,允许在每一步进行决策并选择分支。
显然,LangChain 和 LangGraph 有着不同的应用场景,LangChain 专注于提供组件和 LCEL(LangChain Expression Language)链式编程语法,适合简单的一次性任务;LangGraph 则是构建有状态 Agent 系统的理想选择。两者并不互斥,可以协同工作。例如:在 LangGraph 中的一个 Node 可以使用LangChain 来定义一系列步骤。
所以,在学习 LangGraph 前,建议先学习 LangChain 的基础知识。虽然使用 LangGraph 创建智能体或许不需要完全掌握 LangChain,但扎实掌握其基础知识肯定会有所帮助。
特性对比:
应用场景对比:
LangChain
LangChain 是一个开发 LLM AI 应用程序的基础框架,封装并提供了各种常用的接口和工具,可以方便开发者快速调用并实现业务功能,加快开发速度。
官方手册:https://python.langchain.com/docs/introduction/
- 调用 LLM 的统一接口
- 搜索、文档处理、向量数据库处理等工具
- 链式调用(Chains)语法
- 记忆管理
- 提示词模版
- 等
LangChain 的 LCEL 语法示例:
from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplatemodel = ChatOpenAI()
prompt = ChatPromptTemplate.from_template("请回答以下问题:{question}")# LCEL 链式编排
chain = prompt | model
# 运行链
result = chain.invoke({"question": "什么是人工智能?"})
LangGraph
LangGraph 基于 LangChain 之上,是一个基更高级的 AI Agent 编排框架,可以处理复杂的 Workflow 编排和 Multi-Agent 编排。
官方手册:https://langchain-ai.github.io/langgraph/
- 图结构架构:支持条件分支、循环、并行、回溯等复杂的控制流。
- 状态管理:基于状态(State)的工作流处理,拥有强大的状态管理模块,确保上下文连续性。
- 检查点(Checkpoints)管理:支持人工介入二次检查
- 等
顾名思义,Lang(语言)+ Graph(图)= 用图结构组织 LLM AI 的思考流程。如下图所示。
值得注意的是 LangGraph 中的 State 机制。常规的 LLM 模型 API 调用不能维持多步骤的连续推理过程,每次对话都是独立的,不能记住之前的处理结果,也不能基于中间结果动态调整后续步骤。LangGraph State 正是为了解决这个问题,它将复杂任务分解成多个步骤,并记住每个步骤的结果。后续步骤可以访问前面步骤的结果和数据,并根据结果判断调整执行路径,最终完成整个任务链条。
LangGraph 的图结构编程示例:
from langgraph.graph import StateGraph
from typing import TypedDictclass State(TypedDict):messages: listcurrent_step: strdef node_a(state: State) -> State:return {"messages": state["messages"] + ["处理A"], "current_step": "A"}def node_b(state: State) -> State:return {"messages": state["messages"] + ["处理B"], "current_step": "B"}# 创建图结构
graph = StateGraph(State)
graph.add_node("node_a", node_a) # node
graph.add_node("node_b", node_b) # node
graph.add_edge("node_a", "node_b") # edge
执行模式对比:
LangSmith
LangSmith 是一个针对 Agent 和 LLM Call 之间的可视化监控、追踪、调试、测试和评估平台:
- Debugging:实时诊断 LLM 交互中的逻辑错误。高亮异常节点(如工具调用超时、JSON 解析失败),关联错误与代码位置(如提示词第 15 行格式错误)。
- Tracing:记录跨组件的完整调用链,例如:串联 LangGraph 节点调用、数据库查询、API 请求等。
- Monitoring:生产环境实时指标观测与告警,包括:请求量、延迟、错误率、Token 消耗分布、工具调用成功率等。
- Test & Evaluation:自动化测试,支持对不同的 Prompt、LLM 执行 A/B 测试并生成质量评估。
- Prompt & Optimisation:追踪每次 Prompt 的修改对结果输出的影响。
官方地址:https://www.langchain.com/langsmith
Agent-chat UI
Agent-chat UI 是 LangChain Ecosystem 中的一部分,帮助开发者快速搭建一个基于 AI Agent 的 Chat WebUI。
项目地址:https://github.com/langchain-ai/agent-chat-ui
外部知识检索:RAG
RAG(Retrieval Augmented Generation,检索增强生成)最初用于解决 LLM 数据过时、幻觉和偏见问题,现今也常被用于注入私域知识。是 Agent 和 LLM 交互环节中的一个重要组成部分。
- 数据过时:LLM 的知识边界受限于过时的预训练数据。此外,LLM 版本迭代往往也是滞后的。
- 幻觉:当 LLM 遇到知识盲区时,会启动一种联想补全机制基于局部信息拼接出看似合理、实则虚构的内容,并自信的认为这是真实的。
- 私域知识:LLM 预训练数据来自于公域数据,并不包含企业内部的私域数据,所以也无法理解企业内部的私域知识。
RAG 是缓解或解决上述问题的良药,核心是 “动态知识注入机制”,提供了一个外部知识存储,在不修改 LLM 参数的前提下,通过 “外挂” 的形式为 LLM 补充 “实时、准确、私域” 的知识,拓宽了 LLM 的知识边界。
- 解决数据过时:RAG 外部知识存储具有实时性,输入 User Query 前会主动检索实时数据,再将其组合到上下文输入给 LLM。
- 缓解幻觉:RAG 外部知识存储具有准确性,LLM 返回结果之前会自动检索准确数据进行对比,降低 LLM 捏造虚假内容的概率。但实际上 RAG 无法完全杜绝幻觉问题。
- 解决私域知识:RAG 外部知识存储具有私域知识,输入 User Query 前会将私域知识输入给 LLM。
如下图所示,RAG 的核心流程有检索阶段、增强阶段和生成阶段。
上下文协议:MCP
Agentic AI 解决了 LLM 无法操作外部环境的问题,RAG 解决了 LLM 知识边界固化的问题,使得 LLM 应用的潜力得到了极大的扩展。而 Anthropic 推出的 MCP(Model Context Protocol,模型上下文协议)则是为了解决 LLM 上下文的局限性问题,包括:
- 长上下文传输瓶颈:传统 JSON 格式输入 10K token 的上下文到 LLM 需 500ms+,而 MCP 压缩后仅需 20ms。
- 动态更新低效:局部更新(如新增对话)需重传全量上下文到 LLM,而 MCP 支持增量更新。
- 多模型协同障碍:MCP C/S 是与 LLM 解耦的,LLM-A 的输出作为 LLM-B 的输入需序列化转换,因为 MCP 提供了标准化上下文协议容器字段。例如:创建一个与 GitHub 交互的 MCP Server 时,任何支持 MCP 的 LLM 应用程序都可以使用它。
- 标准化扩展性差:在软件工程层面标准化 Agentic AI 和 RAG 的实现方式,使得 LLM 应用系统能够在一个标准化的协议之上进行构建,继而实现 LLM 应用的可扩展性、稳定性和深度上下文感知。
MCP 除了解决上述问题之外,还带来了下列好处:
- 标准化交互:确保 Agentic AI 能够轻松集成和扩展其功能,纳入新工具、API 或服务。
- 降低开发复杂性:通过抽象化交互逻辑,减少代理开发的复杂性,使开发者能够专注于增强核心代理功能。
- 促进集体智能:通过标准化通信渠道共享见解和协调行动,使分布式 Agentic AI 系统能够实现单一架构无法实现的结果。
- MCP Host:LLM 应用及其运行环境,例如:ChatBot、AI IDE、AI Agent 等。
- MCP Client:运行在 LLM 应用内的、和 MCP Server 一一对应的、向 MCP Server 发出请求的 Client 模块。
- MCP Server:作为 MCP Client 和 Real Service 之间的桥梁,左边接受 MCP Client 的请求,右边将请求翻译并转发到后端的 Real Service,例如:API、DB、File、SSE、Internet 等等。
MCP 的 Transport Layer 采用了 JSON-RPC 结构化通信协议,支持多种消息类型:
- Stdio(标准输入输出)
- SSE(服务器推送事件流)
- 自定义实现
MCP 运行示例:
-
使用 LLM 应用总结代码库中最近的 5 次提交。MCP Host with Client 首先调用 MCP Server,询问有哪些可用的 Tools List。
-
然后 MCP Host 将这些 Tools 输入到 LLM。LLM 接收到这些信息后,会选择使用某个工具。然后 MCP Host 再向 MCP Server 发送具体某个工具的使用请求,并收到工具执行结果。
-
最后,MCP Host 将工具执行结果输入到 LLM。LLM 返回最终的响应结果给用户。
上下文工程:Context Engineering
记忆系统:Memory
参考文档
https://mp.weixin.qq.com/s?search_click_id=2595133522243922249-1757768482911-3650298109&__biz=MzIwNDc1ODIxNw==&mid=2247487680&idx=1&sn=dcb95cc4ef8b8e6fc2e3c670f68acb56&chksm=96fd4bc9de7ec251d18421362cd46aad9af52834d5160b272d5a2c32f6367b6df3e378ef2b26&scene=7#rd
https://mp.weixin.qq.com/s/EqtJcKQ4zGzR31VelmJ6-w
https://mp.weixin.qq.com/s/z57G9QjSwpZyl7xv4MpszQ
https://mp.weixin.qq.com/s/YFbQaUCHmfAdVrrxSjalTw
https://mp.weixin.qq.com/s/H-RaWGd1JbWpXsdT8X5PSA