深度解析 LLM Agent ReAct 架构:基于 Function Calling 的代码重构实践
1. 背景为什么我们需要 Agent痛点传统编程中简单的重复性工作如加注释、改格式浪费了开发者大量时间。思路既然 LLM大模型懂代码能不能让它自己读取文件、修改文件、再保存方案利用ReAct推理行动模式让 LLM 拥有“双手”工具实现全自动闭环。2. 核心架构ReAct 是什么ReAct Reasoning思考 Acting行动流程感知用户下达指令“给代码加注释”。思考LLM 决定第一步要调用read_file。行动Python 代码执行读取文件操作。观察将文件内容返回给 LLM。循环LLM 看到内容决定调用write_file写入新代码。结束任务完成。3. 核心代码实现第一步定义工具# Agent 的“手”用来操作文件 def read_file(file_path): 读取文件内容 try: with open(file_path, r, encodingutf-8) as f: return f.read() except FileNotFoundError: return 错误文件未找到 def write_file(file_path, content): 写入文件内容 with open(file_path, w, encodingutf-8) as f: f.write(content) return 文件写入成功3.1.1 结构拆解从定义到参数拆解一下read_file的 Schema 结构{type: function, // 告诉模型这是一个可调用的函数不是一段文本function: {name: read_file, // 模型决策后返回这个名字你的 Python 代码靠它找到对应的函数description: ..., // 告诉模型这个工具是干嘛的最关键下文细说parameters: { // 定义输入数据的格式type: object,properties: { // 具体参数列表file_path: {type: string, // 类型约束必须是字符串description: 文件路径 // 参数说明告诉模型这里该填什么}},required: [file_path] // 必填项如果不填工具就无法运行}}}3.1.2 为什么description是灵魂很多初学者容易忽略description字段甚至直接留空。但实际上description是决定 Agent 智能程度的关键。LLM 是基于语义理解的它不会去读你的 Python 源代码。它判断“现在该不该调用这个工具”的唯一依据就是description里的文字。一个优秀的description必须具备两点明确触发条件告诉模型在什么情况下使用它。清晰的功能边界告诉模型用了它会有什么效果。❌糟糕的写法description: 写文件此时模型可能会困惑——“是覆盖写还是追加写是写二进制还是文本如果我把路径填错了怎么办”模糊的描述会导致模型犹豫不决甚至乱传参数。优秀的写法description: 将内容写入指定文件用于保存修改后的代码模型不仅知道了用途写文件还明确了场景保存修改后的代码。当用户说“帮我修复这个 Bug”时模型能迅速通过“保存”这个意图匹配到该工具。3.1.3 参数描述的精准性不仅是函数描述参数的description同样重要。看write_file的参数定义content: {type: string, description: 要写入的内容}这告诉模型这个参数是一个字符串。如果你的描述是要写入的字节流模型可能会尝试把文本转成 bytes导致你的程序报错。如果你的描述是修改后的完整代码模型就会倾向于把整个文件内容传进来而不是只传修改的一小行从而保证了写入逻辑的完整性。第二步实现 ReAct 主循环4. 避坑指南坑点一Pydantic 对象与字典的冲突现象在第二轮循环报错AttributeError: CompletionMessage object has no attribute get。原因SDK 底层期望传入字典但message是对象直接append导致类型不匹配。解决方案修复代码model_dump或dict()转换。代码片段msg_dict message.model_dump(exclude_unsetTrue)坑点二上下文丢失原因忘记把“模型之前的决策”存回messages。后果模型在第二轮会“失忆”不知道自己刚才干了什么。解决方案强调必须先append(message)再append(tool_result)。5. 实战演示test.py修改前后的对比修改前修改后

相关新闻

Pyre Code扩散模型专题:Noise Schedule、DDIM、Flow Matching与adaLN-Zero从零实现指南

Pyre Code扩散模型专题:Noise Schedule、DDIM、Flow Matching与adaLN-Zero从零实现指南

教育人工智能深度学习 【免费下载链接】pyre-code A self-hosted ML coding practice platform. 68 problems from ReLU to flow matching — attention, training, RLHF, diffusion, and more. Instant feedback in the browser. 项目地址: https://gitcode.com/gh…

2026/10/13 2:23:28 阅读更多 →
PSO优化SVR参数:从手动调参到智能搜索的工程实践

PSO优化SVR参数:从手动调参到智能搜索的工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 2:23:28 阅读更多 →
ChatGPT之外,OpenAI还有DALL-E、Whisper和Codex:TaoToken统一Key接入多模型工具链

ChatGPT之外,OpenAI还有DALL-E、Whisper和Codex:TaoToken统一Key接入多模型工具链

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 2:23:28 阅读更多 →

最新新闻

UE4 C++设计模式实战:用Actor、Component和状态机重构玩法代码

UE4 C++设计模式实战:用Actor、Component和状态机重构玩法代码

设计模式这个东西,一说起来就像大学课堂里的PPT:UML图、抽象类、一堆定义。但等你真正用 C 在 UE4 里写玩法系统时,你会发现这些概念根本不是考题,而是每天在用的工具。甚至可以说,UE4 本身就是一个用设计模式堆起来的…

2026/10/13 3:07:45 阅读更多 →
会计信息管理系统设计与实现:从业务拆解到答辩全流程解析

会计信息管理系统设计与实现:从业务拆解到答辩全流程解析

每年课设季,总有人在群里问“有没有代码量大一点、又不算太难的题目”。会计信息管理系统这份源码,我前前后后在不同群里见过好几回,估计很多同学手里都躺着一份压缩包。它属于典型的课程设计/毕业设计题材,但从“拿到源码”到“能…

2026/10/13 3:07:45 阅读更多 →
MATLAB微分方程求解:从刚性识别到三层可信验证

MATLAB微分方程求解:从刚性识别到三层可信验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 3:07:45 阅读更多 →
单卡3090跑通Llama-2-7B的LoRA全链路:环境、数据、训练、合并与部署

单卡3090跑通Llama-2-7B的LoRA全链路:环境、数据、训练、合并与部署

简介:这是一份面向算法工程师、研发人员与技术爱好者的LLM高效微调实战指南,聚焦算力受限场景下的工业级落地路径,解决大模型微调门槛高、环境配置复杂、数据质量难控、LoRA参数调优无从下手等核心痛点。资源为单文件PDF文档(578K…

2026/10/13 3:07:45 阅读更多 →
artcraft工具链设计:分层解耦与脚本化优先的创作流程实践

artcraft工具链设计:分层解耦与脚本化优先的创作流程实践

1. 从“artcraft”这个名字说起:一个被低估的创作工具链思路第一次看到“artcraft”这个标题的时候,我脑子里蹦出来的第一反应是——这大概率不是一个单一工具,而是一套围绕“艺术化创作”搭建起来的工作流或者工具集合。为什么这么说&#x…

2026/10/13 3:07:45 阅读更多 →
Git操作实战:从提交、分支合并到事故救援

Git操作实战:从提交、分支合并到事故救援

说个经常见到的场景。身边不少同学背Git命令背得滚瓜烂熟:git add、git commit、git push、git pull,张口就来;可真到项目里把代码搞乱了,或者和别人合并时出现冲突,就完全不知道从哪下手。越是这种时候,越…

2026/10/13 3:06:45 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →