100.Agent智能体核心梳理
- 最核心的结构概览(按开发工作量与智能性排序)
层级 | 模块 | 作用 | 是否最核心 | 开发工作量 |
---|---|---|---|---|
1️⃣ Agent 调度与任务链路管理 | 多轮规划、子任务拆解、执行控制器 | 决定 Agent 是否智能,能否完成复杂任务 | ✅ 最核心 | 🟥 很大 |
2️⃣ 领域知识解析与调用接口封装 | 结合行业知识的检索、API包装、数据调用 | 决定 Agent 是否“专业” | ✅ 最核心 | 🟥 很大 |
3️⃣ Memory 状态管理(上下文记忆) | 存储任务状态、历史上下文、用户意图等 | 决定 Agent 是否“持续对话” | ✅ 核心 | 🟧 中大 |
4️⃣ RAG 系统(知识接入) | 检索知识、注入上下文 | 🔶 辅助大模型“说得对” | ⚠️ 必要但非最核心 | 🟨 中等 |
5️⃣ Tool 调用模块(Function Call / 外部接口) | LLM 能否调用工具、获取实时信息、执行动作 | ✅ Agent 工具化必备 | 🟧 中大 | |
6️⃣ 反馈与自我修正模块(ReAct / Reflection) | 自省、自我调整执行步骤 | ⚠️ 高阶 Agent 特性 | 🟨 中等 | |
7️⃣ 多模态交互(可选) | 图文语音输入输出 | 非核心但能增强体验 | ❌ 可选 | 🟩 中等或小 |
# 01.Agent 任务链路管理器(核心)
- 功能:
- 接收用户任务 → 意图识别 → 任务分解(task decomposition)
- 执行链路控制(执行中状态跟踪、分支判断、失败重试)
- 技术实现:
- LLM prompt + 模块化逻辑控制(如流程图、行为树、FSM、或 planner + executor)
- 支持中间步骤显式存储(如使用 Memory 或临时 DB)
- ✅ 建议重点开发! 这是把 LLM 从“回答问题”变成“完成任务”的根基
# 0、技术栈一览
组件 | 技术选型推荐 | 说明 |
---|---|---|
意图识别 / 任务分解 | OpenAI GPT / Claude / ChatGLM + Prompt Engineering | 核心语言理解能力 |
任务执行流控制 | Python + LangGraph / 自研 FSM / Airflow-like DAG | 控制流引擎 |
中间状态存储 | Redis / SQLite / JSON 文件 / 内存字典 | 状态管理,临时数据 |
调度框架 | FastAPI / Celery / LangChain Runnable / 自定义调度器 | 用于异步调度 |
工具注册与封装 | LangChain Tool / OpenAI Function / 自定义函数注册器 | 支持 action 绑定 |
# 1、能力拆解
# 1)用户任务识别(意图理解)
目标:从自然语言中识别出任务类型及意图参数。
基于 LLM 的 Prompt Template,如
“你是一个任务调度器,请识别用户意图,并输出任务类型及参数”
示例输出:
{ "intent": "生成日报", "parameters": { "日期": "2024-06-01", "部门": "销售部" } }
1
2
3
4
5
6
7
# 2)任务规划(Task Decomposition)
目标:把一个复杂目标任务分解为若干步骤(子任务)
实现方式:
- 基于 LLM 的 Chain-of-Thought 推理 / ReAct 框架
- 也可以使用“Planner + Executor”模型(LangGraph / AutoGen 的常见模式)
示例(用户意图:生成销售日报):
[ { "step": "查询销售数据", "action": "query_db", "inputs": {...} }, { "step": "生成图表", "action": "generate_chart", "inputs": {...} }, { "step": "撰写日报", "action": "call_llm", "inputs": {...} }, { "step": "发送邮件", "action": "send_email", "inputs": {...} } ]
1
2
3
4
5
6
# 3)执行链路控制(流程控制器)
目标:按照顺序或依赖关系执行任务步骤,支持失败重试、分支跳转。
常见策略:
- 行为树(Behavior Tree)
- 状态机(FSM)
- DAG 执行图(类似 Airflow)或 LangGraph 状态流图
控制逻辑例子:
for step in task_chain: result = run_step(step) if result.failed: retry_or_exit(step)
1
2
3
4
# 4)状态跟踪(Memory / 中间状态管理)
目标:存储中间执行结果,方便上下文引用,支持多步 reasoning。
实现方式:
- 使用内存对象,如 MemoryDict / Redis / 状态DB
- 将中间结果回写,供下一步使用
示例状态结构:
{ "task_id": "abc123", "current_step": "2/4", "results": { "step1": "销售数据已获取", "step2": "图表已生成" } }
1
2
3
4
5
6
7
8
# 5)回调与反馈机制(可选)
- 目标:支持用户或系统打断 / 重试 / 指令修改 / 反馈学习
- 实现方式:
- 每个任务步骤暴露事件监听点
- 用户/外部系统可通过 API 或 UI 控制流转
# 2、知识报告自动生成 Agent
用户输入:
“帮我生成 2024 年 5 月销售部的总结报告,并发给领导邮箱”
Step 1:意图识别
{ "intent": "生成销售总结报告", "params": { "时间": "2024年5月", "部门": "销售部" } }
1
2
3
4
5
6
7
Step 2:任务链构建
[ { "step": "提取数据", "action": "query_sales_db", "params": {...} }, { "step": "生成图表", "action": "generate_bar_chart", "params": {...} }, { "step": "写报告", "action": "llm_write_report", "params": {...} }, { "step": "发邮件", "action": "send_email", "params": {"to": "boss@corp.com"} } ]
1
2
3
4
5
6
Step 3:链路控制器执行 + 状态记录
控制器按顺序执行各 step
失败时记录状态、支持回滚或 retry
最终状态示例:
{ "task_id": "task-8923", "status": "DONE", "results": { "step1": "数据获取成功", "step2": "图表生成成功", "step3": "报告已生成", "step4": "邮件已发送" } }
1
2
3
4
5
6
7
8
9
10
# 02.知识库与行业知识封装模块
- 功能:
- 把领域数据(PDF、表格、数据库、手册)转为“可调用知识”
- 把业务接口/API/知识调用能力抽象为“可使用工具”
- 技术实现:
- 结构化 + 向量化混合知识管理(支持 SQL + RAG 混合模式)
- 工具接口(OpenAPI、LangGraph、Function Calling)
- ✅ 建议重点开发! 你需要让 LLM 能理解并用好你行业的“知识 + 数据”
# 0、技术栈一览
模块 | 工具推荐 | 说明 |
---|---|---|
文档解析 | unstructured , pdfplumber , pymupdf , trafilatura | 高质量提取文档结构 |
表格 / 数据 | pandas , duckdb , openpyxl | 表格结构清洗与抽取 |
向量化 | text2vec , OpenAI Embedding , BGE , MiniLM | 根据场景选择中英文兼容模型 |
向量库 | FAISS , Qdrant , Weaviate | 支持 metadata filtering 的优先 |
API 封装 | FastAPI , LangChain Tool , OpenAI Function | 封装成 schema 化的工具调用接口 |
Tool Router | LangGraph , LangChain Agent , AutoGen | 支持工具调度路由 |
检索框架 | LangChain Retriever , Haystack , LlamaIndex |
- 示例:智能报表 Agent 的 Memory 使用
任务:“帮我生成4月的报表” → “再加上5月的” → “导出为Excel” Agent Memory 要处理的内容:
能力 | 内容 | 存储形式 |
---|---|---|
用户信息 | user_id , 常用格式=Excel | PG / Redis |
报表请求状态 | 当前月份:4月(+5月) 维度:城市、渠道 | FSM + Redis |
上一轮对话 | 报表维度确认 | BufferMemory |
长期知识 | 过去生成的报表内容(用于比对) | Qdrant |
# 1、行业知识转为“可调用知识”
# 1)多源行业数据解析
⬅ 输入:PDF 报告、表格、数据库、网页、文档等
➡ 输出:统一结构化 / 分块内容,支持向量化或结构查询
技术实现:
类型 技术 / 工具 说明 PDF / Word / PPT unstructured
,pdfplumber
,PyMuPDF
文档内容解析为段落、结构、表格 表格 / Excel pandas
,openpyxl
表格结构提取成键值对、列表结构 网页 / 知识库站点 BeautifulSoup
,Scrapy
网页抓取与正文提取 数据库 SQLAlchemy
,psycopg2
,pymysql
可直接支持结构化查询
示例输出结构(知识块):
{ "source": "销售手册.pdf", "title": "退货政策", "content": "客户可在7天内无条件退货,须提供原始发票。", "metadata": { "部门": "客服", "更新日期": "2024-01-01" } }
1
2
3
4
5
6
# 2)知识向量化与索引(RAG支持)
将知识块转为向量 → 构建语义检索系统
支持混合查询(向量 + metadata / keyword / embedding rerank)
技术实现:
技术组件 推荐工具 说明 向量生成 OpenAI Embedding
,BGE
,MiniLM
,Cohere
,text2vec
结合语义压缩能力选择 向量库 FAISS
,Qdrant
,Weaviate
,Milvus
,Chroma
支持 metadata / filter 的优先 检索逻辑 LangChain Retriever
,Haystack Retriever
支持多通道、filter、rerank 机制
示例调用:
retriever.similarity_search(query="退货需要发票吗?", k=3)
1
# 2、行业系统/API 封装为可调用“工具”
业务接口工具化封装(Tool Registry)
把企业内部系统(CRM、ERP、SQL、工单系统、流程引擎等)的接口变成可调用的“工具”,供 LLM 使用。
技术实现:
类型 推荐方案 说明 API 封装 FastAPI + OpenAPI Schema
/LangChain Tool
/OpenAI Function
标准结构描述函数调用 Tool 注册 LangChain
,LangGraph
,AutoGen tool schema
管理和注册可用工具 Agent 连接 支持通过 Function Calling / JSON schema 传参调用工具
例1:工单创建 API 封装如下
{ "name": "create_ticket", "description": "创建工单,包含客户信息与问题描述", "parameters": { "type": "object", "properties": { "customer_name": { "type": "string" }, "issue": { "type": "string" } }, "required": ["customer_name", "issue"] } }
1
2
3
4
5
6
7
8
9
10
11
12
例2:LLM 识别并生成调用指令
{ "tool_call": { "name": "create_ticket", "arguments": { "customer_name": "张三", "issue": "账户无法登录" } } }
1
2
3
4
5
6
7
8
9
# 3、知识使用融合策略
处理场景:
- A类知识:可通过 SQL 查到(如价格、客户信息、库存等)
- B类知识:只能通过语义检索得到(如政策、规范、经验)
技术实现:
多通道 Retriever:
- 向量通道:知识块语义匹配
- 结构化通道:SQL/GraphQL 查询、RuleMatch
聚合器(Retriever Fusion / Semantic Rerank)进行结果统一
# 03.Agent Memory(任务上下文/长期记忆)
- 功能:
- 让 Agent 能
“记住上下文、理解历史、延续任务”
,不仅仅是“当前这一轮的问答”- 支持多轮任务延续(如
“刚才那个报表再加上5月的”
)- ✅ 建议开发到位! 否则 Agent 永远只能是“单轮问答机器人”
# 0、技术栈一览
能力 | 推荐工具 / 技术 | 用途说明 |
---|---|---|
短期会话记忆 | LangChain BufferMemory , RedisMemory | 追踪当前对话上下文 |
LLM压缩记忆 | LLM-Summarizer + ConversationSummaryMemory | 降低 token 消耗 |
长期语义记忆 | Qdrant , FAISS , Chroma | 模糊回忆历史内容、经验片段 |
结构状态记忆 | PostgreSQL , Redis , MongoDB | 任务参数、状态、用户身份 |
混合记忆 | LangGraph , MemoryRouter , AutoGen ToolMemory | 支持 Memory 分级和共享 |
状态管理 | FSM , LangChain PlanAndExecute , AgentContextManager | 跟踪任务生命周期与阶段 |
# 1、短期记忆
⬅ 输入:当前会话中前几轮对话(用户提问 + Agent 回复)
➡ 输出:当前轮 LLM 的 prompt context(拼接或压缩)
示例
from langchain.memory import ConversationSummaryMemory memory = ConversationSummaryMemory(llm=ChatOpenAI(), memory_key="chat_history")
1
2
示例输出内容
用户:我想生成一个4月份的销售报表 Agent:好的,请问需要哪些维度? 用户:按城市和渠道分开 ... [当前轮] 用户:再加上5月的
1
2
3
4
5
6
# 2、长期记忆
记住用户身份、偏好、过去的项目 / 查询历史
多轮之间共享记忆(甚至跨天/跨月)
技术实现:
类型 技术 / 工具 说明 向量记忆 FAISS
,Qdrant
,Weaviate
,Milvus
适合模糊查找“类似内容” 结构化记忆 PostgreSQL
,RedisJSON
,MongoDB
用户信息、任务状态等结构数据 Hybrid Memory LangGraph memory
,Agent Protocol Memory
示例存储内容
{ "user_id": "u_001", "user_name": "张三", "task_history": [ { "task_type": "报表生成", "params": { "月份": "4月", "维度": ["城市", "渠道"] } } ], "preferences": { "默认报表格式": "Excel", "常用城市": ["北京", "上海"] } }
1
2
3
4
5
6
7
8
9
10
11
# 3、状态追踪能力(任务状态机)
当前任务阶段与参数管理
Agent 可通过 Memory 知道任务正处于哪个阶段(如“参数收集中”、“已提交、等待反馈”)
技术实现:
方式 技术 / 工具 说明 显式状态追踪 FSM
(有限状态机)或Memory + Plan
存储记录当前任务节点、已填参数 Plan + Execution Context LangGraph
,Autogen
,ReAct-style Agent
Agent 随任务更新状态上下文 状态存储 Redis
,PG
,TinyDB
持久化任务上下文状态
# 04.RAG 检索增强生成模块
- 功能:让 Agent 能从行业知识中找答案或支持判断
- 让 LLM 能在不训练模型的前提下,
利用外部知识完成准确回答或任务执行
- 结合 LLM 强大的生成能力,输出有知识支撑的结果
# 0、技术栈一览
模块 | 工具 / 技术 | 功能 |
---|---|---|
文档解析 | pdfplumber , unstructured , pymupdf , pandas | 支持结构化文档解析 |
Chunk + Metadata | LangChain TextSplitter , 自定义清洗脚本 | 切分、加标签 |
向量生成 | OpenAI , BGE , M3E , Cohere | 生成语义向量 |
向量库 | Qdrant , FAISS , Weaviate , Milvus | 支持快速 TopK 检索 |
检索框架 | LangChain , LlamaIndex , Haystack | 快速实现 RAG Pipeline |
排序优化 | bge-reranker , Cohere-Rerank , ColBERT | 提升召回相关性 |
RAG增强 | LangGraph , ReAct , Agent + Tool-RAG | 支持复杂推理链条 |
# 1、文档预处理
# 1)多源文档解析与切分
⬅ 输入:PDF、Word、Excel、网页、数据库、API结果等
➡ 输出:按语义片段化(Chunk)后的文本 + 元数据(metadata)
技术实现:
步骤 技术 / 工具 说明 文件解析 pdfplumber
,unstructured
,pymupdf
,pandas
支持提取段落、表格、图片等 文本清洗 正则清洗 + HTML去噪 + NLP清洗 去除冗余文本、页眉页脚 Chunking LangChain TextSplitter
,RecursiveCharacterTextSplitter
支持按 token / 段落智能切分 元数据标注 文档来源、页码、段号、标签等 用于后续精准召回
示例(Chunk):
{ "text": "4月份销售额较3月提升20%,主要来自华东地区渠道增长。", "source": "报表2024Q2.pdf", "page": 12, "tags": ["销售", "华东", "增长"] }
1
2
3
4
5
6
# 2)向量化(Embedding)
文本语义向量转换(Embedding)
⬅ 输入:Chunk 文本(分块文本)
➡ 输出:语义向量(embedding)用于检索
技术实现:
技术 模型 / 工具 优势 OpenAI text-embedding-3-small/large
精度高,兼容 Function Calling BGE bge-large-zh
,bge-reranker
中文效果强,免费开源 Cohere embed-v3
多语言支持 自部署 FlagEmbedding
,M3E
,Jina
,MiniLM
私有部署可控、合规
推荐实践:
中文行业建议使用
bge-m3
或bge-reranker
(+精排)对于多模态内容(图文),可考虑 CLIP 或 MMEmbedding(非RAG核心)
# 3)高效存储与检索(Vector Store)
向量存储与检索优化
支持高并发、高维向量下的快速 Top-K 检索
支持 metadata 过滤(如只查某类文档)
技术实现:
技术 特点 FAISS
轻量内嵌部署,适合小型项目 Qdrant
支持 payload 过滤 + 高性能嵌入 API Weaviate
向量 + 结构化混合检索(Hybrid Search) Milvus
支持亿级别向量,适合大型企业部署 Pinecone
SaaS 化高可用方案,易接入
示例检索 Query:
results = qdrant.query( vector=embed("4月销售趋势"), filter={"source": "报表2024Q2.pdf"}, top_k=5 )
1
2
3
4
5
# 4)检索增强生成(RAG)
将召回内容注入 LLM Prompt,实现“带知识”的响应
支持:Base RAG(拼接 context)、Retrieval QA、ReAct-RAG、Tool-RAG、Multi-hop RAG
技术实现:
模式 特点 技术工具 Base RAG Top-K 文本拼接至 Prompt LangChain RetrievalQA
Multi-doc QA 多来源汇总 + 生成 LangChain MultiRetrievalQA
ReAct-RAG 检索 + 推理 + 分步调用 LangGraph
,AutoGen
Tool-RAG 文档 + 工具结合 LangChain + ToolRouter
示例 Prompt(Inject retrieved docs)
你是行业知识专家,请根据以下资料回答: [文档1内容]:... [文档2内容]:... 问题:我4月份的渠道销售主要增长来自哪?
1
2
3
4
# 05.Tool 调用与 Function 执行
- 功能:
- 让 Agent 不只是“说”,还能“做”
- 如查账、生成报告、调用API、触发自动化流程等
- ✅ 必须开发! 否则 Agent 只能“说得对”但“做不到”
# 0、技术栈一览
让 LLM 智能体具备“调用工具”的能力,从说得对 → 做得到
比如用户说:「帮我查一下5月销售数据,并生成 Excel 报表」
LLM 要能:
理解意图:需要调用两个功能:查数据、生成报表
找准工具:有哪些功能可调用?参数格式如何?
构造调用:组装参数发给后端
- 拿到结果后组织语言回复:不仅要对,还要通顺、有逻辑
结构化分层架构
层级 名称 说明 L1 工具注册层(Tool Registry) 定义工具的名称、描述、参数结构 L2 工具选择与参数构建(Tool Planner) LLM 判断是否要调用哪个工具,并构造调用参数 L3 工具执行器(Tool Executor) 执行函数 / API / DB 操作,返回结果 L4 响应生成器(Output Synthesizer) 将调用结果翻译成人类可读内容(可含结构+语义)
涉及技术组件
组件 说明 工具推荐 Function Schema 定义工具接口 OpenAI Function Calling / JSON Schema Tool 路由器 智能选择工具 LangChain Agent / LangGraph ToolNode 后端执行器 实际执行逻辑 Flask/FastAPI/数据库/sqlalchemy/pandas 任务链调度器 多步骤任务编排 ReAct / Plan-and-Execute / LangGraph 日志与异常处理 审计、失败重试 Sentry / logstash / LangSmith
# 1、查销售数据并生成报表
- 用户输入:
“请帮我查一下 2024 年 5 月的销售额,并生成一份 Excel 报表”
# 1)LLM 判断意图 & 工具调用
模型自动推理出需要调用两个工具:
- 查询销售数据 →
get_sales_summary(start_date, end_date)
- 生成报表 →
generate_sales_report(data)
# 2)工具定义(Function Schema)
[
{
"name": "get_sales_summary",
"description": "根据起止时间返回销售汇总数据",
"parameters": {
"type": "object",
"properties": {
"start_date": {"type": "string", "format": "date"},
"end_date": {"type": "string", "format": "date"}
},
"required": ["start_date", "end_date"]
}
},
{
"name": "generate_sales_report",
"description": "根据销售数据生成 Excel 报表并返回下载链接",
"parameters": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"region": {"type": "string"},
"sales_amount": {"type": "number"}
},
"required": ["region", "sales_amount"]
}
}
},
"required": ["data"]
}
}
]
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 3)模型构造 Tool 调用参数
{
"tool_calls": [
{
"name": "get_sales_summary",
"arguments": {
"start_date": "2024-05-01",
"end_date": "2024-05-31"
}
}
]
}
2
3
4
5
6
7
8
9
10
11
# 4)后端工具执行
A. 查询销售汇总
def get_sales_summary(start_date, end_date):
result = db.query(
f"""
SELECT region, SUM(amount) as sales_amount
FROM sales
WHERE date BETWEEN '{start_date}' AND '{end_date}'
GROUP BY region
"""
)
return result # 如:[{"region": "华东", "sales_amount": 123.4}, {"region": "华南", "sales_amount": 98.7}]
2
3
4
5
6
7
8
9
10
B. 生成报表
def generate_sales_report(data):
df = pd.DataFrame(data)
path = f"/tmp/sales_{uuid4().hex}.xlsx"
df.to_excel(path, index=False)
return {"download_url": f"https://yourdomain.com/reports/{path}"}
2
3
4
5
# 5)模型继续调用第二个工具
{
"tool_calls": [
{
"name": "generate_sales_report",
"arguments": {
"data": [
{"region": "华东", "sales_amount": 123.4},
{"region": "华南", "sales_amount": 98.7}
]
}
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
# 6)最终模型输出响应
2024年5月的销售数据如下:
- 华东:123.4 万元
- 华南:98.7 万元
我已为您生成 Excel 报表,您可以通过以下链接下载:
👉 [点击下载报表](https://yourdomain.com/reports/sales_xxx.xlsx)
2
3
4
5
6