Files
Blizzard 9a3a816c80 feat(prompts): prompt 版本化地基 —— 注册表 + 运行期文件覆盖
把散落各服务的硬编码 system prompt 收口为受管注册表,不重编译即可改/回滚/对比:
- shared/prompts:内置默认(随代码) + 运行期覆盖(PROMPTS_FILE) + Get/Keys,并发安全,含单测
- 接入 9 处:mcp-go(graph.extract);dispatcher(eval.quality/eval.refine/guard.jailbreak/
  coordinator.lead/memory.extract,按引用登记默认、无文本重复)
- main 启动调 LoadFile 加载 PROMPTS_FILE 覆盖
- live A/B:覆盖 graph.extract → 图谱抽取 2 条→0 条、向量仍正常(覆盖生效、管道未坏)
- v2(DB 控制面热切换 + 灰度)留后续

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 14:36:04 +08:00

40 lines
970 B
Go

package prompts
import (
"os"
"path/filepath"
"testing"
)
func TestRegistry_DefaultAndOverride(t *testing.T) {
r := New()
r.SetDefault("k", "默认")
if r.Get("k") != "默认" {
t.Fatal("应返回默认")
}
r.SetOverride("k", "覆盖")
if r.Get("k") != "覆盖" {
t.Fatal("覆盖应优先")
}
r.SetOverride("k", "") // 空串=清覆盖
if r.Get("k") != "默认" {
t.Fatal("清覆盖后应回退默认")
}
if r.Get("missing") != "" {
t.Fatal("未登记 key 应返回空串")
}
}
func TestLoadFile(t *testing.T) {
SetDefault("eval.quality", "内置默认评审词")
dir := t.TempDir()
f := filepath.Join(dir, "p.json")
os.WriteFile(f, []byte(`{"eval.quality":"文件覆盖的评审词"}`), 0o644)
t.Setenv("PROMPTS_FILE", f)
LoadFile()
if Get("eval.quality") != "文件覆盖的评审词" {
t.Fatalf("PROMPTS_FILE 覆盖未生效,got %q", Get("eval.quality"))
}
SetOverride("eval.quality", "") // 复位,避免污染其它测试
}