跳到主要内容

5 篇博文 含有标签「react」

查看所有标签

从被动解答到主动出击

在第 4 阶段的 RAG 体系中,我们已经见识了 AI 查阅资料的能耐。但它依然是个被动的书呆子:你提一个问题,它帮你查资料,最后总结成一段话给你。

但如果你想要一个能自动帮你订机票、自动拉群发邮件、甚至自动跑代码修 Bug 的数字员工呢? 如果 AI 不长出“手”,它懂再多大道理也只是纸上谈兵。

如何让模型长出双手?如何让它在遇到复杂任务时不再盲目瞎猜,而是学会“遇到山峰就调出登山镐,遇到大河就调出皮划艇”? 这就是 Agent(智能体) 要解决的问题。

作为本系列的最核心连载,本章我们将拆解 Agent 的绝对底层发动机:ReAct 脑回路和 Tool Calling(工具调用) 协议。


1. 概念跨越:到底什么是 Agent?

如果你经常刷科技新闻,一定会觉得这个词被滥用了。似乎只要是个聊天框,厂商都叫它 Agent。

但在现代 AI 工程体系里,Agent 有严格的划分边界。

  • 普通的 LLM 聊天(ChatGPT):你输入 Prompt ➝ 它根据训练数据预测下一个词 ➝ 输出文本。结束。
  • RAG 搜索(Perplexity):你输入问题 ➝ 脚本去数据库搜索文本 ➝ 交给 LLM 组装 ➝ 输出文本。结束。
  • 真正的 Agent(Devin 或 AutoGPT):你下发一个抽象目标 ➝ 模型自己拆解目标 ➝ 决定要用什么工具 ➝ 看到工具的返回结果 ➝ 纠正路线 ➝ 继续决定下一个动作,直到任务彻底跑完。

Agent 的本质,就是把大语言模型从一个“答题机器”,降级成为了一个“小脑(控制器)”。而用来驱动这个小脑的核心操作系统指令,就叫 ReAct

[图片占位:(A clean, minimalist technical diagram on a solid white background. Use simple, crisp vector line art, monochrome or with very subtle minimal color accents. Flat design, no 3D effects, no clutter. Draw three simple flowcharts comparing LLM Chat, RAG, and an Agent's full action loop.)]


2. 大脑的齿轮:ReAct 循环

在真实世界里,人们是怎么完成一件复杂事情的? 假如让你去超市买一箱可乐。你首先会思考 (Thought):好渴需要买可乐,没带钱包得用手机。接着采取行动 (Action):走到小区超市。但到了之后你观察 (Observation)到超市关门了。于是你会再次陷入思考 (Thought):马路对面有个自动售货机。最后执行新的行动 (Action):过马路刷脸买到了可乐,顺利拿到结果。

2022年,普林斯顿大学的研究人员发表了著名的 ReAct 论文 (Reasoning + Acting)。他们发现,只要在给大模型的神奇 Prompt(系统提示词)里,教会它像人类一样交替进行“思考”和“行动”,模型就能在一连串的循环中完成复杂的推理任务!

2.1 ReAct 的系统长提示词模板

如果把目前市面上所有的 Agent 剥光,底层可能只是一段类似于下面这样的 Prompt(也就是 Agent 框架为你封装好的核心循环):

你是一个智能助手,必须按照以下严谨的格式来不断循环,直到给出最终答案:

【思考】:你对于当前状况的推理过程。需要什么信息?目标还差多少?
【行动】:需要采取的动作,只能从 [搜索天气, 查计算器, 发送邮件] 中选择一个!并给出传入的参数。
【观察】:这个观察结果不是由你生成的。系统运行了你的行动后,会把真实的客观结果返回给你看。

当你觉得所有信息都收齐了,请输出:
【最终答案】:你的回答。

2.2 循环演示

有了这个紧箍咒,面对“北京明天适合穿短袖吗?”,Agent 的大脑中会自动开启一场充满闭环逻辑的自言自语,它会按步骤一步步执行:

  1. Thought(思考):用户问能不能穿短袖,我得先知道北京明天的天气。
  2. Action(行动):调用获取天气工具 get_weather(location="北京", date="明天")。此时大模型原地挂起等待。
  3. Observation(观察)(系统工程代码在外部查好后返回) 天气预报显示大风降温,最高温 10 度。
  4. Thought(思考):拿到结果了!10 度太冷,绝对不能穿短袖,收集的信息已经集齐。
  5. 最终答案:得出结论,一本正经地输出最终答案,告诉用户务必要穿冬装。

这就是 Agent 拥有“灵魂”的全部机密。 模型本身并没有去调接口,它只是在文本框里输出了一个名为“Action 1”的字符串。 是挂载在系统里的工程代码,截获了这个短语,跑去替它执行了 API,然后再把结果像喂饭一样,通过“Observation”塞回了上下文里让它继续读。

[图片占位:(A clean, minimalist technical diagram on a solid white background. Use simple, crisp vector line art, monochrome or with very subtle minimal color accents. Flat design, no 3D effects, no clutter. Draw a loop showing Thought, Action, and Observation stages connecting in a cycle.)]


3. 长出双手:Tool Calling (Function Calling 工作流)

其实,老一代的 AI(比如 OpenAI 年初刚开放 GPT-3.5 接口时),都是强行用上面那种死板的 Text Prompt 来解析结果的(依靠正则大军强行切割它输出的字符 Action: xxx)。 但文字是暧昧的。万一模型哪天抽风,没按格式或者连着说了一大堆废话,后端的代码就会因为无法抽取指令而当场崩溃。

所以,OpenAI 在 2023 年底推出了一个碾压全行业的核武器级基建更新:Function Calling(目前各家开源模型也已拉齐,统称 Tool Calling 工具调用)。

3.1 JSON Schema:人机之间的铁血契约

不要指望这帮大模型懂什么叫代码。 在它的眼里,所谓的工具,只是你递给它的一本详尽的字典说明书 (JSON Schema)

当你发起对话时,你除了发送消息,还会顺带向大模型传送一个类似这样的护身符:

{
"name": "get_weather",
"description": "获取某个城市的当日天气情况",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市名称,例如:北京、上海"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"]
}
},
"required": ["location"]
}
}

大语言模型(像 DeepSeek 或 GPT-4o)在训练阶段吃下过海量的此类契约。当它在判断这道题需要天气时,它在内部生成了隐藏的思考(Thought),然后在模型返回端,它拒绝生成普通的聊天文本(content为 null),而是直接吐出了一个机器可读的、百分百符合格式的指令参数块:

"tool_calls": [
{
"id": "call_123",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"location\": \"北京\", \"unit\": \"celsius\"}"
}
}
]

3.2 兵临城下:真实代码的执行

此时你的后台代码拿到了这个精准无比的 JSON:

  1. 解析意图:一切由虚转实,后台识别出模型想按天气按钮并抠出了“北京”这个关键参数。
  2. 执行代码:紧接着你的 Python 或 Node.js 脚本全面接管控制权,拿着企业秘钥向真实的第三方天气 API 发起跨网请求。
  3. 拿到结果:经过短暂的等待,生涩的接口数据 { "temp": 15, "desc": "多云" } 被成功拉取到了服务端内存中。

3.3 圆环闭合

  1. 投喂并回复:你再把这段冰冷的客观数据,贴上 role: tool 和刚才的 tool_call_id 面包屑作为观测结果,第三次塞回大模型的聊天记忆池里。 这下它终于满意了,拿着温度,生成了完美的自然人类语言回复。

[图片占位:(A clean, minimalist technical diagram on a solid white background. Use simple, crisp vector line art, monochrome or with very subtle minimal color accents. Flat design, no 3D effects, no clutter. Draw a sequence diagram showing a user, a robot icon, and a computer gear icon exchanging simple data packets.)]


4. 总结

第一支柱总结
  • ReAct 的核心意义是一场架构上的降维打击。它不再奢求模型一次性就蒙对最终答案,而是强迫模型像人类一样走一步看一步,每次行动后必须停下来等待环境的真实反馈,真正赋予了模型解决多步长尾问题的根基。
  • Tool Calling 则是人机之间的格式契约。它彻底消解了自然语言的暧昧性,将其强行转化为百分之百精确的 JSON 传参。有了它之后,团队分工变得明确:AI 舒舒服服地待在云端长脑子当指挥官负责下发标准化的动作意图,而真正在泥地里干脏活累活跟外网交互的执行者,永远是你服务器上的那些函数代码。

一句话真理:任何再花哨的 AI 产品,只要它能查网页、发邮件、跑代码,把盖子掀开,底层全都是这套 Tool Calling + ReAct 在循环狂飙。

既然连入了工具集,具备了单独把一个任务干好的行动力。 那如果遇到超级庞大的跨日任务(比如:请你扮演客服,追踪帮我退一下这个月的机票然后重新预订),它应该怎么去记住之前的决策?它怎么在无数的小失误中自己把它掰正?

下一章预告: 当一只没有记忆力的鱼拥有了双臂,它依然无法造出大坝。 下一章,我们将为它引入 Agent 的认知与工作记忆! 探讨它的短期、长期海绵记忆,以及能让 AI 自我打脸救场的终极技能——反思(Reflection)与自校正(Self-Correction)。


下一章: 5.2 认知架构:记忆管理与自主规划

ai学习agentreacttool-calling阅读需 9 分钟

慢即是快

在上一章(3.1 基础心法)中,我们学会了用强制角色设定让模型变得更听话,用少量样例(Few-shot)让它照猫画虎。 但这依然停留在相对表层的“格式复印”阶段。

当面临复杂的逻辑谜题、代码查错、或是深度数理推演时,如果你让 AI 直接给你一个终极答案,它大概率会因为步子迈得太大而彻底坠马翻车。这是因为大模型从底层的下一词推断(Next Token Prediction)本质来看,它其实是在“闭着眼睛猜词语”。

如何让这样一个狂奔的巨型文本生成机器慢下来?如何逼迫它调动那些深远的高等神经突触? 唯一的诀窍,就是拉长它的思考距离。


1. 最质朴的降维打击:CoT (思维链)

在人工智能提示工程的发展史上,很少有哪个技巧能像 CoT(Chain of Thought - 思维链) 那样,仅仅凭着几个单词的改动,就凭空让模型的逻辑智商指数级飙升了几十个百分点。

1.1 直接吐答案的死穴

普通问法: 一辆火车以 120km/h 的速度走 15 分钟,另一辆火车以 90km/h 的速度走半小时。哪辆车走的更远?远多少?

如果你直接抛给一个中等体量的模型,它极大可能会在内部短暂的高压运算后,直接给出一个似是而非的错误结论(比如由于惯性猜错了某个数字)。为什么?因为它没有可以依赖的“缓存纸和笔”。它在生成最后那个答案时,必须一次命中所有的隐含逻辑线。

1.2 "请一步步思考"的神奇魔力

而如果你仅仅在问题的末尾,加上提示工程里最神圣的几个字:Think step by step

CoT 问法: 一辆火车以 120km/h 的速度走 15 分钟,另一辆火车以 90km/h 的速度走半小时。哪辆车走的更远?远多少?请一步步进行计算和推理,最后再给出结果。

模型瞬间就变了一种慎重的态度。它会先输出:

  1. 计算第一辆车:速度是 120km/h,时间是 15 分钟(0.25小时)。距离 = 120 * 0.25 = 30 km。
  2. 计算第二辆车:速度是 90km/h,时间是 0.5小时。距离 = 90 * 0.5 = 45 km。
  3. 对比可知:45 > 30。45 - 30 = 15 km。
  4. 最终结论:第二辆车走的远,远了 15 km。

这背后发生了什么? 当模型被迫把中间过程写在屏幕上的那一刻,它自己就拥有了视觉与语境记忆。在它吐出最后结论词的时候,它的注意力机制(Attention)会敏锐地回头看到纸上白纸黑字写着的“30”和“45”。 它不再需要用大脑直接去空手套白狼了,它是在依靠前文刚刚吐出的绝对事实在进行终极收敛!

正是这种“将思考过程实体化外显”的核心真理,直接孕育了后来震惊世界的 DeepSeek-R1 和 OpenAI 的 o1。它们更是把这套“慢反射、长推演”的逻辑彻底刻进了骨子里(隐式思维链)。


2. 把大山切成石块:分解与提点

当任务规模从普通的选择题变成“为一款电商 APP 规划完整的春季营销方案并写出全套广告文案”时,单纯的 CoT 依然会有翻车的风险。因为这个任务太重了。

这时候可以继续叠加进阶技巧。

2.1 Prompt Chaining(提示词链路)

永远不要指望一个大模型用一次深呼吸就能写完一部 10 万字的小说,它不是写断了气就是后期剧情彻底逻辑崩盘。这就是提示词链路 (Prompt Chaining) 出现的必然性。

你必须残忍地把它拆分成一条接力流水线:

  • 第一环:先让模型 A 生成大纲,并输出到文本文件。
  • 第二环:让人类或者另一个苛刻的模型 B 根据大纲去审视其中的逻辑断点,并修改重构。
  • 第三环:再丢给最擅长修辞的模型 C,每次只给它喂一章的大纲要点,让它去扩写成几千字的饱满段落。

这种流水线串联,不仅让每个节点的注意力极致聚焦,也极大避免了最后成品的格式混乱,其质量远超让一个模型一镜到底飙完。这一理念其实就是后面 5.3 节的多 Agent 协作与 LangGraph 兵团运作的绝对前置理念。

2.2 Self-Consistency(自我一致性:投票取优)

有些隐晦的密码学题目、或者是毫无线索提示的代码调试。你让它想一百遍,可能前九十九遍都在发疯。这时,我们可以靠堆算力来暴力拆解。

技巧:通过代码调用大模型接口时,把代表随机发散性的 Temperature(温度参数) 调高至 0.8 以上。并用最冷酷的代码循环发送同一个问题整整 10 遍。 模型会在这 10 次回复中给你推演出十几个天马行空的答案。最后,你不再需要自己人工干预,只需拉个脚本统计出这 10 个独立计算结果中出现次数最多的那个高频共识解。 大量学术顶会论文已经铁证如山:在做艰难的奥赛数学题时,这种“民主投票式”的解法准确率会瞬间拉升三十个点。


3. P2 进阶技术:ToT 与 ReAct 的呼应

在当下那些顶级极客的提示工程试验场里,对模型的压榨早就不仅仅满足于普通的链式推理。

3.1 Tree of Thoughts (ToT - 思维树)

如果这是一盘围棋死局,直线思维是必死无疑的。我们要它不仅前看三步,还得像树枝分叉一样多看几个平行变种世界。

你可以设计一段复杂的体系级系统 Prompt:

"对于接下来的物理推理,请你同时扮演三个不同的解题专家。你们各自提出三种截然不同的解法假设。 第一轮过后,请作为公正的评委对这三条世界线的解法进行打分评价,并将看起来存在逻辑死胡同的那两条线彻底掐掉废弃。 然后,针对最高分的那一条最优路径继续往下推理验证三步。直到最终触达真相。"

这就叫 Tree of Thoughts (ToT)。它不仅允许模型向前冲锋,更赋予了模型在走不过去时主动丢弃残局、倒车回溯(Backtracking)到树干分叉点的能力,常被用于极客视角的复杂代码破解与系统级迷局破解。

3.2 ReAct (Reason + Act: 走向物理世界的前奏)

当我们允许模型在思考的时候,利用**行动(Action)**去向外界借力,旧时代的魔法最终就会发生剧烈的质变跨越。

思绪:“我需要计算苹果这十年的复利市值,但我是个断了网的大语言模型。” 行动动作[调用外部搜索引擎 API,搜索:苹果今年市值] 观测结果:3.3万亿美元。

这就是我们在第 5 阶段重笔墨渲染的 ReAct 引擎的原点。它将单纯的纸上谈兵破壁而出,真正让大模型借由接口长出了观察物理世界的电子眼睛和可以拔插的机械双手(Tool Calling)。


4. 总结

第二支柱进阶总结
  • 永远要提防让大模型陷入“猜词博弈”。通过 CoT (思维链) 强制要求“一步步思考”,是逼迫模型将内隐推理外显、通过屏幕输出做临时显存的核心技巧。
  • 将一个大山般沉重的指令强行拆碎。不论是通过 Prompt Chaining 分出流水线步骤,还是通过 Self-Consistency 反复暴力投票,都是分流算力以获得压倒性质量的最佳工程途径。
  • 当推演深邃,赋予模型如同围棋手一样的 ToT (思维树) 平行时空抉择权;并引入 ReAct (思考与行动交替),便是大语言模型彻底蜕凡升格为真实世界智能 Agent 前的最强铺垫。

但当你学会了压榨它的极致智力并拿到了华丽推演后,作为软件工程师,下一个棘手的问题立刻接踵而至。 你那些写着高深 Prompt 的后台代码,根本无法解析大模型那一长串洋洋洒洒带有客套话的文字废料! 不仅如此,总有不怀好意的黑客试图在网页对话框里插入恶毒的指令,意图让你那精心设定的高智商系统全盘招供出那价值连城的祖传 System Prompt 宝剑。

下一章预告: 如何彻底斩平自然流水的格式迷途?如何像砌防弹玻璃一样在前端架起防火墙去抵御来路不明的 Prompt Injection(提示词注入)抹杀危机? 欢迎进入提示工程的最后堡垒:3.3 工程防御:结构化输出与安全边界

ai学习cottotreact阅读需 9 分钟

React是由Facebook开发的JavaScript库,用于构建用户界面,特别是单页应用程序。它允许开发者创建大型的Web应用,在不重新加载页面的情况下可以改变数据。本文将介绍React的核心概念、JSX语法、组件化思想以及状态与属性的基本用法。

React前端JavaScript阅读需 5 分钟