MCPcopy Create free account
hub / github.com/astercloud/aster / WrapModelCall

Method WrapModelCall

pkg/security/pii_middleware.go:56–93  ·  view source on GitHub ↗

WrapModelCall 包装模型调用,在发送前脱敏 PII。

(ctx context.Context, req *middleware.ModelRequest, handler middleware.ModelCallHandler)

Source from the content-addressed store, hash-verified

54
55// WrapModelCall 包装模型调用,在发送前脱敏 PII。
56func (m *PIIRedactionMiddleware) WrapModelCall(ctx context.Context, req *middleware.ModelRequest, handler middleware.ModelCallHandler) (*middleware.ModelResponse, error) {
57 // 提取 Agent ID(如果有)
58 agentID := "unknown"
59 if req.Metadata != nil {
60 if id, ok := req.Metadata["agent_id"].(string); ok {
61 agentID = id
62 }
63 }
64
65 // 处理每个消息
66 for i, msg := range req.Messages {
67 redactedMsg, err := m.redactMessage(ctx, msg, agentID)
68 if err != nil {
69 return nil, fmt.Errorf("failed to redact message %d: %w", i, err)
70 }
71 req.Messages[i] = redactedMsg
72 }
73
74 // 处理 System Prompt
75 if req.SystemPrompt != "" {
76 redacted, _, err := m.redactWithTracking(ctx, req.SystemPrompt, agentID)
77 if err != nil {
78 return nil, fmt.Errorf("failed to redact system prompt: %w", err)
79 }
80 req.SystemPrompt = redacted
81 }
82
83 // 调用下一层处理器
84 resp, err := handler(ctx, req)
85 if err != nil {
86 return nil, err
87 }
88
89 // 响应通常不需要脱敏(LLM 生成的内容)
90 // 但如果需要,可以在这里添加
91
92 return resp, nil
93}
94
95// redactMessage 脱敏单个消息。
96func (m *PIIRedactionMiddleware) redactMessage(ctx context.Context, msg types.Message, agentID string) (types.Message, error) {

Callers

nothing calls this directly

Calls 3

redactMessageMethod · 0.95
redactWithTrackingMethod · 0.95
handlerFunction · 0.85

Tested by

no test coverage detected