【免费下载链接】fyagentFor You Agent——AI 时代的个人随身数字人格。把你的模型、AI 账号、技能、提示词和工作方式带到每一个 AI 工具里。项目地址https://gitcode.com/gh_mirrors/fy/fyagent点击查看免费下载FyAgent 是一款面向 AI 开发者的个人随身数字人格管理工具其核心之一是内置在 Rust 后端里的本地代理引擎它在本机监听一个 HTTP 端口把 Claude、Codex、Gemini 三大 AI 工具的请求实时翻译成不同供应商的 API 协议并支持故障转移与健康检查。本文带你逐层拆解这套本地代理的代码实现原理。一、为什么需要本地代理引擎不同 AI 工具说的语言并不相同客户端原生协议认证方式Claude CodeAnthropic Messagesx-api-keyanthropic-versionCodex CLIOpenAI Chat Completions / ResponsesBearer或 ChatGPT OAuthGemini CLIGoogle 原生 RESTx-goog-api-key或 OAuth当你希望用 Codex 客户端跑 DeepSeek 模型或用 Claude Code 接入 ChatGPT 订阅时协议对不上就成了障碍。FyAgent 的解法是在本机启动一个轻量 HTTP 代理把客户端的base_url指向它由代理负责协议翻译、认证注入与多供应商调度。如上图所示本地路由面板会显示代理的服务地址如http://127.0.0.1:15721、按应用Claude / Codex / Gemini独立的路由开关以及故障转移队列——这正是代理引擎的三大能力在界面上的投影。二、整体架构一条请求的完整旅程代理引擎位于 src-tauri/src/proxy/ 模块一条请求依次经过六层客户端 CLI → HTTP 服务器 → 协议 Handler → 供应商路由器 → 转发器(故障转移) → 适配器(协议转换) → 上游供应商2.1 本地 HTTP 服务器监听与路由服务器基于 Axum 构建但刻意使用手写的 hyper HTTP/1.1 accept 循环并开启preserve_header_case(true)见 server.rs——它会在超文本解析前偷看原始 TCP 字节记录请求头的原始大小写再原样转发给上游做到与直连请求在线级完全一致。路由表由 build_router() 定义覆盖了三大协议族的关键端点Claude/v1/messages、/claude-desktop/v1/messagesOpenAI/chat/completions、/responses、/responses/compact、/v1/modelsGemini/v1beta/*path、/gemini/v1/*path用any()覆盖 GET/POST 全部方法同时设置了 200MB 的请求体上限避免携带多模态素材时触发 413。2.2 供应商路由器故障转移与熔断ProviderRouter 负责回答这个请求该发给谁关闭故障转移时只使用当前选中的供应商开启故障转移时按故障转移队列顺序P1 → P2 → …依次尝试每个供应商配有一个独立熔断器key 为app_type:provider_id见 circuit_breaker.rs在 Closed / Open / HalfOpen 三态之间流转连续失败达到阈值即熔断超时后放行一次探测请求探测成功才恢复。阈值失败次数、错误率、超时秒数可按应用独立配置并支持热更新无需重启代理。三、协议转换的核心ProviderAdapter 适配器模式Rust 的后端抽象能力在 adapter.rs 的ProviderAdaptertrait 上体现得淋漓尽致。每个供应商适配器只需回答五个问题上游地址base_url从哪里取认证信息如何提取请求 URL 如何拼接认证请求头如何注入是否需要请求/响应格式转换ProviderType 枚举则区分了 9 种供应商变体官方 Claude、Claude 中转、Codex、Gemini、Gemini CLI、OpenRouter、GitHub Copilot、Codex OAuth、xAI OAuth并据此决定是否需要转换例如 Copilot 与 ChatGPT 订阅必须走 Anthropic ↔ OpenAI 转换而官方 Anthropic 直连则完全透传。认证层的 AuthStrategy 同样按策略分发Anthropic 的x-api-key、Google 的x-goog-api-key、OAuth 场景的动态 Bearer Token……对 Codex OAuth 还成对注入originator: codex_cli_rs与version请求头让 ChatGPT 后端按客户端版本做路由这是订阅登录看起来像官方客户端的关键细节。3.1 请求体格式转换以 Anthropic → OpenAI 的转换为例transform.rs翻译规则相当精细Anthropic 字段OpenAI 字段转换要点system字符串或块数组messages[0].role system多段合并并剥离计费头tool_use块tool_calls参数序列化为规范化 JSON 字符串tool_result块独立role: tool消息保持与tool_call_id对应thinkingbudget_tokensreasoning_effort按预算档位映射为 low/medium/highstop_sequencesstop直接改名max_tokensmax_completion_tokens仅 o 系列推理模型反向的 openai_to_anthropic() 则处理finish_reason → stop_reason映射、tool_calls → tool_use还原以及缓存 token 的三桶核算input / cache_read / cache_creation互斥且总和恒等保证费用统计精确。上图的需要本地路由映射开关就是这条链路在用户侧的入口当供应商使用 Chat Completions 协议而非 GPT 系列模型如 DeepSeek、Kimi时由本地代理完成 Responses ↔ Chat 的双向翻译。四、三条主要转换链路① Claude Messages → OpenAI 方向。GitHub Copilot 与 ChatGPT 订阅登录走这条路客户端发 Anthropic 格式代理翻译成 Chat Completions 或 Responses 格式发往上游再反向翻回streaming_responses.rs、streaming_codex_chat.rs。② Codex Responses → Anthropic 方向。ChatGPT 订阅本身只有 Responses API若要把它接给 Claude 客户端则由 responses_request_to_anthropic() 完成请求翻译anthropic_response_to_responses() 完成响应回填。③ Gemini 原生格式桥接。Gemini 的模型名在 URL 路径里而非请求体见 handle_gemini()且thoughtSignature、tool call 等状态需要跨请求回放FyAgent 用 gemini_shadow.rs 的影子状态存储解决transform_gemini.rs 负责 Anthropic ↔ Gemini 的结构互转。五、流式响应SSE的同步翻译大模型几乎都走 SSE 流式输出而三种协议的 SSE 事件格式完全不同。FyAgent 在 providers/streaming_*.rs 中为每条链路实现了边收边译的流转换器Anthropic 的message_start / content_block_delta / message_delta↔ OpenAI Responses 的response.output_item.added / response.output_text.delta等事件转换是逐事件进行的首 token 延迟不被缓冲放大特殊场景ChatGPT 订阅强制 SSE 而上游 SDK 期望 JSON会先把整个 SSE 流聚合成一个完整 JSON 再交给下游转换聚合逻辑见 handlers.rs 的responses_sse_to_response_value()。六、故障转移、健康检查与自动恢复真正决定代理扛造程度的是 RequestForwarder::forward_with_retry()它按路由顺序逐个尝试供应商每次尝试前向熔断器申请放行许可失败后切换下一家成功/失败结果异步回写熔断状态与健康统计。转发前还会按供应商类型挂载优化器Bedrock 的 thinking 优化、缓存注入等且为每家供应商独立克隆请求体避免优化字段在故障转移时泄漏给不兼容的上游。界面上的运行状态页对应 useHealthChecks.ts会汇总本机安装、账号与配置检查的结果与代理引擎的健康统计互为补充。七、模型映射与用量统计模型映射model_mapper.rs 在转发前把客户端的别名如claude-3-5-haiku按 Provider 配置替换为真实模型名支持 haiku / sonnet / opus 档位与默认模型的精细映射用量统计usage/ 模块为每种协议维护独立解析器从流式与非流式响应中提取 input / output / 缓存 token 并核算成本计费细节对 OpenAI 兼容上游会主动注入stream_options.include_usage见 transform.rs否则流式请求的 token 与成本将全部漏记。八、关键源码索引想深入阅读时可从这份清单入手均在 src-tauri/src/proxy/ 下关注点源码位置HTTP 服务器与路由表server.rs协议 Handlerhandlers.rs供应商路由与熔断provider_router.rs、circuit_breaker.rs故障转移转发forwarder.rs适配器与认证providers/adapter.rs、providers/auth.rs请求体转换providers/transform.rs、providers/transform_codex_anthropic.rsSSE 流式转换providers/streaming_codex_anthropic.rs、providers/streaming_gemini.rs模型映射model_mapper.rs用量统计usage/小结FyAgent 的 Rust 本地代理引擎本质上是一个协议网关 智能调度器适配器模式抹平了供应商差异六层流水线让协议转换发生在毫秒级熔断器 故障转移队列保证了多供应商环境下的可用性而逐事件 SSE 翻译则保住了流式输出的低延迟体验。理解这套实现对你自研任何 AI 协议网关都会很有参考价值。赞分享【免费下载链接】fyagentFor You Agent——AI 时代的个人随身数字人格。把你的模型、AI 账号、技能、提示词和工作方式带到每一个 AI 工具里。项目地址https://gitcode.com/gh_mirrors/fy/fyagent点击查看免费下载相关推荐ok-ww 鸣潮自动战斗挂机完整指南ok ww 鸣潮自动战斗挂机完整指南 如果你玩《鸣潮》每天被刷隐寂压力、捡声骸、领奖励这套流程绑住就需要 ok wuthering wavesok wwGUI 自动化计算机视觉RPA人工智能读懂MindFS Agent接入原理Claude SDK、Codex SDK与ACP协议如何实现统一读懂MindFS Agent接入原理Claude SDK、Codex SDK与ACP协议如何实现统一 MindFS 是开源的 AI Agent 远程访问网关现代C设计模式最佳实践避免反模式与常见陷阱的完整清单现代C设计模式最佳实践避免反模式与常见陷阱的完整清单 在现代C开发中设计模式是提升代码质量和可维护性的重要工具。然而即使是经验丰富的开发者在应用文档/教程软件架构创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考