ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

从CLI到Agent:Codex CLI 工具调用与自定义Agent开发实战

从CLI到Agent:Codex CLI 工具调用与自定义Agent开发实战 用了大半年 Codex CLI 最大的感受是多数人只把它当成「终端里的代码生成器」问一句写一段和 GUI 聊天没区别。但真正拉开效率差距的是工具调用 自主 Agent——让 AI 不再只输出代码而是直接动手完成任务。很多人觉得 Agent 必须搭 LangChain、AutoGPT 这类重型框架其实完全不用。基于 Codex CLI 原生的工具调用能力加几十行脚本就能搭出轻量、可控、可工程化落地的自定义 Agent。不用额外部署服务、不用学习新框架直接复用你已有的 CLI 配置、上下文管理、脚本工具链。本文就从底层机制、自定义工具开发到完整的自主 Agent 实现一步步拆解实战方案所有配置和脚本都可直接落地。能力边界基础CLI 问答式生成工具调用 连接外部世界自主Agent 多步任务闭环仅生成文本/代码依赖人工输入上下文可执行命令/读写文件调用外部系统自主任务拆解多工具链式执行结果校验与重试一、先搞懂三个阶段的能力边界很多人对工具调用和 Agent 的概念很模糊其实就是三次能力升级每一步都对应不同的生产价值。阶段1基础CLI 问答式生成这是最基础的用法你给需求它输出代码。本质是「高级代码补全」所有上下文、输入输出都需要人工介入AI 只负责生成这一步。价值提升单段代码的编写效率局限不会自己拿数据、不会自己执行、不会验证结果全程人工兜底阶段2工具调用 连接外部世界给 Codex CLI 开放一组可调用的工具它可以根据需求自主决定是否调用工具、调用哪个工具、传什么参数。可以读文件、写文件、执行命令、调用 API、查数据库AI 从「只能说」变成「能动手操作」但还是单步调用需要你指挥做什么不会自己规划多步流程阶段3自主Agent 多步任务闭环在工具调用的基础上加上任务拆解、自主决策、结果校验、错误重试机制。你只需要给一个最终目标Agent 自己拆分步骤、调用工具、迭代优化直到完成任务。比如「把这个项目的编译错误修了」它会自己编译、看报错、改代码、再编译、反复直到通过比如「给这个模块加个单元测试」它会自己读代码、生成测试、运行、修复用例价值从「提升编码效率」变成「自动完成整条工作流」二、核心机制Codex CLI 工具调用底层原理Codex CLI 的工具调用不是黑盒本质是「模型决策 本地执行 结果回传」的闭环整个过程完全在本地可控。2.1 完整调用流程不需要需要还需调用任务完成用户输入目标模型判断是否需要工具直接回答选择工具生成参数本地执行工具命令工具返回执行结果模型基于结果继续思考输出最终结论整个流程对用户透明你只需要输入目标中间调用几次工具、怎么调用模型自主决定。2.2 工具定义规范工具本质是「一段描述 一个可执行命令」。描述告诉模型这个工具是干什么的、什么时候用、参数是什么命令定义工具在本地怎么执行。配置位置~/.codex/config.toml新增[tools]配置段[tools] # 工具启用开关 enabled true # 工具搜索目录可放多个自定义工具脚本 tool_dirs [~/.codex/tools] # 最大调用深度防止死循环 max_tool_calls 10单个工具定义示例~/.codex/tools/read_file.tomlname read_file description 读取本地文件的完整内容用于查看代码、配置、日志。参数file_path为文件的绝对路径或相对于当前目录的路径。 command cat args [{{file_path}}] [parameters] file_path { type string, description 要读取的文件路径, required true }核心三要素描述越精准模型越知道什么时候该调用参数怎么填命令本地可执行的任意命令、脚本、二进制支持参数模板参数定义类型、是否必填、描述帮助模型正确生成参数2.3 为什么比框架好用零依赖不用装 Python、不用装 LangChain纯命令行配置文件全复用你现有的 Shell 脚本、CLI 工具、工作流全部可以直接变成 Agent 工具可控性强所有工具都是本地执行权限、日志、审计完全可控轻量高效没有中间层调用延迟低资源占用极小三、实战5个高频自定义工具实现下面是日常开发最高频的 5 个工具直接照着配置就能用。工具1安全文件写入直接让 AI 改文件风险高封装一个带备份的写入工具自动备份原文件可回滚。工具配置write_file.tomlname write_file description 写入内容到指定文件会自动备份原文件。用于修改代码、更新配置。参数file_path为目标文件路径content为要写入的完整内容。 command ~/.codex/tools/write_file.sh args [{{file_path}}, {{content}}] [parameters] file_path { type string, description 目标文件路径, required true } content { type string, description 要写入的文件内容, required true }实现脚本write_file.sh#!/bin/bashFILE$1CONTENT$2if[-z$FILE];thenecho错误文件路径为空exit1fi# 自动备份if[-f$FILE];thencp$FILE${FILE}.bak.$(date%s)fi# 写入内容echo$CONTENT$FILEecho写入成功$FILE已备份原文件工具2Git 提交工具让 Agent 写完代码自动提交规范生成提交信息。工具配置git_commit.tomlname git_commit description 将当前目录的变更提交到Git自动生成规范的提交信息。用于代码修改完成后提交版本。 command ~/.codex/tools/git_commit.sh args []实现脚本git_commit.sh#!/bin/bashif[-z$(gitstatus--porcelain)];thenecho没有变更需要提交exit0fi# 生成提交信息COMMIT_MSG$(gitdiff|codex --no-history生成简洁的中文Git提交说明不超过50字只输出内容)if[$?-ne0];thenecho生成提交信息失败exit1figitadd.gitcommit-m$COMMIT_MSGecho提交完成$COMMIT_MSG工具3项目构建工具Java 项目 Maven 构建返回编译结果和错误信息Agent 可以根据报错自动修复。工具配置mvn_compile.tomlname mvn_compile description 在当前项目目录执行Maven编译返回编译结果和错误信息。用于验证代码修改是否正确、定位编译错误。 command mvn args [compile, -q]技巧编译命令加-q只输出错误减少无效信息避免上下文爆炸。工具4日志查询工具按关键词过滤日志快速定位问题。工具配置grep_log.tomlname grep_log description 在日志文件中按关键词搜索返回匹配的行。用于排查错误、定位异常。参数log_file为日志文件路径keyword为搜索关键词。 command grep args [-n, -C, 3, {{keyword}}, {{log_file}}] [parameters] log_file { type string, description 日志文件路径, required true } keyword { type string, description 搜索关键词, required true }工具5接口调用工具调用内部或外部 API获取数据或者触发操作。工具配置http_get.tomlname http_get description 发送HTTP GET请求返回响应结果。用于调用接口、查询数据、检查服务状态。参数url为请求地址。 command curl args [-s, {{url}}] [parameters] url { type string, description 请求的URL地址, required true }四、进阶从单工具调用到自主 Agent有了工具之后下一步就是让 AI 自主规划、多步执行变成真正的 Agent。核心是系统提示词 任务闭环逻辑。4.1 Agent 系统提示词设计系统提示词是 Agent 的灵魂决定了它的思考方式、行为边界、执行逻辑。创建~/.codex/agents/dev_agent/system_prompt.md你是一名资深后端开发工程师Agent可以调用工具完成开发任务。 ## 工作规则 1. 接到任务后先分析需求规划执行步骤不要直接回答 2. 需要信息、数据、代码时优先调用工具获取不要凭空编造 3. 每执行一步工具根据结果判断下一步直到任务完成 4. 遇到错误时自动分析原因尝试修复最多重试3次 5. 任务完成后给出总结报告说明做了什么、结果如何、注意事项 ## 可用工具 - read_file读取文件内容 - write_file写入文件自动备份 - mvn_compile编译Java项目 - git_commit提交代码 - grep_log搜索日志 ## 安全边界 - 禁止删除文件禁止执行 rm -rf 类危险命令 - 禁止修改项目外的文件 - 编译错误超过3次停止尝试给出问题分析4.2 启动 Agent 的方式通过--system-prompt参数加载提示词配合会话就变成了持续运行的 Agent# 启动开发Agent新建独立会话codex\--sessiondev-agent\--system-prompt ~/.codex/agents/dev_agent/system_prompt.md\--context./src\你现在是项目的开发助手可以调用工具完成任务之后所有对话都在这个会话里Agent 会一直遵循规则自主调用工具完成任务。4.3 Agent 执行闭环流程是异常是否正常未完成完成否接收任务目标分析需求 规划步骤是否需要工具?选择工具 生成参数执行工具 获得结果结果是否正常?重试次数3?输出失败原因任务是否完成?输出最终总结五、完整实战自动化编译修复 Agent最经典的 Agent 场景给它一个项目自动修复所有编译错误全程不用人工介入。5.1 准备工作配置好前面的read_file、write_file、mvn_compile三个工具创建修复 Agent 的系统提示词5.2 修复 Agent 专属提示词你是Java代码修复Agent专门自动修复项目的编译错误。 ## 执行流程 1. 先执行 mvn_compile 编译项目获取错误信息 2. 分析错误定位到具体文件和行号 3. 调用 read_file 读取对应文件 4. 分析错误原因修改代码 5. 调用 write_file 写入修复后的代码 6. 再次编译验证 7. 如果还有错误重复上述步骤最多3轮 8. 全部修复或达到最大次数输出最终报告 ## 修复原则 - 只修复编译错误不改变业务逻辑 - 优先修复依赖缺失、语法错误、类型不匹配 - 不确定的地方不要瞎改标注出来 - 每轮只修改最核心的错误逐步推进5.3 一键执行进入项目根目录执行codex\--no-history\--system-prompt ~/.codex/agents/fix_compile/system_prompt.md\自动修复当前项目的所有编译错误然后你就可以去喝杯水回来大概率就修好了。它会自动编译 → 看报错 → 读文件 → 改代码 → 再编译循环直到通过。5.4 实测效果普通中小项目10 个以内的编译错误基本 2~3 轮就能全部修复正确率在 80% 左右。复杂的依赖错误、业务逻辑错误会标注出来人工处理。最佳实践不要让 Agent 直接改生产代码新建分支或者在测试项目里跑确认没问题再合并。六、踩坑与最佳实践6.1 安全第一工具权限管控最小权限原则工具只给完成任务必需的权限禁止给 sudo、rm -rf 等高风险命令操作审计所有工具调用打日志记录时间、命令、参数、结果可追溯危险命令拦截重要工具脚本里加校验比如删除文件前确认路径、加白名单沙箱运行重要场景在 Docker 或者测试目录里跑不直接操作生产代码6.2 避免死循环调用深度限制配置max_tool_calls限制最大调用次数防止任务逻辑问题导致无限循环提示词里明确最大重试次数异常场景及时终止复杂任务拆成小目标分步执行比一个大目标跑到底更可控6.3 上下文管理Agent 任务用独立会话避免和普通问答混用上下文污染长时间运行的 Agent定期清理历史只保留最近几轮交互工具返回结果尽量精简去掉无用输出节省 token6.4 容错与降级不要迷信 AI 100% 正确关键操作必须有备份、可回滚工具执行失败要有错误信息返回让模型能根据错误调整复杂场景设置人工介入节点不要追求完全无人化最后从 CLI 到 Agent本质是 AI 能力的释放从「辅助你写代码」变成「帮你完成工作流」。重型 Agent 框架有它的优势但对于绝大多数日常开发场景Codex CLI 自定义工具 简单提示词就足够搭出好用、可控、轻量的自动化 Agent。不用搭服务、不用学新框架、复用现有工具链几个小时就能落地实实在在提升效率。Agent 从来不是越复杂越好适合自己工作流的才是最好的。
返回列表