pub const BASE_COMPACT_PROMPT: &str = r#"你的任务是对对话进行详细摘要,以便后续继续开发工作而不丢失上下文。
请包含以下部分:
1. **主要请求和意图**:详细捕获用户的明确请求和意图
2. **关键技术概念**:列出所有重要的技术概念、技术和框架
3. **文件和代码段**:
- 枚举具体检查和修改的文件
- 包含完整代码片段
- 说明为什么这个文件重要
- 描述对这个文件的更改
4. **错误和修复**:
- 列出所有遇到的错误
- 描述如何修复每个错误
- 记录用户的反馈(如果有)
5. **问题解决**:记录解决的问题和正在进行的调试工作
6. **所有用户消息**:列出所有非工具结果的用户消息
7. **待处理任务**:概述明确要求处理的待处理任务
8. **当前工作**:详细描述最近正在处理的工作
9. **可选下一步**:列出与最近工作相关的下一步
请基于以上结构提供详细的摘要。
输出格式示例:
<analysis>
[你的思考过程,确保全面准确地涵盖所有要点]
</analysis>
<summary>
1. 主要请求和意图:
[详细描述]
2. 关键技术概念:
- [概念 1]
- [概念 2]
- [...]
3. 文件和代码段:
- [文件名 1]
- [为什么这个文件重要]
- [对这个文件的更改]
- [重要代码片段]
- [...]
4. 错误和修复:
- [错误 1 的详细描述]
- [如何修复]
- [用户反馈]
- [...]
5. 问题解决:
[描述已解决的问题和正在进行的调试]
6. 所有用户消息:
- [详细的非工具用户消息]
- [...]
7. 待处理任务:
- [任务 1]
- [任务 2]
- [...]
8. 当前工作:
[精确描述当前工作]
9. 可选下一步:
[与最近工作相关的下一步]
</summary>
请根据目前的对话提供摘要,遵循此结构并确保精确和全面。
"#;
pub const PARTIAL_COMPACT_PROMPT: &str = r#"你的任务是对对话的**最近部分**进行摘要——即早期保留上下文之后的消息。早期的消息保持完整,不需要总结。
专注于总结最近的消息中讨论、学习和完成的内容。
请包含以下部分:
1. **最近的请求和意图**:捕获用户最近的明确请求
2. **最近的技术概念**:列出最近讨论的技术概念
3. **最近的文件和代码**:最近检查和修改的文件
4. **最近的错误和修复**:最近遇到的错误及修复方法
5. **最近的进展**:最近解决的问题和完成的工作
6. **待处理任务**:当前待处理的任务
7. **当前工作**:最近正在处理的工作
8. **下一步**:下一步要采取的行动
请基于以上结构提供简洁的摘要。
"#;
pub const COMPACT_INSTRUCTIONS: &str = r#"
以下是额外的压缩指令:
{instructions}
请在创建摘要时遵循这些指令。
"#;
pub fn generate_compact_prompt(instructions: Option<&str>) -> String {
match instructions {
Some(instr) => {
let mut prompt = BASE_COMPACT_PROMPT.to_string();
prompt.push_str(&COMPACT_INSTRUCTIONS.replace("{instructions}", instr));
prompt
}
None => BASE_COMPACT_PROMPT.to_string(),
}
}
pub fn generate_partial_compact_prompt(instructions: Option<&str>) -> String {
match instructions {
Some(instr) => {
let mut prompt = PARTIAL_COMPACT_PROMPT.to_string();
prompt.push_str(&COMPACT_INSTRUCTIONS.replace("{instructions}", instr));
prompt
}
None => PARTIAL_COMPACT_PROMPT.to_string(),
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_generate_compact_prompt() {
let prompt = generate_compact_prompt(None);
assert!(prompt.contains("主要请求和意图"));
assert!(prompt.contains("关键技术概念"));
let prompt_with_instructions = generate_compact_prompt(Some("只关注 Rust 代码更改"));
assert!(prompt_with_instructions.contains("只关注 Rust 代码更改"));
}
#[test]
fn test_generate_partial_compact_prompt() {
let prompt = generate_partial_compact_prompt(None);
assert!(prompt.contains("最近部分"));
assert!(prompt.contains("最近的消息"));
}
}