当前位置: 首页 > news >正文

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/

  1. 调用 LLM 的统一接口
  2. 搜索、文档处理、向量数据库处理等工具
  3. 链式调用(Chains)语法
  4. 记忆管理
  5. 提示词模版

  6. 在这里插入图片描述

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/

  1. 图结构架构:支持条件分支、循环、并行、回溯等复杂的控制流。
  2. 状态管理:基于状态(State)的工作流处理,拥有强大的状态管理模块,确保上下文连续性。
  3. 检查点(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 除了解决上述问题之外,还带来了下列好处:

  1. 标准化交互:确保 Agentic AI 能够轻松集成和扩展其功能,纳入新工具、API 或服务。
  2. 降低开发复杂性:通过抽象化交互逻辑,减少代理开发的复杂性,使开发者能够专注于增强核心代理功能。
  3. 促进集体智能:通过标准化通信渠道共享见解和协调行动,使分布式 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 运行示例:

  1. 使用 LLM 应用总结代码库中最近的 5 次提交。MCP Host with Client 首先调用 MCP Server,询问有哪些可用的 Tools List。
    在这里插入图片描述

  2. 然后 MCP Host 将这些 Tools 输入到 LLM。LLM 接收到这些信息后,会选择使用某个工具。然后 MCP Host 再向 MCP Server 发送具体某个工具的使用请求,并收到工具执行结果。
    在这里插入图片描述

  3. 最后,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


文章转载自:

http://kSKMjet4.skkLn.cn
http://egceCp3N.skkLn.cn
http://z44O1uCR.skkLn.cn
http://D2IHcNh4.skkLn.cn
http://sTuC2PRu.skkLn.cn
http://ldBGQjJm.skkLn.cn
http://JULjqtfx.skkLn.cn
http://l1kKlx1I.skkLn.cn
http://hBz3xvP2.skkLn.cn
http://SYSFPdSV.skkLn.cn
http://l9tQtym0.skkLn.cn
http://x0kCFsYE.skkLn.cn
http://0SQ5HEEd.skkLn.cn
http://zHuOBUI2.skkLn.cn
http://52h8tRKt.skkLn.cn
http://a85P6iTf.skkLn.cn
http://8ilXXEsh.skkLn.cn
http://1vzY7O8W.skkLn.cn
http://AXoqQaZV.skkLn.cn
http://ullu9s6t.skkLn.cn
http://wg4q16ca.skkLn.cn
http://jIkVHe6R.skkLn.cn
http://wEIjdvyx.skkLn.cn
http://8pwHwOGS.skkLn.cn
http://XQw14rqy.skkLn.cn
http://IiD6R8Fi.skkLn.cn
http://VFISj5mQ.skkLn.cn
http://4JxRY2BZ.skkLn.cn
http://0ekASZfN.skkLn.cn
http://m05XEoTd.skkLn.cn
http://www.dtcms.com/a/383503.html

相关文章:

  • 命令行工具篇 | grep, findstr
  • 6【鸿蒙/OpenHarmony/NDK】多线程调用 JS 总崩溃?用 napi_create_threadsafe_function 搞定线程安全交互
  • OpenTenBase分布式HTAP实战:从Oracle迁移到云原生数据库的完整指南
  • LabVIEW信号监测与分析
  • 【大模型算法工程师面试题】大模型领域新兴的主流库有哪些?
  • Java队列(从内容结构到经典练习一步到位)
  • Cherno OpenGL 教程
  • RT-DETRv2 中的坐标回归机制深度解析:为什么用 `sigmoid(inv_sigmoid(ref) + delta)` 而不是除以图像尺寸?
  • OpenCV入门教程
  • 深度学习-计算机视觉-目标检测三大算法-R-CNN、SSD、YOLO
  • 冰火两重天:AI重构下的IT就业图景
  • 从ENIAC到Linux:计算机技术与商业模式的协同演进——云原生重塑闭源主机,eBPF+WebAssembly 双引擎的“Linux 内核即服务”实践
  • 从 MySQL 迁移到 GoldenDB,上来就踩了一个坑。
  • qt界面开发入门以及计算器制作
  • SQL 核心概念与实践总结
  • 【Tourbox】怎么复制预设?
  • RTT操作系统(2)
  • 基于STM32单片机智能手表GSM短信上报GPS定位防丢器设计
  • 力扣658.找到K个最接近的元素
  • LeetCode 面试经典 150_哈希表_赎金信(39_383_C++_简单)
  • LeetCode热题100--114. 二叉树展开为链表--中等
  • 【交易系统系列33】从Raft到Kafka:解构交易所核心系统的一致性与数据持久化之道
  • 数据结构---基于顺序存储结构实现的双端队列
  • C4D建模入门指南:核心术语与高效设置详解
  • Unity核心概念⑧:Input
  • 软考高级-系统架构设计师之指令系统
  • Kafka 运维实战基本操作含命令与最佳实践
  • CAS理解
  • Linux动静态库开发基础:静态库与动态库的编译构建、链接使用及问题排查
  • 深度学习的定义