2026/9/30 2:42:27

WindsurfAPI 身份中和与内容清洗:模型为什么自称 Claude?三层 Sanitize 与触发词拦截机制全解

WindsurfAPI 身份中和与内容清洗:模型为什么自称 Claude?三层 Sanitize 与触发词拦截机制全解 WindsurfAPI 身份中和与内容清洗模型为什么自称 Claude三层 Sanitize 与触发词拦截机制全解【免费下载链接】WindsurfAPITurn Windsurf / Devin Desktops 100 AI models (Claude, GPT, Gemini, DeepSeek, Kimi, GLM, SWE) into OpenAI-, Anthropic- Gemini-compatible APIs. Zero-dependency self-hosted reverse proxy for Claude Code, Cline Cursor. 把 Windsurf/Devin 云端 100 模型变成三套兼容 API。项目地址: https://gitcode.com/gh_mirrors/wi/WindsurfAPIWindsurfAPI 是一个零依赖的自托管反向代理把 Windsurf / Devin 云端的 100 模型变成 OpenAI、Anthropic 与 Gemini 三套兼容 API。请求经它转发时其实有两次身份危机出站方向Claude Code、Cline 等客户端的系统提示词里带着触发词会被上游内容策略拦截回程方向模型的回复里又会漏出 Windsurf 内部路径和Cascade 是 Codeium 开发的这类自称。WindsurfAPI 用**三层 Sanitize身份中和 内容清洗**把两个方向都洗干净。模型为什么会自称 Claude这里有个常见误解先讲清楚模型身份是真的你请求claude-opus-4-6背后跑的确实是 Claude它自称 Claude 无可厚非。通道身份是假的请求实际走的是 Windsurf 云的 Cascade 通道。Cascade 会在系统提示词里注入自己的身份、workspace_information沙箱信息、内部文件路径如/tmp/windsurf-workspace模型有时会原样复述这些内容。客户端身份是危险的Claude Code 会在系统提示词开头写 You are Claude Code, Anthropics official CLI for Claude这类自我指认恰好命中上游的竞品指纹门禁529 错误码和内容策略拦截permission_denied。所以 WindsurfAPI 需要同时处理三个方向改写客户端身份、剥离内部路径、重写 Cascade 自称。下面逐层拆解。第一层请求侧触发词拦截客户端身份中和对应模块src/handlers/identity-neutralize.js核心函数neutralizeClientIdentity()在/v1/messages与公共出站链路上都会被调用分别由 src/handlers/messages.js 和 src/handlers/chat.js 引入。它的工作方式是按规则逐条扫描系统提示词正文把已实测live-bisected确认会触发拦截的触发词改写为通用助手身份规则 ID触发内容处理方式a1You are Claude Code, Anthropics official CLI…改写为 You are an AI coding assistant.a2You are a Claude agent, built on … Agent SDK.同上这是 Agent-SDK 入口点实测触发 permission_denied 的句子a3x-anthropic-billing-header: …指纹行整行删除bIMPORTANT: Assist with authorized security testing… 安全段落替换为中性安全声明a4Claude Code 品牌块、Fast mode、模型 ID 目录The most recent Claude models are…改写/删除只保留 This coding assistant runs in a terminal.a5Cline 开场白 a highly skilled software engineer… 能力炫耀句保留名字删掉炫耀从句a6Grok 自称 You are Grok … released by xAI 及executing_actions_with_care安全块改写为通用身份 / 整块删除a7工具描述里的FREEFORM裸词codex 的 apply_patch改为free-form7/7 确定性复现的拦截源这套规则有几个工程细节值得新手学习段落边界保护多行匹配使用WITHIN_PARAGRAPH受限区间绝不跨越空行。早期版本用无界正则曾把用户自己的两条安全规则API 密钥绝不能写日志连同上下文一起误删现在每条规则都受段落边界约束。过度删除告警任何一条规则单次替换删除超过 512 字节或裸词规则命中超过 1 次都会打 WARN 日志——因为裸词规则如FREEFORM打中的很可能是你的 SQL 或代码而不是身份指纹。默认开启、可按需关闭主开关是环境变量WINDSURFAPI_NEUTRALIZE_CLIENT_ID默认1设0关闭另有WINDSURFAPI_NEUTRALIZE_CLINE_OBJECTIVE、WINDSURFAPI_NEUTRALIZE_CC_AGGRESSIVE两个默认关闭的实验钩子只等 A/B 实测确认后才会启用避免未经验证的改写破坏提示词语义。完整开关表见 docs/ENV-SWITCHES.md。第二层响应侧路径脱敏Path Sanitize对应模块src/sanitize.js。Cascade 的系统上下文告诉模型它的工作区在/tmp/windsurf-workspace即使移除了工具调用模型仍会在自然语言里叙述路径我来看看 /tmp/windsurf-workspace/config.yaml。这些内部文件系统细节必须剥离否则等于把代理的部署结构泄漏给 API 调用方。该模块提供三个出口sanitizeText(s)一次性清洗用于累积缓冲与错误信息如 src/handlers/chat.js 中allText sanitizeText(allText)。PathSanitizeStream流式增量清洗。它会扣住可能被截断的敏感路径尾巴——比如某个 chunk 以/tmp/win结尾必须等下一个 chunk 才知道是不是完整路径避免敏感串横跨 chunk 边界溜走。sanitizeToolCall(tc)清洗工具调用的三个载体argumentsJson、result、input。少了input这一步Claude Code 会尝试读取本地不存在的workspace-x路径。清洗对象与替换规则/tmp/windsurf-workspace/…、/home/user/projects/workspace-xxx含 Windows 反斜杠与混合格式、/opt/windsurf/…、部署根目录 → 统一替换为workspace标记。workspace_information、workspace_layout、user_information三个 XML 块上游注入的沙箱元数据模型偶尔整块复述→整块删除。workspace这个占位符本身经历了多代演进./tail会被模型拿去Read ./src/main.py导致死循环redacted internal path会被 Opus 原样塞进 bash 命令浪费 2-3 个回合。最终选定的标记既不是合法路径、也不是 shell 元字符模型不会把它当参数使用。第三层响应侧上游身份重写Cascade 自称中和对应模块src/handlers/cascade-metadata-egress.js核心函数neutralizeCascadeIdentity(text, modelName)。这一层解决回程方向的身份问题模型明明是你请求的 Claude回复却说 I am Cascade, made by Codeium。函数按modelName查 provider 映射表claude→Anthropic、gpt→OpenAI、gemini→Google、kimi→Moonshot等把自称改写成真实模型名 真实厂商上游原文清洗后假设请求 claude-opus-4-6I am Cascade, made by CodeiumI am claude-opus-4-6, made by Anthropicdeveloped by Windsurfdeveloped by AnthropicCascade is an AI coding assistantclaude-opus-4-6 is an AI assistantthe Cascade workspacethe workspace配合它的是CascadeOrdinaryEgressStream流式网关它维护一个不超过 640 字符的身份嫌疑窗口只有当扣住的尾巴仍可能是某条身份短语的前缀时才继续持有例如 chunk 断在 I am Cas 上普通散文立即放行——所以它绝不会退化成整条响应的无界累加器。此外JSON 负载会被识别并原样保留preserveStructured路径脱敏边界对一切文本出口仍然生效。三层如何协同一次请求的完整旅程 以 Claude Code 调POST /v1/messages为例入站messages.js先把 Anthropic 格式转成 OpenAI 格式neutralizeClientIdentity()抹掉 You are Claude Code 等触发词 → 请求平安穿过上游门禁。上游Windsurf 云完成推理返回可能混有 Cascade 自称与内部路径的文本。出站PathSanitizeStream先剥路径neutralizeCascadeIdentity再改写自称 → 你收到的是一句干净的 I am claude-opus-4-6且不会看到/tmp/windsurf-workspace这类部署细节。开关速查与验证环境变量默认作用WINDSURFAPI_NEUTRALIZE_CLIENT_ID1第一层客户端身份中和总开关WINDSURFAPI_NEUTRALIZE_CLINE_OBJECTIVE0实验性 Cline OBJECTIVE 炫耀句规则WINDSURFAPI_NEUTRALIZE_CC_AGGRESSIVE0Claude Code 专属激进规则预留钩子行为有完整测试套件锁定想深入了解可运行或阅读test/client-identity-neutralize.test.js、test/identity-neutralize-paragraph-bound.test.js、test/sanitize.test.js、test/cascade-metadata-egress.test.js。总结WindsurfAPI 的三层 Sanitize本质是两个方向、三类泄漏的对称防御️出站触发词拦截identity-neutralize.js——让你的客户端身份不被上游内容策略拦截回程 A路径脱敏sanitize.js——内部文件系统布局不出门回程 BCascade 自称重写cascade-metadata-egress.js——模型报出的是你真正请求的模型名与厂商。对自托管代理类项目而言这套请求指纹清洗 响应身份/路径脱敏的分层思路非常值得参考每层职责单一、都有独立开关与回归测试任何一层改动都不会污染另一层。【免费下载链接】WindsurfAPITurn Windsurf / Devin Desktops 100 AI models (Claude, GPT, Gemini, DeepSeek, Kimi, GLM, SWE) into OpenAI-, Anthropic- Gemini-compatible APIs. Zero-dependency self-hosted reverse proxy for Claude Code, Cline Cursor. 把 Windsurf/Devin 云端 100 模型变成三套兼容 API。项目地址: https://gitcode.com/gh_mirrors/wi/WindsurfAPI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考