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

40、【Agent】【OpenCode】本地代理分析(四)

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

背景

上篇 blog
【Agent】【OpenCode】本地代理分析(三)
提到了 HTTP 请求也不一定要分块传输,如果提前知道 body 的长度,主动设置 Content-Length 也是可以的,然后总结了下分块传输的几个关键点,如拼接,data事件,end事件等,提到 Node.js 已处理完底层 chunk 格式,data事件只需拼接字符串即可,接着继续分析了另一个点:箭头函数,提到这是 JavaScript 中简洁函数的写法,其作用就是把收到的数据块 chunk 拼接到 body 后面,然后详细分析了其中的语法点,提到箭头函数可以让代码更简洁,更清晰,最后对比了箭头函数和传统写法的区别,下面继续分析

OpenCode

下面看end事件的处理

这里首先获取 Authorization 头部信息

constauthHeader=req.headers['authorization']||'';

这里有个 JavaScript 的语法细节,代理会尝试从请求头部信息中读取 authorization 字段,如果该字段不存在(或为假值),就用空字符串代替,在 JavaScript 中,||是逻辑或操作,对于表达式a || b,如果a是真值(truthy),返回a,否则返回b,如下情况会被视为 falsy

  • undefinednull''0-0NaNfalse

所以

req.headers['authorization']||''

就等价于

if(req.headers['authorization']is not falsy){use req.headers['authorization']}else{use''}

这是种防御性编程技巧,如果客户端没有 Authorization 头,那么

req.headers['authorization']// → undefined

如果没有后面的|| '',直接写

constauthHeader=req.headers['authorization'];

那么authHeader就是undefined

OpenCode 通常会设置该字段AuthorizationBearer sk-xxxxxx,Bearer 含义如下,表示 API Key 持有者


这里本地代理选择了直接透传

'Authorization':authHeader,// 直接透传!

这里的设计意图是让客户端 OpenCode 自己提供 DashScope 真实的 API Key,代理不做硬编码,只是透传

OK,下面来详细看下这里的options

constoptions={hostname:'dashscope.aliyuncs.com',port:443,path:'/compatible-mode/v1/chat/completions',method:'POST',headers:{'Authorization':authHeader,'Content-Type':'application/json','Content-Length':Buffer.byteLength(body)}};

这个options对象是 Node.js 中使用的内置模块https.request发起 HTTPS 请求时必需的配置参数,其中定义了要向哪个服务器,用什么方式,发送什么样的请求,这里的配置将会建立一个到阿里云 DashScope 的 HTTPS 连接

  • hostname: 'dashscope.aliyuncs.com':这里是目标服务器的主机名(域名),DashScope 是阿里云提供的大模型服务平台,其 API 域名就是dashscope.aliyuncs.com注意,这里不能写协议(比如https://),因为https.request已经隐含使用 HTTPS
  • port: 443目标服务器监听的端口号,443 是 HTTPS 协议的默认端口,所有标准的 HTTPS 网站(包括 API)都使用 443,如果省略porthttps.request默认也会用 443,所以这行其实可以省略,但显式写出来更清晰
  • path: '/compatible-mode/v1/chat/completions':请求的 URL 路径(注意,不包含域名和协议),该路径是 DashScope 提供的 OpenAI 兼容模式,这样虽然 OpenCode 插件发送的是POST /v1/chat/completions,代理只需把路径改成/compatible-mode/v1/chat/completions就可以对接 DashScope
  • method:'POST'HTTPS 的请求方法,因为聊天窗口需要发送消息内容(在 request body 中),而GET无法携带 body,所以必须用 POST(或 PUT,但行业惯例是 POST)

OK,本篇先到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!更多内容见下篇 blog

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

相关文章:

  • 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:安全组件管理工具深度解析
  • OpenClaw自动化效率对比:Qwen3.5-9B-AWQ-4bit与GPT-4V多模态任务实测
  • OpenClaw隐私保护:Qwen3-14B本地化处理的4道安全防线
  • MogFace模型Matlab仿真验证:快速原型设计与算法对比
  • 创新实训第二周工作总结