FyAgent代码实现原理:Rust本地代理引擎如何实现Claude、Codex与Gemini协议转换
【免费下载链接】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),仅供参考

相关新闻

Mongoose 6.14 源码剖析:绑定监听端口时 TaoToken 统一 Key 通道的接入配置

Mongoose 6.14 源码剖析:绑定监听端口时 TaoToken 统一 Key 通道的接入配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 19:11:17 阅读更多 →
InfluxDB到Doris数据同步实战:任务拆分与校验设计

InfluxDB到Doris数据同步实战:任务拆分与校验设计

先说结论:把 InfluxDB 里的时序数据同步到 Doris,这件事听起来像是“两个数据库之间导个数据”,但真正落地时,你面对的是一连串关于时间精度、Field 类型、调度依赖、数据倾斜的实际问题。我在离线开发平台上把这条链路跑通之后&a…

2026/10/11 19:11:17 阅读更多 →
舰船卫星图目标检测数据集构建与工程实践指南

舰船卫星图目标检测数据集构建与工程实践指南

简介:本资源是一套面向人工智能目标检测方向的舰船遥感图像数据集,适用于计算机视觉初学者、算法工程师及高校科研人员开展目标检测模型训练与验证。数据集基于卫星可见光成像,共1000张10241024 RGB彩色图像,涵盖“hang-mu”&…

2026/10/11 19:10:17 阅读更多 →

最新新闻

基于模型压缩的识别算法Python源码:蒸馏与剪枝实战

基于模型压缩的识别算法Python源码:蒸馏与剪枝实战

简介:这份资源是面向高校毕业设计与深度学习入门者的模型压缩识别算法Python源码包,聚焦知识蒸馏与剪枝两类主流压缩技术,帮助读者在有限算力下完成识别模型的轻量化改造与对比实验。包内共185个文件,以79个py源码为核心&#xff…

2026/10/12 10:02:52 阅读更多 →
小波神经网络在光伏辐照预测中的工程落地实践

小波神经网络在光伏辐照预测中的工程落地实践

简介:本资源是一篇发表于《可再生能源》期刊的学术论文,面向新能源、电力系统、人工智能交叉领域的研究者与工程技术人员,聚焦太阳能发电中关键的超短期辐照强度预测难题。论文提出一种融合小波分析与神经网络优势的WNN模型,针对春…

2026/10/12 10:02:52 阅读更多 →
数学证明的事件化记录:构建可追溯、可验证的AI推理过程

数学证明的事件化记录:构建可追溯、可验证的AI推理过程

1. 这不是“AI写证明”,而是让数学推理过程真正可追溯、可验证、可复盘的底层重构“事件模型下AI数学证明的事件化记录与透明性架构”——这个标题里没有一个字是虚的,它直指当前AI数学推理系统最痛的软肋:我们能看到结论,却看不见…

2026/10/12 10:02:52 阅读更多 →
轻型AI中台:解决中小企业重复录入与对账困难的工程化方案

轻型AI中台:解决中小企业重复录入与对账困难的工程化方案

1. 项目概述:为什么一个“轻型AI中台”能真正解决财务与运营一线的痛感“部署轻型AI中台,消除重复录入、消减对账困难”——这句话不是PPT里的口号,而是我去年在三家中小制造企业、两家连锁零售服务商现场蹲点三个月后,亲手推出来…

2026/10/12 10:02:52 阅读更多 →
Hive外部表映射HBase已有数据实战指南

Hive外部表映射HBase已有数据实战指南

1. 项目概述:为什么非得用 Hive 外部表去“看” HBase 已有数据? 在某次数据平台升级中,我接手了一个典型的老系统迁移任务:上游业务系统多年积累的用户行为日志,早已稳定写入 HBase 集群,表名 user_acti…

2026/10/12 10:02:52 阅读更多 →
three.js编辑器开发实战:从渲染循环到撤销重做的完整指南

three.js编辑器开发实战:从渲染循环到撤销重做的完整指南

1. 为什么我不建议你从零手写渲染循环很多人第一次接触 three.js 编辑器开发,脑子里蹦出来的第一个念头是"我要自己写一套渲染管线"。这个想法本身没错,但如果你真的从requestAnimationFrame开始一行行搭,大概率会在第三天卡在&quo…

2026/10/12 10:01:51 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →