当前位置: 首页 > article >正文

CKKS 同态加密数学基础推导诺

背景StreamJsonRpc 是微软官方维护的用于 .NET 和 TypeScript 的 JSON-RPC 通信库以其强大的类型安全、自动代理生成和成熟的异常处理机制著称。在 HagiCode 项目中为了通过 ACP (Agent Communication Protocol) 与外部 AI 工具如 iflow CLI、OpenCode CLI进行通信并消除早期自定义 JSON-RPC 实现带来的维护成本和潜在 Bug项目决定集成 StreamJsonRpc。然而在集成过程中遇到了流式 JSON-RPC 特有的挑战特别是在处理代理目标绑定和泛型参数识别时。为了解决这些痛点我们做了一个大胆的决定整个构建系统推倒重来。这个决定带来的变化可能比你想象的还要大——稍后我会具体说。关于 HagiCode先介绍一下本文的主角项目如果你在开发中遇到过这些烦恼多项目、多技术栈构建脚本维护成本高CI/CD 流水线配置繁琐每次改都要查文档跨平台兼容性问题层出不穷想让 AI 帮忙写代码但现有工具不够智能那么我们正在做的 HagiCode 可能你会感兴趣。HagiCode 是什么一款 AI 驱动的代码智能助手支持多语言、跨平台的代码生成与优化内置游戏化机制让编码不再枯燥为什么在这里提它本文分享的 StreamJsonRpc 集成方案正是我们在开发 HagiCode 过程中实践总结出来的。如果你觉得这套工程化方案有价值说明我们的技术品味还不错——那么 HagiCode 本身也值得关注一下。想了当前项目处于 ACP 协议集成的关键阶段面临着以下几个技术痛点和架构挑战1. 自定义实现的局限原有的 JSON-RPC 实现位于?src/HagiCode.ClaudeHelper/AcpImp/包含?JsonRpcEndpoint?和?ClientSideConnection?等组件。维护这套自定义代码成本高且缺乏成熟库的高级功能如进度报告、取消支持。2. StreamJsonRpc 集成障碍在尝试将现有的?CallbackProxyTarget?模式迁移到 StreamJsonRpc 时发现?_rpc.AddLocalRpcTarget(target)?方法无法识别通过代理模式创建的目标。具体表现为StreamJsonRpc 无法自动将泛型类型?T?的属性拆分为 RPC 方法参数导致服务器端无法正确处理客户端发起的方法调用。3. 架构分层混乱现有的?ClientSideConnection?混合了传输层WebSocket/Stdio、协议层JSON-RPC和业务层ACP Agent 接口导致职责不清且存在?AcpAgentCallbackRpcAdapter?方法绑定缺失的问题。4. 日志缺失WebSocket 传输层缺少对原始 JSON 内容的日志输出导致在调试 RPC 通信问题时难以定位是序列化问题还是网络问题。解决针对上述问题我们采用了以下系统化的解决方案从架构重构、库集成和调试增强三个维度进行优化1. 全面迁移至 StreamJsonRpc移除旧代码删除?JsonRpcEndpoint.cs、AgentSideConnection.cs?及相关的自定义序列化转换器JsonRpcMessageJsonConverter?等。集成官方库引入?StreamJsonRpc?NuGet 包利用其?JsonRpc?类处理核心通信逻辑。抽象传输层定义?IAcpTransport?接口统一处理?WebSocket?和?Stdio?两种传输模式确保协议层与传输层解耦。// IAcpTransport 接口定义public interface IAcpTransport{Task SendAsync(string message, CancellationToken cancellationToken default);Task ReceiveAsync(CancellationToken cancellationToken default);Task CloseAsync(CancellationToken cancellationToken default);}// WebSocket 传输实现public class WebSocketTransport : IAcpTransport{private readonly WebSocket _webSocket;public WebSocketTransport(WebSocket webSocket){_webSocket webSocket;}// 实现发送和接收方法// ...}// Stdio 传输实现public class StdioTransport : IAcpTransport{private readonly StreamReader _reader;private readonly StreamWriter _writer;public StdioTransport(StreamReader reader, StreamWriter writer){_reader reader;_writer writer;}// 实现发送和接收方法// ...}2. 修复代理目标识别问题分析?CallbackProxyTarget检查现有的动态代理生成逻辑确定 StreamJsonRpc 无法识别的根本原因通常是因为代理对象没有公开实际的方法签名或者使用了 StreamJsonRpc 不支持的参数类型。重构参数传递将泛型属性拆分为明确的 RPC 方法参数。不再依赖动态属性而是定义具体的 Request/Response DTO数据传输对象确保 StreamJsonRpc 能通过反射正确识别方法签名。// 原有的泛型属性方式public class CallbackProxyTarget{public Func Callback { get; set; }}// 重构后的具体方法方式public class ReadTextFileRequest{public string FilePath { get; set; }}public class ReadTextFileResponse{public string Content { get; set; }}public interface IAcpAgentCallback{Task ReadTextFileAsync(ReadTextFileRequest request);// 其他方法...}使用?Attach?替代?AddLocalRpcTarget在某些复杂场景下手动代理?JsonRpc?对象并处理?RpcConnection?可能比直接添加目标更灵活。3. 实现方法绑定与日志增强实现?AcpAgentCallbackRpcAdapter确保该组件显式实现 StreamJsonRpc 的代理接口将 ACP 协议定义的方法如?ReadTextFileAsync映射到 StreamJsonRpc 的回调处理器上。集成日志记录在 WebSocket 或 Stdio 的消息处理管道中拦截并记录 JSON-RPC 请求和响应的原始文本。利用?ILogger?在解析前和序列化后输出原始 payload以便排查格式错误。// 日志增强的传输包装器public class LoggingAcpTransport : IAcpTransport{private readonly IAcpTransport _innerTransport;private readonly ILogger _logger;public LoggingAcpTransport(IAcpTransport innerTransport, ILogger logger){_innerTransport innerTransport;_logger logger;}public async Task SendAsync(string message, CancellationToken cancellationToken default){_logger.LogTrace(Sending message: {Message}, message);await _innerTransport.SendAsync(message, cancellationToken);}public async Task ReceiveAsync(CancellationToken cancellationToken default){var message await _innerTransport.ReceiveAsync(cancellationToken);_logger.LogTrace(Received message: {Message}, message);return message;}public async Task CloseAsync(CancellationToken cancellationToken default){_logger.LogDebug(Closing connection);await _innerTransport.CloseAsync(cancellationToken);}}4. 架构分层重构传输层 (AcpRpcClient)封装 StreamJsonRpc 连接负责?InvokeAsync?和连接生命周期管理。public class AcpRpcClient : IDisposable{private readonly JsonRpc _rpc;private readonly IAcpTransport _transport;public AcpRpcClient(IAcpTransport transport){_transport transport;_rpc new JsonRpc(new StreamRpcTransport(transport));_rpc.StartListening();}public async Task InvokeAsync(string methodName, object parameters){return await _rpc.InvokeAsync(methodName, parameters);}public void Dispose(){_rpc.Dispose();_transport.Dispose();}// StreamRpcTransport 是对 IAcpTransport 的 StreamJsonRpc 适配器private class StreamRpcTransport : IDuplexPipe{// 实现 IDuplexPipe 接口// ...}}协议层 (IAcpAgentClient?/?IAcpAgentCallback)定义清晰的 client-to-agent 和 agent-to-client 接口移除?Func?这种循环依赖的工厂模式改用依赖注入或直接注册回调。实践基于 StreamJsonRpc 的最佳实践和项目经验以下是实施过程中的关键建议1. 强类型 DTO 优于动态对象StreamJsonRpc 的核心优势在于强类型。不要使用?dynamic?或?JObject?传递参数。应为每个 RPC 方法定义明确的 C# POCO 类作为参数。这不仅解决了代理目标识别问题还能在编译时发现类型错误。示例将?CallbackProxyTarget?中的泛型属性替换为?ReadTextFileRequest?和?WriteTextFileRequest?等具体类。2. 显式声明 Method Name使用?[JsonRpcMethod]?特性显式指定 RPC 方法名称不要依赖默认的方法名映射。这可以防止因命名风格差异如 PascalCase vs camelCase导致的调用失败。public interface IAcpAgentCallback{[JsonRpcMethod(readTextFile)]Task ReadTextFileAsync(ReadTextFileRequest request);[JsonRpcMethod(writeTextFile)]Task WriteTextFileAsync(WriteTextFileRequest request);}3. 利用连接状态回调StreamJsonRpc 提供了?JsonRpc.ConnectionLost?事件。务必监听此事件以处理进程意外退出或网络断开的情况这比单纯依赖 Orleans 的 Grain 失效检测更及时。_rpc.ConnectionLost (sender, e) {_logger.LogError(RPC connection lost: {Reason}, e.ToString());// 处理重连逻辑或通知用户};4. 日志分层记录Trace 级别记录完整的 JSON Request/Response 原文。Debug 级别记录方法调用栈和参数摘要。注意确保日志中不包含敏感的 Authorization Token 或大文件内容的 Base64 编码。5. 处理流式传输的特殊性StreamJsonRpc 原生支持?IAsyncEnumerable。在实现 ACP 的流式 Prompt 响应时应直接使用?IAsyncEnumerable?而不是自定义的分页逻辑。这能极大简化流式处理的代码量。public interface IAcpAgentCallback{[JsonRpcMethod(streamText)]IAsyncEnumerable StreamTextAsync(StreamTextRequest request);}6. 适配器模式 (Adapter Pattern)保持?ACPSession?和?ClientSideConnection?的分离。ACPSession?应专注于 Orleans 的状态管理和业务逻辑如消息入队通过组合而非继承的方式使用 StreamJsonRpc 连接对象。总结通过全面集成 StreamJsonRpcHagiCode 项目成功解决了原自定义实现的维护成本高、功能局限性和架构分层混乱等问题。关键改进包括采用强类型 DTO 替代动态属性提高了代码的可维护性和可靠性实现了传输层抽象和协议层分离提升了架构的清晰性增强了日志记录功能便于排查通信问题琶履切滞

相关文章:

CKKS 同态加密数学基础推导诺

背景 StreamJsonRpc 是微软官方维护的用于 .NET 和 TypeScript 的 JSON-RPC 通信库,以其强大的类型安全、自动代理生成和成熟的异常处理机制著称。在 HagiCode 项目中,为了通过 ACP (Agent Communication Protocol) 与外部 AI 工具(如 iflow …...

1979年11月3日晚上21-23点出生性格、运势和命运

在1979年11月3日晚上21 - 23点出生之人,其性格往往有着独特的烙印。这个时间段出生的人,性格多沉稳内敛,有着自己的思考方式和行事准则。他们通常具备较强的观察力,能敏锐地察觉到周围环境的细微变化,在与人交往中&…...

MOOTDX终极指南:免费构建你的股票量化分析系统

MOOTDX终极指南:免费构建你的股票量化分析系统 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 你是否曾因股票数据获取困难而放弃量化分析的想法?是否被高昂的数据费用吓退…...

2026年黑龙江市场,这些专业装修公司值得你深入了解!

在黑龙江装修市场,选择一家靠谱的装修公司至关重要。下面为大家深入分析几家值得关注的装修公司,其中为尚奢享凭借其独特优势在市场中脱颖而出。为尚奢享:施工与服务双优典范为尚奢享即哈尔滨为尚装饰设计有限公司,成立十年来&…...

itop3-基于rockylinux8的itsm工具安装部署

目录 1.LAMP环境部署 1.1准备工作 1.2下载安装脚本 1.3使用自动模式安装lamp 1.4运维信息 2.itop安装 2.1itop下载 2.2配置itop 1.LAMP环境部署 https://www.lamp.sh/autoinstall.html 1.1准备工作 [rootitop3 ~]# yum -y install wget git Upgraded: wget-1.19.5-1…...

如何高效使用TrollInstallerX:从安装到精通的完整指南

如何高效使用TrollInstallerX:从安装到精通的完整指南 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 你是否曾经希望在未越狱的iOS设备上自由安装第三方应用…...

魔兽争霸3终极优化指南:如何免费提升游戏性能与兼容性

魔兽争霸3终极优化指南:如何免费提升游戏性能与兼容性 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 你是否还在为魔兽争霸3的卡顿、画面…...

Linux内核中的文件系统缓存机制详解

Linux内核中的文件系统缓存机制详解 引言 文件系统缓存是Linux内核中提高文件IO性能的重要机制,它通过将文件数据缓存在内存中,减少了对磁盘的直接访问,显著提升了文件操作的速度。本文将深入探讨Linux内核中的文件系统缓存机制&#xff0c…...

终极指南:使用PowerShell一键安装Windows包管理器WinGet

终极指南:使用PowerShell一键安装Windows包管理器WinGet 【免费下载链接】winget-install Install WinGet using PowerShell! Prerequisites automatically installed. Works on Windows 10/11 and Server 2019/2022. 项目地址: https://gitcode.com/gh_mirrors/w…...

3大核心优势解析:Dell G15终极散热控制解决方案

3大核心优势解析:Dell G15终极散热控制解决方案 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 对于众多Dell G15游戏本用户来说,原厂A…...

人工智能赋能软件开发:基于PyTorch 2.8的AI编程助手本地部署

人工智能赋能软件开发:基于PyTorch 2.8的AI编程助手本地部署 1. 为什么需要私有AI编程助手 想象一下这样的场景:凌晨两点,你正在赶一个紧急项目,遇到一个复杂的算法问题卡壳了。这时候如果有个懂行的搭档能随时提供建议该多好&a…...

SPIRAN ART SUMMONER步骤详解:祈祷词编写→同步率调节→唤醒祈之子全流程

SPIRAN ART SUMMONER步骤详解:祈祷词编写→同步率调节→唤醒祈之子全流程 1. 引言:从“输入提示词”到“唤醒幻光”的仪式 如果你玩过《最终幻想10》,一定对那个充满幻光虫和祈之子的世界印象深刻。现在,想象一下,你…...

Pixel Script Temple 环境配置详解:Anaconda虚拟环境管理最佳实践

Pixel Script Temple 环境配置详解:Anaconda虚拟环境管理最佳实践 1. 为什么需要虚拟环境? 在开始之前,我们先聊聊为什么需要虚拟环境。想象一下,你正在开发一个Python项目,突然发现新安装的包和之前的项目冲突了&am…...

MedGemma医学影像分析效果展示:看AI如何专业解读X光片

MedGemma医学影像分析效果展示:看AI如何专业解读X光片 1. 引言:当AI遇见医学影像 想象你是一位刚入行的放射科住院医师,面对一张复杂的胸部X光片,需要判断是否存在早期肺炎征象。传统上,这需要多年经验积累&#xff…...

PyTorch 2.8深度学习镜像保姆级教程:/workspace/output结果目录自动归档方案

PyTorch 2.8深度学习镜像保姆级教程:/workspace/output结果目录自动归档方案 1. 镜像环境概述 PyTorch 2.8深度学习镜像基于RTX 4090D 24GB显卡和CUDA 12.4深度优化,为各类AI任务提供开箱即用的开发环境。这个镜像特别适合需要高性能计算资源的深度学习…...

AIGlasses_for_navigation卷积神经网络(CNN)视觉特征提取效果深度展示

AIGlasses_for_navigation卷积神经网络(CNN)视觉特征提取效果深度展示 最近几年,智能导航辅助设备的概念越来越火,从手机地图到车载导航,再到一些更前沿的穿戴式设备。其中,结合了人工智能的眼镜类产品&am…...

龙芯k - 走马观碑组VLLX驱动移植慌

一、什么是urllib3? urllib3 是一个用于处理 HTTP 请求和连接池的强大、用户友好的 Python 库。 它可以帮助你: 发送各种 HTTP 请求(GET, POST, PUT, DELETE等)。 管理连接池,提高网络请求效率。 处理重试和重定向。 支…...

OpenAI SDK 智能体 (Agentic AI) 的 handoff (任务转交) 和 as_tool(智能体即工具) 的使用

本文为Agentic AI所需的大 模型 API调用 的一些API示范,注重于使用SCNet以及DeepSeek的基于OpenAI 以及 OpenAI SDK 的 API调用。本文为公益类代码,由DeepSeek辅助生成,经过实例测试。 有关SCNet和DeepSeek API的调用,见原文 ht…...

一文搞懂Autosar DEM中的DTC生命周期:从检测到老化的完整流程解析

Autosar DEM中DTC生命周期的深度解析:从故障检测到智能老化的全流程实战指南 在汽车电子系统的故障诊断领域,DTC(Diagnostic Trouble Code)就像车辆的"健康体检报告",而Autosar DEM(Diagnostic …...

CentOS7.9下Ollama安装避坑指南:从Python3.8升级到Docker部署全流程

CentOS7.9下Ollama部署实战:从Python升级到容器化避坑全记录 当你在生产环境遇到CentOS7.9这样的"老将"系统时,部署现代AI工具链往往像在古董电脑上跑最新游戏——各种兼容性问题接踵而至。最近我在为一家金融机构升级他们的机器学习平台时就…...

Harness到底是什么?

一、大白话定义:理解Harness的底层隐喻 Harness本义为马具、缰绳,映射到AI领域,它不属于全新算法或大模型,而是包裹在原生大模型外层,用于管控智能体全链路运行的工程闭环体系。 可以用通俗逻辑对照: 原…...

如何在Windows和Linux上快速免费解锁VMware的macOS虚拟机支持

如何在Windows和Linux上快速免费解锁VMware的macOS虚拟机支持 【免费下载链接】unlocker VMware Workstation macOS 项目地址: https://gitcode.com/gh_mirrors/unloc/unlocker 想在VMware中运行macOS虚拟机吗?VMware解锁工具是您的终极解决方案&#xff01…...

**元宇宙社交新范式:基于Rust 构建去中心化虚拟身份系统**在元宇宙浪潮

元宇宙社交新范式:基于 Rust 构建去中心化虚拟身份系统 在元宇宙浪潮席卷全球的今天,社交不再是简单的文字与图像传递,而是沉浸式、可交互、可验证的身份空间构建。传统社交平台依赖中心化服务器认证用户身份,存在隐私泄露、数据孤…...

Qwen3-TTS-12Hz-1.7B-Base效果展示:俄语文学朗诵与科技文献朗读对比

Qwen3-TTS-12Hz-1.7B-Base效果展示:俄语文学朗诵与科技文献朗读对比 声音克隆:Qwen3-TTS-12Hz-1.7B-Base 1. 多语言语音合成的突破 Qwen3-TTS-12Hz-1.7B-Base是一个支持10种主要语言的语音合成模型,包括中文、英文、日文、韩文、德文、法文、…...

如何轻松管理跨平台游戏模组:XXMI Launcher终极指南

如何轻松管理跨平台游戏模组:XXMI Launcher终极指南 【免费下载链接】XXMI-Launcher Modding platform for GI, HSR, WW and ZZZ 项目地址: https://gitcode.com/gh_mirrors/xx/XXMI-Launcher 如果你正在寻找一个简单、高效且功能强大的游戏模组管理解决方案…...

如何彻底移除Windows Defender:完整权限修复与系统优化指南

如何彻底移除Windows Defender:完整权限修复与系统优化指南 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_mirror…...

SeqGPT-560M零样本NLP实战:从Prompt设计到结果解析的完整链路

SeqGPT-560M零样本NLP实战:从Prompt设计到结果解析的完整链路 你是不是也遇到过这样的场景?拿到一堆文本数据,想快速把它们分个类,或者从里面提取出关键信息,比如人名、公司名、事件。传统方法要么需要写一堆复杂的规…...

Stable Yogi Leather-Dress-Collection 模型蒸馏与轻量化部署探索

Stable Yogi Leather-Dress-Collection 模型蒸馏与轻量化部署探索 想不想在手机或者树莓派这样的小设备上,也能跑起来 Stable Yogi 这样的图片生成模型,让它为你设计皮革裙装?这听起来有点天方夜谭,毕竟这类模型动辄几十GB&#…...

Flutter结合高德API实现智能周边搜索与动态展示

1. 环境准备与基础配置 在开始Flutter与高德地图API的集成前,我们需要先搭建好开发环境。我推荐使用Flutter 2.5版本,这个版本对地图插件的兼容性更好。安装完Flutter SDK后,记得在pubspec.yaml中添加以下关键依赖: dependencie…...

三步搞定B站视频转文字:从链接到文字稿的智能转换方案

三步搞定B站视频转文字:从链接到文字稿的智能转换方案 【免费下载链接】bili2text Bilibili视频转文字,一步到位,输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 还在为观看B站视频时无法快速记录重点内容而…...