提示结构
本页解释了 Roo Code 中提示的技术结构——消息是如何构建并发送给大型语言模型(LLM)的。
本页解释了 Roo Code 中提示的技术结构——消息是如何构建并发送给大型语言模型(LLM)的。
核心消息类型
Roo Code 在与 LLM 通信时使用三种主要消息类型:
- 系统提示:定义 Roo 的能力、角色和操作规则的初始指令。
- 用户消息:您(用户)发送给 Roo 的内容。
- 助手消息:LLM 根据您的请求生成的响应。
在 API 层面,还有第四种消息角色:
- 工具消息:工具执行返回的结果,作为输入发送回 LLM。
了解这些消息类型有助于您更有效地使用 Roo,对于故障排除或高级自定义也很有价值。
系统提示
系统提示是 Roo 行为的基础。它包含:
- 角色定义:基于所选模式(代码、提问、调试等)的核心角色指令。
- 工具描述:关于可用工具的详细信息,包括参数和示例。
- 工具使用指南:如何使用工具的规则(顺序执行、等待结果)。
- 能力:Roo 在当前环境中的能力描述。
- 可用模式:所有可用模式及其描述的列表。
- 操作规则:处理文件、项目结构和用户交互的关键指南。
- 系统信息:关于您的环境的详细信息(操作系统、shell、工作目录)。
- 自定义指令:您的全局和特定模式的自定义设置。
系统提示是您每次与 Roo 交互时动态生成的,它会根据您当前的模式、可用工具和自定义设置进行调整。
自定义系统提示
高级用户可以通过在其工作区中放置 .roo/system-prompt-<mode_slug> 文件来为特定模式创建自定义系统提示。如果存在,Roo 将使用此文件而不是生成标准的系统提示部分,从而允许完全自定义 Roo 在该模式下的行为。
用户消息
用户消息包含您对 Roo 的直接输入,以及额外的上下文信息:
- 您的查询:您在聊天界面中输入的文本。
- 图片:您在消息中包含的任何图片(对于支持的模型)。
- 环境详细信息:自动附加的关于您的工作区状态的信息:
- 打开的文件/标签页。
- 光标位置。
- 带有输出的活动终端。
- 最近修改的文件。
- 当前时间。
- 令牌/成本信息。
- 当前模式。
- 文件列表(在初始连接时)。
这种自动上下文丰富有助于 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 的所有功能提供了支持,使其能够理解您的请求并有效利用可用工具来完成任务。