diff --git a/internal/agent/core/process.go b/internal/agent/core/process.go index 39f9333..529a036 100644 --- a/internal/agent/core/process.go +++ b/internal/agent/core/process.go @@ -305,6 +305,12 @@ func (a *Agent) process(input string, stageCtx *sdk.StageContext) (response stri result = r } } + // ContextPolicy: prune 工具调用后执行上下文裁剪(§13.8) + if def := a.stageHost.ToolDef(tc.Name); def != nil && def.ContextPolicy == "prune" { + if a.context != nil { + a.context.Prune(result, 20, a.docStore) + } + } msgContent := "" if contentOnce { diff --git a/third_party/homeagent-sdk/sdk/plugin.go b/third_party/homeagent-sdk/sdk/plugin.go index ebd234d..8e70255 100644 --- a/third_party/homeagent-sdk/sdk/plugin.go +++ b/third_party/homeagent-sdk/sdk/plugin.go @@ -106,6 +106,7 @@ type ToolDef struct { Parameters map[string]interface{} `json:"parameters"` NoMemory bool `json:"no_memory,omitempty"` // 此工具输出不参与记忆计算,但原文保留 Cleaner func(string) string `json:"-"` // 计算层过滤函数,不改原文;仅在向量化/jieba/蒸馏时调用 + ContextPolicy string `json:"context_policy,omitempty"` // 工具上下文策略:"none"(默认) / "prune" } // IOInjector provides methods for injecting input and interrupts into the agent pipeline.