9a3a816c80
把散落各服务的硬编码 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>
40 lines
970 B
Go
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", "") // 复位,避免污染其它测试
|
|
}
|