v1.6 System Prompt 工程化 + 渐进式技能发现
重构 system prompt 为动态组装系统:PromptComposer 聚合核心身份、AGENTS.md 项目规范和 Skills 目录;新增 read_skill 工具实现技能按需加载;包重命名 internal/context -> internal/prompt 消除 stdlib 冲突。
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
package tools
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
|
||||
"go-tiny-claw/internal/prompt"
|
||||
"go-tiny-claw/internal/schema"
|
||||
)
|
||||
|
||||
type ReadSkillTool struct {
|
||||
loader *prompt.SkillLoader
|
||||
}
|
||||
|
||||
func NewReadSkillTool(workDir string) *ReadSkillTool {
|
||||
return &ReadSkillTool{
|
||||
loader: prompt.NewSkillLoader(workDir),
|
||||
}
|
||||
}
|
||||
|
||||
func (t *ReadSkillTool) Name() string {
|
||||
return "read_skill"
|
||||
}
|
||||
|
||||
func (t *ReadSkillTool) Definition() schema.ToolDefinition {
|
||||
return schema.ToolDefinition{
|
||||
Name: t.Name(),
|
||||
Description: "按技能名称加载完整的技能指令。在开始任务前可先用 read_skill 获取该技能的详细执行指南。支持技能: git-workflow",
|
||||
InputSchema: map[string]interface{}{
|
||||
"type": "object",
|
||||
"properties": map[string]interface{}{
|
||||
"name": map[string]interface{}{
|
||||
"type": "string",
|
||||
"description": "要加载的技能名称,如 git-workflow",
|
||||
},
|
||||
},
|
||||
"required": []string{"name"},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
type readSkillArgs struct {
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
func (t *ReadSkillTool) Execute(ctx context.Context, args json.RawMessage) (string, error) {
|
||||
var input readSkillArgs
|
||||
if err := json.Unmarshal(args, &input); err != nil {
|
||||
return "", fmt.Errorf("参数解析失败: %w", err)
|
||||
}
|
||||
|
||||
skill, err := t.loader.Load(input.Name)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return fmt.Sprintf("技能: %s\n描述: %s\n\n--- 技能正文 ---\n%s", skill.Name, skill.Description, skill.Body), nil
|
||||
}
|
||||
Reference in New Issue
Block a user