alookdlna投屏t
17.07MB · 2026-04-04
上周五下午,组里一个平时挺上进的同事跑到我工位旁。
“老大,我那个 Agent 又抽风了。”他挠着头,“调了两天 prompt,换了三版工具定义,还是不行——该查 wiki 的时候去发邮件,该汇总的时候乱搜网页。”
我打开他提交的代码。LangChain 的 createAgent,工具注册、记忆接入,表面看着都没问题。
“跑的时候加 trace 了吗?”我指着终端输出,“你看这一步——模型返回的 tool_calls,下一轮 ReAct 循环里是怎么喂进去的?”
他愣了一下:“……不知道,框架自动处理的吧?”
“那如果模型返回的格式不规范,或者工具返回的结果太长被截断了,你的 Agent 会怎么处理?”
他沉默了两秒,声音小了半截:“还有这种情况?我以为框架都封装好了……”
我拍了拍他肩膀:“框架封装了细节,方便上手,但也埋了坑。今天正好把这块讲透——从底层原理到如何从0手搓一个AI Agent,你搞清楚了,以后就不慌了。”
读完这篇文章,你会得到:
不管你是刚接触 Agent,还是像那位同事一样能跑但心里没底,这篇文章都能给你一条从原理到实践的完整路径。
正文开始。
Anthropic:由大语言模型动态指导自身流程和工具使用情况的系统,它能自主控制完成任务的方式。
Google:AI Agent是是一种能够感知环境、进行决策和执行动作的智能实体。其表现出了推理、规划和记忆能力,并且具有一定的自主性,能够自主学习、适应和做出决定。
Agent 架构中有三个核心组件:模型(model)、工具(tool)、编排层(orchestration)
当然,现在AI圈子有一个更新的概念是 Agent = Model + Harness,该概念最早由LangChain 2026年3月10日在官方博客中提到。
这个公式可以用一个非常贴切的比喻来理解:
Harness Engineering (驾驭工程) 是一套围绕 AI Agent 构建的约束、反馈与控制系统,让 Agent 在人类设定的边界内自主、可靠、可持续地工作——它不优化模型本身,而是优化模型运行的"环境"。
Function Call 通常指模型主动调用外部工具、API 或自定义函数来获取信息、执行操作或扩展自身能力。Function Call 是大模型从“纯文本生成器”迈向“智能行动者”的关键桥梁。它让 AI 不仅能“说”,还能“做”——通过安全、可控的方式与外部世界互动。
大模型在面对实时性问题、数学计算等问题时可能效果不佳。Function Call 通过引入外部工具,让大模型可以回答原本无法解决的问题。
这两个概念是大语言模型(LLM)提示工程(Prompt Engineering)中提升模型回答质量的核心技巧。简单来说,**Few-shot是通过“举例”告诉模型怎么做,而 CoT 是教模型“一步步思考”。
Few-Shot, 一种提示(prompting)策略,通过在输入中提供少量示例(通常为3–5个),引导 LLM 完成目标任务, 在 Agent 中的常作为基础提示技术,用于初始化或辅助其他更复杂的 Agent 框架。
COT ,一种提示技术,引导模型通过生成中间推理步骤来分解问题,促使其在最终答案前先列举思考过程,这种框架可以**增强模型解决复杂问题时的准确性**(幻觉问题)。
在 ReAct 提出之前,AI 主要流行两种模式,但都有缺陷:
ReAct 将两者结合,既能让 AI 像人一样思考(提高可解释性),又能让它 动手查资料(提高准确性和实时性)。这也成为了后来 LangChain、AutoGPT 等热门框架的底层理论基础。,最早于2022年10月由普林斯顿大学和谷歌研究(Google Research)提出。
Search['华为最新款手机']。Action后从外部工具返回的结果,例如搜索结果的摘要或API的返回值。ReAct执行示例
Answer the following questions as best you can. You have access to the following tools:
{tools}
Use the following format:
Question: the input question you must answer
Thought: you should always think about what to do
Action: the action to take, should be one of [{tool_names}]
Action Input: the input to the action
Observation: the result of the action
... (this Thought/Action/Action Input/Observation can repeat N times)
Thought: I now know the final answer
Final Answer: the final answer to the original input question
Begin!
Question: {input}
Thought:{agent_scratchpad}
核心交互模式
| 模式 | 核心思想 | 适用场景 |
|---|---|---|
| ReAct | 交替进行“推理-行动-观察”循环,每次决策都基于当前状态和环境反馈 | 通用型任务、需要工具调用的场景 |
| 思维链 (CoT) | 通过逐步推理生成中间步骤,增强复杂问题的推理能力 | 数学推理、逻辑分析、多步计算 |
| 反思 (Reflection) | Agent对自身输出进行自我批评和改进,生成更优版本 | 代码生成、内容创作、质量敏感任务 |
| 结构化响应 | 强制模型按预设格式(如JSON)输出,便于后续解析 | 工具调用、系统集成、确定性输出场景 |
规划与推理模式
| 模式 | 核心思想 | 特点 |
|---|---|---|
| Plan-and-Execute | 先规划完整计划,再逐步执行,执行后可根据结果调整 | 结构化、可追溯 |
| ReWOO | 一次性生成完整计划,中途不调整,执行后返回结果 | 减少LLM调用次数,成本更低 |
| LLM Compiler | 将任务构建为有向无环图(DAG),识别可并行执行的子任务 | 最大化并行度,降低延迟 |
| Tree of Thoughts | 将问题展开为多路径搜索树,探索多种思路 | 适合需要多角度探索的问题 |
| LATS | 结合蒙特卡洛树搜索,在复杂空间中进行规划 | 性能最优,但计算量大 |
| Self-Discover | Agent自动为任务设计推理策略,无需人工预设 | 通用性强,可迁移复用 |
工具(tools)是模型与外部世界之间的桥梁,使得Agent可以访问并处理真实信息。
MCP全称模型上下文协议(Model Context Protocol),该协议旨在为大型语言模型和 AI 助手提供一个统一、标准化的接口,使 AI 模型能够轻松获取玩外部数据源或者操作外部工具并完成更复杂的任务。
mcp server 调试工具
npx -y @modelcontextprotocol/inspector <command> <args>
需要注意的是:Tools和MCP本质上都是通过Function Calling 触发的,在Thought时需要将完整信息传递给LLM,若tools过多,会导致占用过多的上下文,消耗Token。
一个好的Agent不需要过多的工具,Bash是最好的工具,Agent会自己编写code通过Bash执行。
大语言模型本质上是一个“无状态”(Stateless)的函数,所有的“记忆”其实都是通过工程手段(外部存储和拼接)强行赋予它的。
记忆系统是负责为模型提供上下文信息的关键组件,直接影响推理(Thought)的质量与执行效果。它通常被称为上下文工程,核心目标是确保模型在每一步都能获得充分、准确且低干扰的信息。
在ReAct框架中,每一个 Thought 的质量,严重依赖于CoT,而CoT又严重依赖于记忆系统提供的信息是否充足、是否准确、是否干扰最小,也就是* 输入上下文 的信息质量。
在执行过程中,记忆系统负责为 Thought 构建上下文输入。
| 类型 | 说明 | 典型实现 |
|---|---|---|
| 短期记忆(Short-Term Memory) | 当前会话内的上下文,包括用户输入、模型回复、中间推理轨迹、工具调用结果等。 | 由编排层维护对话状态,直接拼接进 Prompt。 |
| 长期记忆(Long-Term Memory) | 跨会话的知识,如用户画像、历史记录、企业文档、领域知识库。 | 通过向量检索(RAG)、知识图谱或数据库查询,在运行时动态召回并注入上下文。 |
RAG(Retrieval Augmented Generation)即检索增强生成,一般用于 LLM 整合知识库,模糊搜索非结构化数据,找到相似的结构以后,再交给 LLM 去处理,这样会大大增加搜索结果的准确性。
这种技术通过从外部存储中检索相关信息、工具和示例来动态填充模型提示词。
工作原理:
LangChain 是开始构建完全定制的 LLM 驱动的应用程序的简单方式。只需不到 10 行代码,你就能连接到 OpenAI、Anthropic、Google 等 。LangChain 提供预构建的代理架构和模型集成,帮助您快速启动并无缝地将大型语言模型整合到您的代理和应用中。
// First install: npm install langchain @langchain/anthropic
import { z } from "zod";
import { createAgent, tool } from "langchain";
const getWeather = tool(
({ city }) => `It's always sunny in ${city}!`,
{
name: "get_weather",
description: "Get the weather for a given city",
schema: z.object({
city: z.string(),
}),
},
);
const agent = createAgent({
model: "anthropic:claude-sonnet-4-6",
tools: [getWeather],
});
console.log(
await agent.invoke({
messages: [{ role: "user", content: "What's the weather in Tokyo?" }],
})
);
搭建完Agent后,我们可以基于readline创建一个简单CLI交互程序:
MateChat 是一套专为智能化场景打造的前端交互解决方案,提供开箱即用的对话组件与高度可定制的交互框架。无论是智能客服、AI 助手,还是多模态交互应用,MateChat 都能帮助开发者在极短时间内构建出体验流畅、风格统一、扩展性强的对话界面。
我们可以通过 MateChat Cli 快速创建智能对话应用。
基于协议的协作架构, Agent2Agent (A2A) Protocol,是一种标准化的通信协议,旨在让不同来源、不同能力、甚至由不同开发者构建的智能体之间能够自主、安全、高效地交互与协作。该协议最初由谷歌(Google)于 2025 年 4 月发布。
核心特点:
核心设计思路:
Agent Card 示例结构
{
"name": "财务数据采集智能体",
"version": "1.0.0",
"description": "负责从企业 ERP 系统中采集和结构化财务数据",
"url": "https://api.example.com/a2a/finance-collector",
"capabilities": [
"streaming:json",
"notification:webhook"
],
"skills": [
"采集企业 ERP 财务数据",
"结构化处理收支明细"
],
"inputSchema": {
"type": "object",
"properties": {
"timeRange": {"type": "string"},
"dataType": {"type": "string", "enum": ["收入", "支出"]}
},
"required": ["timeRange", "dataType"]
},
"auth": {
"type": "oauth2",
"tokenUrl": "https://auth.example.com/token"
}
}
分层编排架构,将其他智能体**封装为工具(Tool)**,由主智能体(Orchestrator)按需调用,类似于函数调用。这是当前主流框架(如 LangChain、LlamaIndex)中常见的模式。
核心特点:
eg. 将个人搭建的Agent作为一个mcp tools在IDE Agent中调用的示例:
当然,对于个人开发者而言,从零手搓一个 Agent 并非明智之举,更推荐直接使用 OpenCode,进行Agent在工程应用上的实践。OpenCode 是一款开源的 AI Coding Agent,内置免费模型,支持连接任意服务商提供的任意模型,配置灵活自由。目前该项目在 GitHub 上已累计获得超过 13.5 万颗星标。
npm install -g opencode-ai
安装完成后,终端输入 opencode 即可启动
用 JS 接 OpenCode,把 AI 工作流跑成自动化任务。你下班,它干活,24 小时不停。
Agent Skill 是 于 2025 年确立的开放式 AI 代理构建标准,其本质是将复杂的 Prompt 工程、外部知识库(Reference)与执行逻辑(Script)封装为标准化的本地文件结构(如 SKILL.md)。
简单来说就是:给模型的一份可复用「操作说明书 + 流程模板」, 解决专业场景问题。
确保任何给定时间只有相关内容占据上下文窗口
| 级别 | 加载时间 | 内容 |
|---|---|---|
| 1级:元数据 | 始终(启动时) | 用于判断哪个技能与当前任务相关 |
| 2级:指令 | 触发 Skill 时 | 当 Agent 确定需要某个技能时,才会读取该技能的详细指令 |
| 3级+:资源 | 按需 | 只有在执行过程中确实需要时,才会加载脚本或参考文档等资源。 |
最后聊 Agent Skills。把它放在最后,不是因为不重要——恰恰相反,它把前面所有概念串起来了,而且是我们团队在企业生产环境中真正拿来提效落地的最佳实践!
接下来我们会持续发布更多关于 Agent 的企业级落地实践, 欢迎关注!