Files
aruo 3e91c7d0a1 v1.6 System Prompt 工程化 + 渐进式技能发现
重构 system prompt 为动态组装系统:PromptComposer 聚合核心身份、AGENTS.md
项目规范和 Skills 目录;新增 read_skill 工具实现技能按需加载;包重命名
internal/context -> internal/prompt 消除 stdlib 冲突。
2026-05-17 00:05:31 +08:00

68 lines
2.5 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package prompt
import (
"os"
"path/filepath"
"strings"
"go-tiny-claw/internal/schema"
)
// PromptComposer 负责根据工作区环境动态生成 System Prompt
type PromptComposer struct {
workDir string
skillLoader *SkillLoader
}
func NewPromptComposer(workDir string) *PromptComposer {
return &PromptComposer{
workDir: workDir,
skillLoader: NewSkillLoader(workDir),
}
}
// Build 组装并返回一条完整的 RoleSystem 消息
func (c *PromptComposer) Build() schema.Message {
var promptBuilder strings.Builder
// 1. 极简内核 (Minimal Core)
promptBuilder.WriteString(`# 核心身份
你名叫 go-tiny-claw,一个由驾驭工程驱动的骨灰级研发助手。
你具备极简主义哲学,拒绝废话。你能通过系统提供的内置工具,创建、读取、修改和执行工作区中的代码。
# 核心纪律 (CRITICAL)
1. 如需检查文件是否存在,请使用 bash 的 ls 或 test -f,而不是对目录使用 read_file。
2. 创建新文件时,务必使用 write_file,并同时提供 path 和 content 参数。
3. 编辑文件前务必先读取现有文件,以理解上下文。
4. 无论何时你需要写代码或创建文件,都要直接使用 write_file 工具。
5. 遇到工具执行报错时,仔细阅读 stderr,尝试自己修正命令并重试。
6. 始终用中文回复,以便传达你的进展和想法。
`)
// 2. 外部化状态:加载项目专属规范 (AGENTS.md)
agentsMDPath := filepath.Join(c.workDir, "AGENTS.md")
content, err := os.ReadFile(agentsMDPath)
if err == nil {
promptBuilder.WriteString("\n# 项目专属指南 (来自 AGENTS.md)\n")
promptBuilder.WriteString("以下是当前工作区特有的架构规范与注意事项,你的行为必须绝对符合以下要求:\n")
promptBuilder.WriteString("```markdown\n")
promptBuilder.WriteString(string(content))
promptBuilder.WriteString("\n```\n")
}
// 3. 渐进式技能发现:仅注入目录(名称 + 触发条件),正文按需加载
skills := c.skillLoader.List()
if len(skills) > 0 {
promptBuilder.WriteString("\n# 可用专业技能\n")
promptBuilder.WriteString("你在以下场景可以调用 read_skill 加载完整的技能指令:\n\n")
for _, s := range skills {
promptBuilder.WriteString("- **" + s.Name + "**:" + s.Description + "\n")
}
promptBuilder.WriteString("\n当任务匹配上述技能的描述时,请先调用 read_skill 加载完整的执行指南,再严格按照指南操作。\n")
}
return schema.Message{
Role: schema.RoleSystem,
Content: promptBuilder.String(),
}
}