手搓生产级 AI Agent 系统(3):Agent 与工具系统完整集成——从 ReAct 到自主决策
📅 2026/7/16 9:43:57
👁️ 次浏览
前言:零件齐了,该组装了第一篇我们实现了 ReAct 核心循环,第二篇构建了工具系统(注册、校验、安全、追踪)。两个模块各自能跑,但接在一起才是真正的 Agent。这篇文章做一件事:把 ReAct 循环和工具系统完整集成,让 Agent 从"能想能做"变成"能在思考、调用工具、观察结果之间自主循环,直到完成任务"。一、集成的核心挑战把循环和工具接在一起,看起来简单——循环里调用工具,工具结果喂回循环。但细节上会出四个问题:问题表现解决思路停止条件不明确Agent 无限循环,Token 烧光四层停止条件(见第三节)工具结果过大搜索结果 5000 字全塞进对话历史,上下文爆炸结果截断 + 关键信息提取工具选择错误Agent 调了不存在的工具,反复重试动态工具列表注入 + 错误反馈任务漂移执行到第 5 步,Agent 忘了原始问题每步注入原始任务 + 进度追踪二、集成架构┌─────────────────────────────────────────────────┐ │ Agent.run(query) │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ Thought │───▶│ Action │───▶│Observation│ │ │ │ LLM 推理 │ │ 执行工具 │ │ 结果注入 │ │ │ └──────────┘ └──────────┘ └──────────┘ │ │ ▲ │ │ │ └──── 检查停止条件 ←──────────────┘ │ │ └──── 未满足 → 继续循环 │ │ └──── 满足 → 返回最终答案 │ │ │ │ 上下文管理(每步动态组装): │ │ SystemPrompt + 工具列表 + 原始任务 + 历史记录 │ └─────────────────────────────────────────────────┘三、停止条件:四个维度保底Agent 最怕无限循环。我们用四层停止条件:fromenumimportEnumclassStopReason(Enum):FINAL_ANSWER="final_answer"# LLM 主动输出 Final AnswerMAX_STEPS="max_steps"# 达到最大步数MAX_TOKENS="max_tokens"# Token 超限MAX_COST="max_cost"# 费用超限NO_PROGRESS="no_progress"# 连续 3 步无进展DANGEROUS_LOOP="dangerous_loop"# 检测到死循环(重复同一工具+参数)classAgentStopper:"""四层停止条件检查器"""def__init__(self,max_steps:int=15,max_tokens:int=50000,max_cost:float=0.50,no_progress_threshold:int=3):self.max_steps=max_steps self.max_tokens=max_tokens self.max_cost=max_cost self.no_progress_threshold=no_progress_threshold self.total_tokens=0self.total_cost=0.0self.steps=0self.last_actions=[]# 最近 N 个 action 记录self.last_useful_result=0# 最后拿到有用结果的步数defcheck(self,step:int,tokens_this_step:int,cost_this_step:float,action:str=None,params:dict=None,result:str=None,has_final:bool=False)-tuple[bool,StopReason]:self.steps=step self.total_tokens+=tokens_this_step self.total_cost+=cost_this_step# Layer 1: LLM 主动结束ifhas_final:returnTrue,StopReason.FINAL_ANSWER# Layer 2: 硬上限ifstep=self.max_steps:returnTrue,StopReason.MAX_STEPSifself.total_tokens=self.max_tokens:returnTrue,StopReason.MAX_TOKENSifself.total_cost=self.max_cost:returnTrue,StopReason.MAX_COST# Layer 3: 连续无效步数检测ifactionandresult:action_key=f"{action}:{json.dumps(params,sort_keys=True)}"self.last_actions.append(action_key)# 检查最近 no_progress_threshold 个 action 是否都相同iflen(self.last_actions)self.no_progress_threshold:self.last_actions.pop(0)if(len(self.last_actions)=self.no_progress_thresholdandlen(set(self.last_actions[-self.no_progress_threshold:]))==1):returnTrue,StopReason.DANGEROUS_LOOP# 检查是否有实质性进展ifresultand"错误"notinresultand"查不到"notinresult:self.last_useful_result=step# Layer 4: 长期无进展ifstep-self.last_useful_resultse
去年 11 月,我们在对接苏南某工业园区的虚拟电厂(VPP)试点项目时,被调度中心的一个「常规要求」难住了:所有接入资源必须实现 1 分钟一发的实时遥测,且遥调指令下发延迟要在 5 秒内。对于习惯了 5 分钟甚至…
📅 2026/7/16 9:43:57
3.编辑普通文件3.1 数据流,重定向标准输入(standard input,简称 stdin):默认情况下,标准输入指从键盘获取的输入标准输出(standard output,简称 stdout):默认…
📅 2026/7/16 9:43:57
说实话,刚看到al4geo8这个词的时候,我整个人是懵的。网上铺天盖地的广告,什么“一夜暴富”、“技术突破”,看得我眼晕。作为一个在互联网行业摸爬滚打十年的老鸟,我太清楚这种套路了。以前我也信过邪,结果被割得连底裤都不剩。这次看到al4geo8,心里虽然打鼓,但好奇心还…
📅 2026/7/16 9:43:36
如何快速掌握GodMode9:3DS终极文件管理完全攻略 【免费下载链接】GodMode9 GodMode9 Explorer - A full access file browser for the Nintendo 3DS console :godmode: 项目地址: https://gitcode.com/gh_mirrors/go/GodMode9
GodMode9是任天堂3DS游戏机的全…
📅 2026/7/16 10:47:04
1. 前端跨域问题的本质与Vite的解决方案跨域问题是前端开发中最常见的痛点之一。当我们在本地开发时,前端服务运行在localhost:5173,而后端API可能部署在另一个域名或端口上,浏览器出于安全考虑会阻止这种跨域请求。这就是为什么我们经常在控…
📅 2026/7/16 10:47:04
1. BLDC电机的市场崛起与技术背景十年前走进一家家电卖场,工程师们讨论的还是"这款空调用的是什么类型的电机",而今天这个问题已经很少被提起——因为答案几乎总是"无刷直流电机"。作为曾经在电机控制领域踩过无数坑的老工程师&…
📅 2026/7/16 10:47:04
1. 无线传感器网络基础架构解析 当你拆开一个智能家居温湿度传感器,会发现里面藏着微型计算机的完整生态——MEMS传感器像感官神经收集数据,射频芯片负责"交头接耳",纽扣电池则是持续跳动的心脏。这就是现代无线传感器网络(WSN)的微…
📅 2026/7/16 10:47:04
SOCD Cleaner:让游戏操作零冲突,你的专属输入优化神器 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd
在竞技游戏的激烈对抗中,你是否曾因同时按下方向键而导致角色动作混乱&…
📅 2026/7/16 10:47:04
你是不是也遇到过这种情况?
刚注册的新号,因为定位在异地,瞬间被系统判定为异常。
辛辛苦苦养的号,因为一个小小的位置信息,直接废掉。别急,今天这篇文章,就是来救火的。
我不讲那些虚头巴脑的理论。
直接告诉你,怎么用andriod模拟器 geo技术,把位置改得明明白白,既安…
📅 2026/7/16 10:46:31
1. 项目概述:为什么用遗传算法解5皇后问题,而不是直接回溯?我带过十几届算法课,也给不少初创团队做过AI架构咨询。每次讲到组合优化问题,学生和工程师的第一反应永远是“写个回溯试试”。这没错——55棋盘上找所有合法…
📅 2026/7/16 0:00:02
前几天调试一个简单的电源模块,用到了5.1V稳压管。电路接好,上电测试,万用表一量——输出居然只有4.7V。第一反应是稳压管坏了,换了一个新的,结果还是4.7V。这让我想起很多初学者都会遇到的困惑:明明标称5.…
📅 2026/7/16 0:00:02
1. 项目概述与核心价值 在高速数字系统、通信设备乃至精密测量仪器中,一个稳定、纯净且可精确调控的时钟信号,往往是整个系统稳定运行的“心跳”。无论是确保数据在光纤中无误传输,还是让ADC/DAC芯片精准采样,亦或是让多块FPGA板卡…
📅 2026/7/16 0:00:02
豆包openclaw最近圈子里都在聊豆包openclaw,我也没忍住,掏腰包入手了一套。说实话,刚拿到手的时候,心里是打鼓的。毕竟市面上类似的智能硬件太多了,有的吹得天花乱坠,用起来却是一堆bug。为了不让大家的钱打水漂,我连续用了半个月。从开箱到日常高频使用,甚至故意测试它…
📅 2026/7/15 22:51:06
SQLyog 13.3.1 社区版在Windows 10/11上的完整安装与连接指南 对于刚接触MySQL数据库管理的开发者和学生来说,选择一个直观易用的图形化管理工具至关重要。SQLyog作为一款轻量级但功能强大的MySQL GUI工具,能够显著提升数据库操作的效率和体验。本文将详…
📅 2026/7/15 19:03:10
SPEC CPU 2006 跨平台基准测试深度实战:ARM/X86/MIPS 架构配置优化与结果分析方法论在当今多元化的计算架构时代,如何客观评估不同处理器平台的真实性能成为系统工程师和性能优化专家的核心挑战。SPEC CPU 2006 作为业界公认的计算密集型基准测试套件&am…
📅 2026/7/15 14:09:20
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/15 22:46:06
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/16 4:59:31
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/15 22:51:03