AI Agent 架构设计:从单轮问答到自主任务执行
前言
2024-2025 年,AI 应用正从"对话式 AI"向"Agent 式 AI"演进。用户不再满足于问一句答一句,而是期望 AI 能自主规划、调用工具、完成复杂任务。
本文将系统梳理 AI Agent 的架构设计,涵盖核心组件、工具调用、记忆机制和多 Agent 协作,结合 MAX AI 在企业场景中的实际落地经验。
1. Agent vs Chatbot:本质区别
| 维度 | Chatbot | AI Agent |
|---|---|---|
| 交互模式 | 用户主导,一问一答 | Agent 主导,自主规划 |
| 能力边界 | 只能生成文本 | 可调用工具、访问系统 |
| 任务复杂度 | 单步任务 | 多步骤、有依赖的复杂任务 |
| 记忆 | 会话级(上下文窗口) | 长期记忆 + 工作记忆 |
| 错误处理 | 用户重新提问 | 自动重试、路径调整 |
2. 核心架构:ReAct Loop
目前最成熟的 Agent 架构是 ReAct(Reasoning + Acting)循环:
┌─────────────────────────────┐
│ │
用户指令 → [推理 Reason] → [行动 Act] → [观察 Observe] ─┘
│
└→ 任务完成 → 返回结果
2.1 TypeScript 实现
interface AgentState {
goal: string
history: { thought: string; action: string; observation: string }[]
tools: Tool[]
maxSteps: number
}
async function runAgent(state: AgentState): Promise<string> {
for (let step = 0; step < state.maxSteps; step++) {
// Step 1: 推理 — LLM 决定下一步做什么
const decision = await reason(state)
if (decision.type === 'final_answer') {
return decision.answer
}
// Step 2: 行动 — 调用工具
const tool = state.tools.find(t => t.name === decision.toolName)
if (!tool) throw new Error(`Tool not found: ${decision.toolName}`)
const observation = await tool.execute(decision.toolArgs)
// Step 3: 记录观察结果
state.history.push({
thought: decision.thought,
action: `${decision.toolName}(${JSON.stringify(decision.toolArgs)})`,
observation: observation.slice(0, 2000), // 截断避免上下文爆炸
})
}
return '达到最大步数限制,任务未完成'
}
2.2 推理层:结构化输出
让 LLM 输出结构化的决策,而不是自由文本:
const reasonPrompt = `你是一个任务执行 Agent。根据当前状态,决定下一步行动。
可用工具:
${tools.map(t => `- ${t.name}: ${t.description}`).join('\n')}
请以 JSON 格式输出你的决策:
{
"thought": "你的思考过程",
"type": "tool_call" | "final_answer",
"toolName": "工具名称(type=tool_call时)",
"toolArgs": { ... },
"answer": "最终答案(type=final_answer时)"
}`
3. 工具系统设计
3.1 工具定义规范
interface Tool {
name: string
description: string // 给 LLM 看的,要写清楚
parameters: JSONSchema // 参数 schema
execute: (args: any) => Promise<string>
}
// 示例:数据库查询工具
const sqlQueryTool: Tool = {
name: 'query_database',
description: '查询企业数据库。可以获取客户信息、订单数据、库存状态等。输入 SQL 查询语句。',
parameters: {
type: 'object',
properties: {
sql: { type: 'string', description: 'SELECT 查询语句(只读,不允许 INSERT/UPDATE/DELETE)' }
},
required: ['sql']
},
execute: async (args) => {
// 安全检查:只允许 SELECT
if (!/^SELECT/i.test(args.sql.trim())) {
return 'Error: 只允许 SELECT 查询'
}
const result = await db.query(args.sql)
return JSON.stringify(result.rows.slice(0, 20))
}
}
3.2 常见企业工具集
| 工具 | 用途 | 安全等级 |
|---|---|---|
| query_database | 查询业务数据 | 中(只读) |
| search_knowledge | 搜索知识库 | 低 |
| send_email | 发送邮件 | 高(需审批) |
| create_ticket | 创建工单 | 中 |
| call_api | 调用外部 API | 高(需白名单) |
| generate_report | 生成报表 | 低 |
3.3 工具安全:权限分级
enum ToolPermission {
AUTO = 'auto', // 直接执行
CONFIRM = 'confirm', // 需要用户确认
ADMIN = 'admin', // 需要管理员授权
}
async function executeWithPermission(
tool: Tool & { permission: ToolPermission },
args: any,
userId: string
): Promise<string> {
switch (tool.permission) {
case ToolPermission.AUTO:
return tool.execute(args)
case ToolPermission.CONFIRM:
const approved = await requestUserConfirmation(userId, tool.name, args)
if (!approved) return '用户拒绝了此操作'
return tool.execute(args)
case ToolPermission.ADMIN:
throw new Error('需要管理员授权')
}
}
4. 记忆机制
4.1 三层记忆架构
短期记忆(Working Memory) ← 当前任务的上下文
↕
中期记忆(Session Memory) ← 本次会话的摘要
↕
长期记忆(Long-term Memory) ← 用户偏好、历史决策
4.2 长期记忆实现
interface Memory {
id: string
content: string
type: 'fact' | 'preference' | 'procedure'
importance: number // 0-1
lastAccessed: Date
accessCount: number
}
// 基于重要性和时间衰减的检索
async function recallMemories(query: string, limit: number = 5): Promise<Memory[]> {
const candidates = await vectorSearch(query, limit * 3)
// 综合评分:相关性 × 重要性 × 时间衰减
return candidates
.map(m => ({
...m,
finalScore: m.similarity * m.importance * timeDecay(m.lastAccessed)
}))
.sort((a, b) => b.finalScore - a.finalScore)
.slice(0, limit)
}
5. 多 Agent 协作
复杂企业任务往往需要多个专业 Agent 协作:
用户需求 → [路由 Agent] → [客服 Agent] → 处理客户问题
→ [数据 Agent] → 查询分析数据
→ [审批 Agent] → 处理审批流程
→ [知识库 Agent] → 检索企业知识
5.1 路由策略
async function routeToAgent(query: string): Promise<string> {
const classification = await llm.classify(query, [
{ label: 'customer_service', description: '客户咨询、投诉、订单查询' },
{ label: 'data_analysis', description: '数据查询、报表、统计分析' },
{ label: 'knowledge_qa', description: '公司制度、产品知识、技术文档' },
{ label: 'workflow', description: '请假、报销、审批等流程' },
])
return classification.label
}
6. 生产环境注意事项
6.1 成本控制
- 用便宜模型做路由和简单任务(如 DeepSeek V4)
- 只有复杂推理才用高端模型
- 设置
maxSteps防止无限循环 - 缓存常见查询的结果
6.2 可观测性
每一步推理和行动都要记录:
interface AgentTrace {
traceId: string
steps: {
timestamp: Date
thought: string
action: string
observation: string
latencyMs: number
tokensUsed: number
}[]
totalCost: number
success: boolean
}
6.3 失败处理
- 工具调用失败 → 重试 1 次,失败则换备选方案
- LLM 输出格式错误 → 重新 prompt,明确格式要求
- 超时 → 返回部分结果 + 告知用户
总结
AI Agent 的核心不是某个模型有多强,而是架构设计是否合理:工具系统够不够安全、记忆机制够不够持久、多 Agent 协作够不够流畅。
作者:MAX AI 技术团队 官网: 专注:企业 AI 解决方案 | AI Agent | RAG 知识库 | 业务自动化