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

39、【Agent】【OpenCode】本地代理分析(三)

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除

背景

上篇 blog
【Agent】【OpenCode】本地代理分析(二)
分析了 OpenAI 风格的核心特征:固定的 endpoint 路径/v1/chat/completions(所有的聊天请求都会发到这里),请求格式统一,统一的认证方式,统一的流式响应格式,由于 OpenCode 只发送 OpenAI 风格的 endpoint 和格式,所以本地代理这里必须监听/v1/chat/completions,接收 OpenAI 格式的 JSON,再转发给 DashScope,然后收到指定请求/v1/chat/completions时,开始拼接 request body,该本地代理考虑了 HTTP request body 可能是分块传输的形式,通过监听 data 事件把所有数据块拼成完整的字符串 body,然后介绍了分块传输的概念,并提到分块传输时,不会同时出现 Content-Length 字段,最后介绍了分块传输的适用场景,下面继续分析

OpenCode

上篇 blog 提到了分块传输的适用场景,当然,HTTP 请求也不一定要分块传输,如果提前知道 body 的长度,主动设置 Content-Length,也是可以的,此时请求就不会使用 chunked,比如

constbody=JSON.stringify({...});req.setHeader('Content-Length',Buffer.byteLength(body));req.write(body);// 一次性发送

最后再总结下

  • 分块传输(Chunked):把数据切成多块发送,适合一边生成,一边传输的场景
  • 代理需考虑拼接场景:网络传输可能一次只收到一部分(一个 chunk),也就是分块传输,代理应该综合考虑所有可能场景
  • Node.js 的data事件:每次收到一个数据库,就触发一次data事件,需手动拼接
  • Node.js 的end事件:所有块接收完成,此时可以安全处理完整 request body
  • 对开发者透明,Node.js 已处理完底层 chunk 格式,只需拼接字符串

OK,回到拼接 request body 这里

letbody='';req.on('data',chunk=>body+=chunk);req.on('end',()=>{...});

上面介绍了分块传输的相关内容,下面再看另一个点:箭头函数

chunk=>body+=chunk

这是 JavaScript 中的一种简洁函数写法,这种写法是下面这种传统写法的简写

letbody='';req.on('data',function(chunk){body=body+chunk;});

所以chunk => body += chunk就是一个函数,其作用是把收到的数据块 chunk 拼接到 body 后面,下面来详细拆解其中的语法点

  • chunk函数参数名(叫datapartx都行,名字不重要),当 HTTP 请求发送数据时,Node.js 会分多次调用这个函数,每次调用时,都传入一个数据片断(也就是这里的chunk
  • =>:表示这是一个箭头函数,其左边是参数,右边是函数要做的事
  • body += chunk:函数体内容,body = body + chunk的简写

举个例子

  • 初始:body = ""
  • 第一次收到chunk = 'Hello'body = ‘Hello’
  • 第二次收到chunk = 'World'body = Hello World

其核心思想在于,每当有新数据到来时,就将其追加到body这个变量里,这也是 Node.js 的语法特性所要求的,req.on(‘data’,...)需要开发者传入一个回调函数,这个回调函数告诉 Node.js,当数据到达时,需要执行回调函数里的操作,而这里的箭头函数可以让代码更简洁,更清晰:

  • 冗长写法
req.on('data',function(dataChunk){body=body+dataChunk;});
  • 简洁写法
req.on('data',chunk=>body+=chunk);

OK,再举个类似的例子,比如

x=>x*2

等价于

function(x){returnx*2;}

OK,再回到本地代理的实现部分,下面是end事件的处理


OK,本篇先到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!更多内容见下篇 blog
【Agent】【OpenCode】本地代理分析(四)

http://www.jsqmd.com/news/596495/

相关文章:

  • AutoUnipus学习效率工具:提升在线学习体验的智能辅助方案
  • seo竞价排名优化需要定期调整和优化的主要原因是什么_seo竞价排名优化的基本概念是什么
  • 毕业论文答辩新选择:10款AI辅助工具(含爱毕业aibiye)与模板测评
  • 40、【Agent】【OpenCode】本地代理分析(四)
  • 3大理由告诉你为什么7-Zip是Windows文件压缩的最佳选择
  • 利用快马AI快速构建Java八股文交互式学习原型,加速面试准备
  • 千问3.5-2B模型轻量化与加速实践:利用.accelerate库优化推理
  • Java开发者实战:集成霜儿-汉服-造相Z-Turbo的SpringBoot应用
  • 智能化学术答辩:10款高效AI工具推荐及专业模板评测
  • GetQzonehistory:QQ空间历史说说永久备份终极解决方案
  • 手把手教程:Qwen-Image快速部署,小白也能轻松玩转AI绘画
  • 深度解析:Nintendo Switch Tool - 一站式Switch文件格式处理解决方案
  • 3大核心功能重塑英雄联盟游戏体验:League Akari智能工具箱深度解析
  • 从写作到答辩:10款AI工具(含爱毕业)与权威模板实战测评
  • 如何用bypass-paywalls-chrome-clean轻松访问付费内容?5步完整指南
  • 《AI智脉速递》2026 年 3月22日 - 4月4日
  • 雷达官方售后服务中心新址实地考察报告(2026年4月最新地址电话) - 亨得利官方服务中心
  • Postman便携版:Windows免安装API开发工具的新选择
  • E-Marker芯片:快充时代的智能通信官
  • 无锡名表真假鉴定全攻略:百达翡丽等五十品牌防伪数据与六大城市鉴别实战 - 时光修表匠
  • 如何让老照片焕发新生?图像超分技术的4大突破与分辨率增强实践
  • 告别手动评分:用快马AI为Skill-Vetter注入自动评估效率
  • 从零理解Linux定时器:timerfd_create函数详解与常见问题排查
  • 3步精通N_m3u8DL-RE:跨平台流媒体下载终极教程
  • 利用快马平台快速构建trea技术概念的可交互演示原型
  • 中微半导体冲刺港股:年营收11亿 利润2.8亿 周彦套现3.47亿
  • 4步实现FF14副本动画智能跳过:CutsceneSkip插件全解析
  • 不只是复现:用lviorf分支在Ubuntu 20.04上轻松适配你的雷达与相机运行LVI-SAM
  • UniApp + Node.js 搞定远程摄像头监控:保姆级代码与避坑指南
  • Windows Defender Remover:安全组件管理工具深度解析