LLM Agent 架构设计与 LangChain 实战¶
大语言模型(LLM)不仅能作为对话式问答工具,更正在演进为具备**规划决策、工具调用、长期记忆与自主纠错**能力的计算引擎 —— LLM Agent (自主智能体)。
传统的 LLM 受到知识截止时间、无法直接感知外部世界、缺乏算数精确计算以及存在逻辑幻觉的限制。通过为模型装配外部工具集(API / 数据库 / 代码解释器),Agent 能够自主将复杂模糊的目标拆解为执行步骤,并在与真实环境的交互反馈中动态达成目标。
一、Agent 核心认知模型:ReAct 推理与行动循环¶
ReAct (Reason + Act) 是现代智能体最经典的基础推理范式:
graph TD
UserGoal["用户输入复杂指令: '查询杭州明天下雨概率并根据降水推荐室外活动'"] --> LLMReason["1. Thought: 思考分析当前缺失杭州未来天气数据"]
LLMReason --> LLMAct["2. Action: 决定调用 weather_api("city='Hangzhou', date='tomorrow'")"]
LLMAct --> EnvExec["3. Tool Execution: 外部真实 API 返回降水概率 85%"]
EnvExec --> LLMObs["4. Observation: 智能体观察到下雨概率极高"]
LLMObs --> LLMNext["5. Thought: 确认降水极高,转为推荐室内活动如西湖博物馆"]
LLMNext --> FinalAnswer["6. Final Answer: 输出详尽规划建议"] 二、智能体四大核心支柱体系¶
| 核心组件 | 技术实现与权责 | 典型应用 |
|---|---|---|
| 规划核心 (Planning) | 基于思维链 (CoT) 进行目标分解、自我反思 (Self-Reflection) 与子任务排期 | Plan-and-Solve、Tree-of-Thoughts (ToT) |
| 记忆系统 (Memory) | 短期记忆:当前会话历史 Context Window; 长期记忆:基于向量数据库 (Vector DB) 的跨会话知识检索与用户画像沉淀 | 保持对话连贯性、召回用户历史偏好 |
| 工具箱 (Tools / Actions) | 封装 REST API、SQL 查询器、计算器、Python 代码执行沙箱 | 赋予模型读写现实物理与数字系统的能力 |
| 执行编排 (Execution) | 基于状态机(State Machine)或有向无环图(DAG)控制条件分支与循环 | LangGraph、AutoGPT、CrewAI |
三、基于 LangChain / LangGraph 打造多工具协同 Agent 实战¶
// agent/research-agent.ts
import { ChatOpenAI } from '@langchain/openai';
import { DynamicStructuredTool } from '@langchain/core/tools';
import { z } from 'zod';
import { AgentExecutor, createOpenAIToolsAgent } from 'langchain/agents';
import { ChatPromptTemplate, MessagesPlaceholder } from '@langchain/core/prompts';
// 1. 初始化模型
const model = new ChatOpenAI({
modelName: 'gpt-4o',
temperature: 0.1, // 降低随机性,确保工具参数生成的严谨度
});
// 2. 声明具备严格 Zod Schema 校验的自定义业务工具
const stockPriceTool = new DynamicStructuredTool({
name: 'get_stock_price',
description: '用于实时查询指定股票代码的当前股价与涨跌幅',
schema: z.object({
ticker: z.string().describe('股票代码,如 AAPL, MSFT, BABA'),
}),
func: async ({ ticker }) => {
// 模拟调用金融行情真实 API
console.log(`[Tool Call] 正在查询股票代码: ${ticker}`);
return JSON.stringify({
ticker,
price: 189.5,
changePercent: '+2.3%',
currency: 'USD',
});
},
});
const tools = [stockPriceTool];
// 3. 构建 Agent 核心 Prompt 模板
const prompt = ChatPromptTemplate.fromMessages([
['system', '你是一个具备严谨逻辑的金融分析 Agent。你可以自主调用外部工具获取实时数据,并给出结构化的投资分析。'],
new MessagesPlaceholder('chat_history'),
['human', '{input}'],
new MessagesPlaceholder('agent_scratchpad'),
]);
// 4. 组装并启动 Agent 执行器
export async function runAgentQuery(userInput: string) {
const agent = await createOpenAIToolsAgent({
llm: model,
tools,
prompt,
});
const executor = new AgentExecutor({
agent,
tools,
verbose: true, // 输出完整的 Thought / Action 决策链
maxIterations: 5, // 防止陷入死循环的最大迭代次数
});
const result = await executor.invoke({
input: userInput,
chat_history: [],
});
return result.output;
}
四、生产级 Agent 落地防线与治理¶
- 结构化输出约束 (JSON Mode / Tool Schema):严禁依赖正则解析自由文本。必须全面采用模型原生的 Function Calling / Structured Outputs 确保参数解析 100% 稳定。
- 工具执行沙箱化与权限熔断:涉及写入、删除或金钱交易的敏感操作,必须引入 Human-in-the-Loop (人工介入审批) 机制,模型仅生成执行意图,必须待管理员确认后方可真正执行。
- 死循环熔断器 (Max Step Limit):为 Agent 设定硬性步数上限(如 10 步),一旦超出立即抛出优雅降级提示,避免消耗过多 Token 费用。