提示结构
本页解释了 itBuilder 中提示词的技术结构——消息是如何构建并发送给大语言模型(LLM)的。
核心消息类型
itBuilder 与 LLM 通信时使用三种主要消息类型:
- 系统提示:定义 Roo 能力、角色和操作规则的初始指令
- 用户消息:你(用户)发送给 Roo 的内容
- 助手消息:LLM 根据你的请求生成的响应
在 API 层面,还有第四种消息角色:
- 工具消息:工具执行返回的结果,作为输入再次发送给 LLM
理解这些消息类型有助于你更高效地使用 Roo,也有助于排查问题或进行高级自定义。
系统提示
系统提示是 Roo 行为的基础。它包含:
- 角色定义:基于所选模式(Code、Ask、Debug 等)的核心角色指令
- 工具描述:关于可用工具的详细信息,包括参数和示例
- 工具使用指南:关于如何使用工具的规则(顺序执行、等待结果等)
- 能力说明:描述 Roo 在当前环境下能做什么
- 可用模式:所有可用模式及其描述的列表
- 操作规则:处理文件、项目结构和用户交互的关键指南
- 系统信息:你的环境详情(操作系统、shell、工作目录等)
- 自定义指令:你的全局和模式特定自定义内容
系统提示在你每次与 Roo 交互时动态生成,会根据你当前的模式、可用工具和自定义设置进行调整。
自定义系统提示
高级用户可以通过在工作区放置 .roo/system-prompt-<mode_slug>
文件,为特定模式创建自定义系统提示。当该文件存在时,Roo 会使用它而不是标准的系统提示部分,从而实现对该模式下 Roo 行为的完全自定义。
用户消息
用户消息包含你直接输入给 Roo 的内容,以及额外的上下文信息:
- 你的查询:你在聊天界面输入的文本
- 图片:你在消息中包含的图片(适用于支持的模型)
- 环境详情:自动附加的工作区状态信息:
- 打开的文件/标签页
- 光标位置
- 活跃终端及其输出
- 最近修改的文件
- 当前时间
- Token/费用信息
- 当前模式
- 文件列表(首次连接时)
这种自动上下文丰富机制帮助 Roo 理解你的工作区,无需你手动描述。
助手消息
助手消息是 LLM 的响应,可能包括:
- 文本回复:对你问题的直接回答
- 思考过程:内部推理过程(开启时可见)
- 工具调用:请求使用特定工具,如读取文件或执行命令
注意,虽然助手消息中包含工具调用,但工具的执行结果会以单独的工具消息形式返回给 LLM,而不是作为助手消息的一部分。
消息流
这些组件的协作流程如下:
- 初始设置:Roo 根据你选择的模式和配置生成系统提示
- 用户输入:你发送消息,系统自动补充环境详情
- LLM 处理:LLM 接收所有历史消息及你的新输入
- 助手响应:LLM 生成响应,可能会调用工具
- 工具执行:如 LLM 请求工具,Roo 执行并返回结果
- 会话历史:所有消息以结构化历史方式保存,供上下文使用
技术实现
在内部,Roo 的提示词构建由多个组件完成:
- 系统提示生成:
src/core/prompts/system.ts
中的SYSTEM_PROMPT
函数负责组装完整的系统提示 - 分段生成器:专用函数生成系统提示的各个部分
- 消息转换:针对不同提供商的转换器将 Roo 的内部消息格式转为各 LLM API 所需格式
- 自定义提示加载:
loadSystemPromptFile
函数检查并处理自定义系统提示文件
支持性提示
主聊天流程之外,Roo 还为特定代码操作使用专用模板:
- 代码操作提示:如“解释”、“修复”、“改进”或“添加到上下文”等命令
- 基于模板:由
src/shared/support-prompt.ts
中的模板生成 - 独立上下文:通常不依赖主聊天历史
- 任务专用格式:针对具体代码任务优化
这些支持性提示在正常会话流程之外,为特定编码任务提供专注的辅助。
优化你的交互
理解上述结构有助于你:
- 写出更好的提示:了解 Roo 已有的上下文,避免重复信息
- 排查问题:理解消息流有助于定位问题环节
- 创建自定义模式:掌握系统提示结构后,可更高效地创建自定义模式
- 使用自定义系统提示:高级用户可为特殊场景创建完全自定义的系统提示
这一技术基础支撑了 Roo 的全部能力,使其能够理解你的请求并高效利用可用工具完成任务。