Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b9cec60730 |
@@ -750,13 +750,30 @@ SCORE|五个数字用竖线分隔
|
||||
// 注意:本行写法刻意让 vet 的 Sprintf(格式串) 检查不匹配(外层 %s%s%s 与 3 实参对齐,
|
||||
// 内层「内容:\n%s」是嵌套 Sprintf 的独立格式串,运行时各自 1 槽 1 参);
|
||||
// rawscore_liveprobe_test.go 的 extractPromptTemplate 锚点须与本行「fmt.Sprintf("内容:\n%s"」保持同步。
|
||||
// t_ab5b2461 信息密度判据灰度(ZHIYI_DISTILL_DENSITY=1):只在开关开时追加信息量要求段。
|
||||
// 关态 instrFull == instr,prompt 逐字节与现状一致(AC5);上方旧 prompt 常量一字未动。
|
||||
// t_afacc477 三档粒度(ZHIYI_DISTILL_MODE)+ 截断可配(ZHIYI_DISTILL_CAP,默认 1000=现状)。
|
||||
// current = 逐字节等价现状 A(cap=1000、无附加段);context = B 档(默认);merged = C 档。
|
||||
instrFull := instr
|
||||
if densityGateEnabled {
|
||||
instrFull = instr + densityPromptAddendum
|
||||
if distillMode == "context" {
|
||||
instrFull = instr + addendumContext
|
||||
} else if distillMode == "merged" {
|
||||
instrFull = instr + addendumMerged
|
||||
}
|
||||
prompt := fmt.Sprintf("%s%s%s", instrFull, outFmt, fmt.Sprintf("内容:\n%s", truncate(content, 1000)))
|
||||
// t_ab5b2461 信息密度判据灰度(ZHIYI_DISTILL_DENSITY=1):只在开关开时追加信息量要求段。
|
||||
// 关态 instrFull 不含密度门附加段,prompt 逐字节与现状一致(AC5);上方旧 prompt 常量一字未动。
|
||||
if densityGateEnabled {
|
||||
instrFull = instrFull + densityPromptAddendum
|
||||
}
|
||||
capVal := distillCap
|
||||
if capVal <= 0 {
|
||||
capVal = 0 // 不截断
|
||||
}
|
||||
var contentTail string
|
||||
if capVal <= 0 {
|
||||
contentTail = content
|
||||
} else {
|
||||
contentTail = truncate(content, capVal)
|
||||
}
|
||||
prompt := fmt.Sprintf("%s%s%s", instrFull, outFmt, fmt.Sprintf("内容:\n%s", contentTail))
|
||||
|
||||
body := map[string]interface{}{
|
||||
"model": e.LLMModel,
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
//go:build !ignore
|
||||
|
||||
package distill
|
||||
|
||||
// 织忆 · 蒸馏粒度重构(t_afacc477,2026-10-31 交付分支,未部署)
|
||||
//
|
||||
// 背景:现状 prompt(A)输出 p50=23 字、97.2% 短于 60 字、可执行标记仅 26.5%,
|
||||
// 11:1 压缩是粒度设计造成的(2B 与 agnes 一样碎)。同 128 episode 隔离 A/B/C 对照(E1):
|
||||
// A(现状) p50=23 条/ep 6.51 act=26.5% lt60=97.2%
|
||||
// B(上下文) p50=47 条/ep 2.61 act=50.6% lt60=71.0% ← 推荐
|
||||
// C(合并) p50=34 条/ep 2.37 act=35.3% lt60=83.5%
|
||||
// E2(>1000 字截断层)上 B/C 更优:C@cap1000 act=57.1%,C@cap2000 act=62.2%。
|
||||
// glm-4-flash judge(异源):可复用均分 A 4.32 / B 4.16 / C 4.04;碎片化率 A 10.2% vs B 5.5% / C 6.3%。
|
||||
//
|
||||
// 本改动 = 三档开关 + 截断可配(全部 env 门控,默认值 = 推荐项 B;不改 A 的默认行为语义之外的一切):
|
||||
// ZHIYI_DISTILL_MODE current | context | merged (默认 context,即 B;current=现状逐字节等价 A)
|
||||
// ZHIYI_DISTILL_CAP 截断字符数(默认 1000=现状;2000/none 可配;0=不截断)
|
||||
// ZHIYI_DISTILL_DENSITY 旧开关(t_ab5b2461)保留兼容:=1 时叠加密度门判据
|
||||
//
|
||||
// 红线合规:不改 FUSION_W/FEEDBACK_BIAS/POS_MODE,不重启 zhiyid(本改动只进分支+建议);
|
||||
// 默认值切换需重启才生效(与 proceduralShadowMode 同款启动读一次范式)。
|
||||
|
||||
import "os"
|
||||
|
||||
// 三档粒度附加段(t_afacc477):B=上下文信息量门槛;C=合并粒度(≤3 条、自包含可复用)。
|
||||
// 与 t_ab5b2461 的 densityPromptAddendum 独立:density 是判据门(≥2 项才 keep),
|
||||
// 本段是 prompt 侧粒度重构(改的是「怎么写」,不是「写几条」的准入)。
|
||||
const (
|
||||
// addendumContext(B 档):每条 fact 必含 场景/原因/动作/判据 中至少 2 项。
|
||||
// 措辞取自 t_afacc477 隔离对照 B 臂(AC1 p50 23→47、act 26.5%→50.6%)。
|
||||
addendumContext = `
|
||||
🔴 本次附加要求(信息量门槛,最高优先,覆盖上面「轻量补全」的从简倾向):
|
||||
每条 FACT 不能只写"做了什么",必须写成可复用的一条完整知识,且至少包含下面四项中的【两项】:
|
||||
① 在什么场景(什么任务/什么条件下遇到这件事)
|
||||
② 因为什么(原因、触发条件、根因)
|
||||
③ 做什么(具体动作、命令、文件路径、配置键、参数值)
|
||||
④ 判据是什么(怎么判断成功/失败、阈值、数值、验收标准)
|
||||
写法示例(照此信息量写,不要照抄内容):
|
||||
FACT|在排查服务停摆的场景下,因为某个环境变量的缺失导致某配置被重置,所以要补回该配置并重启服务,判据是日志出现对应端点且数秒内完成。
|
||||
仍然禁止编造原文没有的内容;原文信息不足两项时,宁可少写一条,也不许用水话凑字。
|
||||
`
|
||||
// addendumMerged(C 档):一个 episode 最多 3 条,每条自包含可复用(不是对话摘要)。
|
||||
// 措辞取自 t_afacc477 隔离对照 C 臂(条数 6.5→2.4、act 35.3%、judge 碎片化率 6.3%)。
|
||||
addendumMerged = `
|
||||
🔴 本次附加要求(合并粒度,最高优先,覆盖上面「逐条处理、每条一行、facts 要详尽」的倾向):
|
||||
1. 最多输出 3 条 FACT。把同一件事的所有相关要素(场景、原因、动作、命令、路径、阈值、结论、判据)【合并进同一条】,写成一句自足的话。
|
||||
2. 每条 FACT 必须自包含且可复用:未来的读者不需要再看其它 FACT 或原始对话,就能照它行动或回答提问。
|
||||
3. 🔴 禁止写成"对话摘要"(如「用户讨论了X」「他们确认了Y」)—— 要写事实本身与可执行结论。
|
||||
4. 原文信息不足时宁可只输出 1 条,绝不为凑 3 条拆分成碎片。
|
||||
`
|
||||
)
|
||||
|
||||
// distillMode 启动时读一次。默认 "context"(B 档,t_afacc477 推荐);
|
||||
// 部署方若要回到现状 A,设 ZHIYI_DISTILL_MODE=current;merged = C 档。
|
||||
var distillMode = os.Getenv("ZHIYI_DISTILL_MODE")
|
||||
|
||||
func init() {
|
||||
if distillMode == "" {
|
||||
distillMode = "context"
|
||||
}
|
||||
}
|
||||
|
||||
// distillCap 截断字符数(默认 1000=engine.go:759 现状)。0 或 "none" = 不截断。
|
||||
var distillCap = 1000
|
||||
func init() {
|
||||
if v := os.Getenv("ZHIYI_DISTILL_CAP"); v != "" {
|
||||
if v == "none" {
|
||||
distillCap = 0
|
||||
} else {
|
||||
n := 0
|
||||
for _, c := range v {
|
||||
if c < '0' || c > '9' {
|
||||
n = -1
|
||||
break
|
||||
}
|
||||
n = n*10 + int(c-'0')
|
||||
}
|
||||
if n > 0 {
|
||||
distillCap = n
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// DistillCap 对外读口(=0 表示不截断;否则为字符上限)。
|
||||
func DistillCap() int { return distillCap }
|
||||
|
||||
// DistillMode 对外读口(current/context/merged)。
|
||||
func DistillMode() string { return distillMode }
|
||||
Reference in New Issue
Block a user