原文地址
AI coding 智能体设计
理解 AI coding 智能体的设计,可以帮助开发者更好地使用 AI coding 工具,实现开发提效。
了解用户提示词预处理,帮助我们写出高效的用户提示词。例如:为什么在提示词中使用 @字符引入文件、目录作为上下文,可以减少会话轮次?如何自定义命令?
- 了解智能体如何处理 MCP 扩展,如何解析 MCP 的 prompt 和 tool 能力,从而更好的进行 MCP 设计,为 AI coding 智能体提供子命令扩展和工具集扩展。
- 了解 SubAgent 的实现,理解上下文隔离的意义,基于高内聚、低耦合原则进行智能体的模块化设计,降低系统复杂度。
- 了解 MCP 工具调用的局限性,从而理解 Claude Code 推出 Skills、Code Execution with MCP 的动机和原理。
- 为什么规约驱动开发(spec-driven development)成为 AI coding 的最佳实践?通过对开源项目 OpenSpec 的解读,了解规约驱动开发背后的奥秘和改进点。
本文从分析 Gemini-CLI 源代码开始,解读 AI coding 工具的智能体设计。Claude Code 本身不开源,但是实现原理大同小异。
在分析 Gemini-CLI 过程中,特别感谢 Qwen Code 团队,他们的开源项目中的 openaiContentGenerator包提供了OpenAI API的兼容层,使用这个模块可以很容易将 Gemini-CLI 内置的谷歌认证和外部模型切换为公司内部模型。
Gemini-CLI 的用户提示词预处理
在 Gemini-CLI 中输入提示词,首先对输入的内容进行预处理。
- 如果提示词的第一个字符是斜线(/),将提示词视为命令,执行特定操作,或者替换为预置提示词和大模型交互。
- 如果提示词中包含 @字符+路径,检查 @字符后的路径是否存在,读取文件作为上下文,再发送给大模型。可减少不必要的模型会话。
内置命令
Gemini-CLI 的内置命令在 packages/cli/src/ui/commands/目录下定义。
内置命令可以使用预置用户提示词调用大模型完成相关任务。例如:/init 命令使用大模型分析工程代码创建 GEMINI.md 文件。
内置命令列表参见:docs/cli/commands.md。