一种流行的观点认为,AI Agent 的本质是构建更有效的 Prompt
。这句话虽不全面,却指出了 Prompt
工程在 Agent 开发中的核心地位。本文将深入 Cline
的源代码,剖析其 Prompt
设计的架构与细节。
System Prompt:Agent 的基石与灵魂
System Prompt
是 AI 应用的核心资产。在 GitHub
上,一个收集各类 AI 应用 System Prompt
的仓库竟能获得数万星标,足见其重要性。Cline
的 System Prompt
设计并非静态文本,而是一个根据上下文、工具和模型信息动态生成的高度结构化指令集,其源码位于 src/core/prompts/system.ts
。
System Prompt
首先为模型设定了身份:
You are Cline, a highly skilled software engineer with extensive knowledge in many programming languages, frameworks, design patterns, and best practices.
工具使用(TOOL USE):定义行动的语言
Cline
的 Prompt
设计清晰地展示了如何引导模型逐步完成任务,其核心在于对工具的精细化管理。这套机制的设计思路,与 ReAct (Reasoning and Acting)
框架不谋而合,即通过“思考-行动-观察”的循环来解决复杂问题。
1. 工具调用格式
Prompt
首先定义了工具调用的语法,要求模型使用 XML
标签输出,确保了机器可读性和解析的稳定性。
<tool_name>
<parameter1_name>value1</parameter1_name>
<parameter2_name>value2</parameter2_name>
...
</tool_name>
2. 工具清单与示例
System Prompt
详细列举了所有内置工具,包括功能描述、参数说明和使用示例。例如,write_to_file
工具的定义极其详尽,明确了文件存在则覆盖、不存在则创建,并会自动处理目录创建。
## write_to_file
Description: Request to write content to a file at the specified path. If the file exists, it will be overwritten with the provided content. If the file doesn't exist, it will be created. This tool will automatically create any directories needed to write the file.
Parameters:
- path: (required) The path of the file to write to (relative to the current working directory ${cwd.toPosix()})
- content: (required) The content to write to the file. ALWAYS provide the COMPLETE intended content of the file, without any truncation or omissions. You MUST include ALL parts of the file, even if they haven't been modified.
Usage:
<write_to_file>
<path>File path here</path>
<content>
Your file content here
</content>
</write_to_file>
Cline
内置了覆盖命令行、文件系统、浏览器交互乃至 MCP
(Meta-level Control Protocol)的十余种工具,这些工具构成了模型与外部世界交互的桥梁。
3. 工具使用指引
Prompt
提供了清晰的思维链(CoT)指引,引导模型如何思考和决策:
- 评估信息:在
<thinking>
标签内进行思考。 - 选择工具:根据任务选择最合适的工具。
- 单步执行:一次只调用一个工具,等待结果后再进行下一步。
- 构建调用:使用规定的
XML
格式。 - 等待反馈:每次工具调用后,系统会返回执行结果,模型需等待此反馈。
这种分步执行、等待确认的机制,确保了任务拆解的准确性和每一步操作的可控性,显著提高了复杂任务的成功率。
文件编辑:核心场景的精细化引导
对于代码生成 Agent 而言,文件编辑是最高频、最核心的功能。Cline
在 Prompt
中特别强化了对 write_to_file
和 replace_in_file
两个工具的指导,并提供了一套文件编辑的最佳实践工作流:
- 评估范围:编辑前,先评估修改范围,决定使用哪个工具。
- 精确修改:小范围、有针对性的修改使用
replace_in_file
。 - 重构或创建:大范围重构或创建新文件时,使用
write_to_file
。 - 同步状态:文件被编辑后,系统会提供文件的最新完整内容。模型必须以此最新内容为基准,进行后续操作,这避免了因格式化或用户手动修改导致的状态不一致问题。
Plan Mode 与 Act Mode:策略与执行的分离
Cline
引入了两种操作模式:Plan Mode
和 Act Mode
。在处理复杂任务时,用户可以先进入 Plan Mode
,让模型制定高层策略,例如分析代码结构、确定修改方案,并鼓励使用图表(如 Mermaid)进行可视化展示。规划完成后,再切换到 Act Mode
,模型会严格按照既定计划,一步步执行具体操作。这种“先规划,后执行”的模式,有效提升了复杂任务的成功率和代码质量。
规则与护栏
Prompt
的规则(RULES)部分,通过加粗等方式,用极其强硬的语气定义了模型的行为边界。例如,禁止使用 ~
或 $HOME
指代用户主目录,禁止使用 cd
命令,必须等待用户确认。这些明确的“禁令”构成了模型的行为护栏,减少了不确定性和潜在的破坏性操作。
核心目标与迭代循环
Prompt
的最后,明确了 Cline
处理任务的整体工作流程:
- 分析与拆解:分析用户任务,设定清晰的子目标并排序。
- 迭代执行:按顺序处理子目标,每次调用一个工具。在调用前,必须在
<thinking>
标签中分析环境、选择工具、并检查参数。 - 参数检查:如果必要参数缺失,禁止调用工具,而是使用
ask_followup_question
工具向用户请求信息。 - 任务完成:所有目标完成后,使用
attempt_completion
工具提交最终结果。 - 避免循环对话:回复中不应以提问或寻求更多帮助的方式结束,避免无意义的对话。
Prompt 的扩展性与定制化
Cline
的 Prompt
体系并非一成不变,它提供了多层次的定制化能力,让用户可以根据项目需求注入特定的知识和工作流。
自定义 System Prompt
Cline
允许用户在项目根目录下的 .clinerules/
文件夹中添加自定义指令。这些指令会被追加到 System Prompt
的末尾,作为最有效的补充。有趣的是,Cline
的代码甚至考虑了加载 Cursor
或 Windsurf
的规则文件,展示了其设计的开放性。
if (localCursorRulesFileInstructions) {
customInstructions += localCursorRulesFileInstructions + "nn"
}
// ...
Slash Command 与 Workflow
通过 /
触发的 Slash Command
为特定任务提供了快捷入口。例如,/reportBug
可以触发一套预设的 Bug 反馈流程。这些命令对应的 Prompt
片段在 src/core/prompts/commands.ts
中定义。
更进一步,用户可以通过创建 Workflow
来自定义命令。在 .clinerules/workflows/
目录下创建 Markdown
文件,即可定义一个多步骤的任务流程。这些自定义 Workflow
同样会以 /
命令的形式出现在聊天框中,为用户封装复杂任务提供了极大的便利。
@ Mention:动态注入上下文
@
符号在 Cline
中用于引用外部资源,动态地将上下文注入到 Prompt
中。用户可以 @
一个文件路径,Cline
会将该文件的完整内容包裹在 <file_content>
标签内发送给模型。
<file_content path="path/to/file">
[Complete file content]
</file_content>
除了文件,@
还可以引用问题、命令行历史、甚至是 URL。这一功能可以被扩展,例如通过 @
对接内部知识库,让 Cline
具备特定领域的专业知识。
Memory Bank:构建长期记忆
Memory Bank
是 Cline
为解决 LLM 长期记忆缺失问题而设计的方案。其核心思想是维护一套关于项目的核心文档,当 Agent 在新任务中丢失历史上下文时,可以通过读取这些“笔记”来快速了解项目全貌。这在概念上类似于一种手动的、结构化的 RAG
(检索增强生成)系统。
用户可以在 .clinerules/
目录下创建 memory-bank.md
,Cline
官方示例推荐了一套文档结构,包括项目简介、技术架构、开发状态等。
值得注意的是,Cline
团队提倡在 Memory Bank
中使用 Mermaid
图表,他们认为:“与 AI 交流的最佳方式并非自然语言——而是工作流的结构化语言。”
模型适配的现实考量:以 Claude 4 为例
Cline
在 3.17.9 版本中为 Claude 4
模型提供了专门的 Prompt
适配。官方博客提到,为了解决 Claude 4
在处理搜索和替换操作时的错误,他们调整了分隔符,用 -
和 +
替代 <
和 >
,从而提高了编辑成功率。
这一细节揭示了一个重要的工程现实:Prompt
并非“一次编写,到处运行”。不同的模型在指令遵循能力、格式偏好和输出稳定性上存在差异。因此,在多模型环境中,针对特定模型进行 Prompt
的精细化测试和调优,是确保系统稳定可靠的关键环节。
openrouter 网站统计显示,Cline 的 Prompt 长度和复杂度远超其他应用
Cline
的 Prompt
设计体现了高度的模块化和防御性编程思想。它通过详尽的指令、丰富的上下文、清晰的规则和多层次的定制化能力,将一个通用的语言模型,改造成为一个专注、可靠且高效的软件工程助手。尽管这种“无微不至”的 Prompt
设计会消耗大量 Token
,但它换来的是 Agent 在执行复杂任务时更高的确定性和成功率。