Agent 开发常见名词说明与类比

Agent 开发常见名词说明与类比

核心类比:Agent 公司化

按"Agent 公司化"来记会最顺:大模型是员工,Prompt 是口头交代,Skill 是 SOP,Tool 是手,MCP 是门禁卡,Graph 是流水线。

名词对照表

名词 说明 类比
LLM 推理引擎,负责理解、规划、决策 刚入职的天才员工,脑子好但不懂你公司
Prompt 给模型的临时指令和上下文 当面口头交代,一次性、用完即走
Rules 长期行为约束和输出规范 员工手册,保证它不跑偏
Tool 原子能力,如查库、调 API、搜网 工位上的扳手、螺丝刀,一个函数干一件事
Function Calling 模型输出结构化调用意图的协议 员工写"派工单",真正执行还是你代码
Skill 可复用的业务方案包:指令+流程+工具+输出规范 SOP 手册,解决"这类活怎么干"
MCP 标准化连接协议,让 Agent 安全访问外部系统 统一门禁卡/USB-C 插座,解决"怎么连进去"
Memory 短期会话上下文 + 长期向量记忆 记事本 + 档案柜
Planning 任务分解、计划生成、反思修正 项目经理拆 TODO
ReAct 想→做→看→再想的循环 边干边看、动态调整
Router 按意图分类后派发给对应分支/工具 前台分诊台
Subagent 独立上下文、可隔离/并行的子智能体 外包团队
Graph 状态机编排:Node + Edge + State 流水线/调度中心
Node 执行单元:LLM 调用、工具执行、纯逻辑 工位
Edge 节点间流转,含条件边和循环边 传送带/分叉口
State 节点间共享的数据容器 黑板/工单夹
Checkpoint 状态快照,支持断点续跑 存档点
Subgraph 封装成节点的子图,主图视作黑盒 独立车间,主流水线只看输入输出

容易混淆的点

  • Skill ≠ Tool:Tool 是原子动作,Skill 是"什么时候用哪些 Tool + 怎么用 + 输出什么"的完整方案。
  • MCP ≠ Function Calling:Function Calling 是模型内部的调用约定;MCP 是 Agent 和外部系统之间的连接标准。
  • Graph ≠ Skill:Graph 是编排器,Skill 是能力包。一个 Skill 可以落地为一个 Node、一个 Subgraph,或一组 Tool 的组合。
  • Subgraph 的关键价值是状态隔离:主图只关心它进什么、出什么,内部流程自己管。

实践建议

模型识别不到指令时,很多时候不是 Prompt 不够,而是 Tool 描述不清 或 路由分支没结构化。Tool 的 docstring 要写得像给一个完全不懂的人看,Skill 的触发条件也要显式化,别全靠模型自己悟。


示例:用 LangGraph 搭建一个"技术调研 Agent"

下面用一个具体的代码示例,把上面提到的名词串起来看一遍。

场景描述

用户说:"帮我调研一下 LangGraph 的最新文档和最佳实践,整理成报告。"

Agent 需要:理解意图 → 拆任务 → 分别搜索 → 汇总输出。

代码示例

python 复制代码
from langgraph.graph import StateGraph, START, END
from langchain_core.tools import tool
from langchain_anthropic import ChatAnthropic
import json

# --- 1. 定义 State(黑板/工单夹)---
from typing import TypedDict, Annotated
import operator

class ResearchState(TypedDict):
    query: str
    steps: list
    results: dict
    report: str

# --- 2. 定义 Tool(工位上的工具)---
@tool
def search_docs(query: str) -> str:
    """搜索 LangGraph 官方文档内容。参数 query 是搜索关键词。"""
    # 实际场景中调用文档 API
    return f"搜索结果: {query} 的文档内容..."

@tool
def search_best_practices(query: str) -> str:
    """搜索 LangGraph 最佳实践和社区经验。参数 query 是搜索关键词。"""
    return f"搜索结果: {query} 的最佳实践..."

# --- 3. 定义 Node(工位)---
def plan_node(state: ResearchState) -> ResearchState:
    """Planning 节点:把用户请求拆成子任务"""
    model = ChatAnthropic(model="claude-sonnet-4-20250514")
    plan = model.invoke([
        {"role": "system", "content": "你是一个调研助理。把用户的调研请求拆成3个具体的搜索子任务,返回JSON数组。"},
        {"role": "user", "content": state["query"]}
    ])
    steps = json.loads(plan.content)["steps"]
    return {"steps": steps, "results": {}}

def search_node(state: ResearchState) -> ResearchState:
    """搜索节点:并行执行各个子任务"""
    tools = {"docs": search_docs, "practices": search_best_practices}
    results = {}
    for i, step in enumerate(state["steps"]):
        # 这里用 tool calling 实际执行搜索
        results[i] = f"完成了 '{step}' 的搜索"
    return {"results": results}

def report_node(state: ResearchState) -> ResearchState:
    """报告节点:汇总搜索结果,生成最终报告"""
    model = ChatAnthropic(model="claude-sonnet-4-20250514")
    report = model.invoke([
        {"role": "system", "content": "你是一个技术写手。根据搜索结果生成一份结构化的调研报告。"},
        {"role": "user", "content": f"调研请求: {state['query']}\n搜索结果: {state['results']}"}
    ])
    return {"report": report.content}

# --- 4. 构建 Graph(流水线)---
graph = StateGraph(ResearchState)

# 添加 Node(工位)
graph.add_node("plan", plan_node)
graph.add_node("search", search_node)
graph.add_node("report", report_node)

# 添加 Edge(传送带/分叉口)
graph.add_edge(START, "plan")
graph.add_edge("plan", "search")
graph.add_edge("search", "report")
graph.add_edge("report", END)

# --- 5. 编译并运行 ---
app = graph.compile(
    checkpointer=MemorySaver(),  # Checkpoint 存档点
)

result = app.invoke(
    {"query": "帮我调研一下 LangGraph 的最新文档和最佳实践,整理成报告"},
)
print(result["report"])

执行流程图解

复制代码
用户请求
    │
    ▼
┌─────────┐
│  plan    │  ← Planning 节点:拆任务
│  (LLM)   │
└────┬─────┘
     │ steps: ["搜索文档API", "搜索状态管理", "搜索错误处理"]
     ▼
┌─────────┐
│  search  │  ← Tool 调用节点:并行执行搜索
│ (Tools)  │
└────┬─────┘
     │ results: {0: "...", 1: "...", 2: "..."}
     ▼
┌─────────┐
│  report  │  ← LLM 节点:生成报告
│  (LLM)   │
└────┬─────┘
     │ report: "LangGraph 调研报告..."
     ▼
   输出结果

这个例子里的名词对应

名词 在本例中的体现
Graph StateGraph 构建的整个流水线
Node plan_node、search_node、report_node 三个工位
Edge START→plan→search→report→END 的流转路径
State ResearchState 字典,节点间传递工单
Tool search_docs、search_best_practices 两个原子工具
Function Calling LLM 输出调用工具的 JSON 结构化指令
Planning plan_node 把用户请求拆成 3 个子任务
Checkpoint MemorySaver() 保存状态快照,支持断点续跑
Skill 整个"技术调研"流程可封装为一个 Skill,供其他 Agent 复用
Subgraph 如果搜索逻辑很复杂,可以拆成子图,主图只调一个 search_subgraph 节点
相关推荐
devilnumber1 小时前
Lambda 表达式(Java)优缺点清晰分析
java·开发语言·python
大泽九章2 小时前
XSS入门:存储型、反射型、DOM型,用Flask全复现
python·网络安全·flask
class心平气和2 小时前
ADB 工具函数 Python 使用教程
开发语言·python·adb
小小张说故事2 小时前
Python 里 is 和 == 到底差在哪?拆开小整数池、字符串驻留与 0ns 身份比较
python
滴啦嘟啦哒2 小时前
【具身笔记】【Piper+PI0.5】三、探究失败原因
笔记·python·vla·具身
W_326002 小时前
Python 图像处理第二十八章|OpenCV 形态学操作进阶:腐蚀、膨胀、开运算、闭运算、梯度、顶帽黑帽
图像处理·人工智能·python·opencv·计算机视觉
BD_Marathon3 小时前
【Python】标准多态和鸭子多态
python
用户8356290780513 小时前
Python 操作 Excel:创建数组公式与 R1C1 公式
后端·python
万化冥合3 小时前
怎么批量把 Word 转 PDF?
python·pdf·c#·word