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

37、【Agent】【OpenCode】本地代理分析(一)

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

背景

上篇 blog
【Agent】【OpenCode】本地代理(JavaScript 脚本)
详细分析了选择了 JavaScirpt 脚本作为本地代理,是基于开发效率,生态适配和使用场景的综合考虑,比如 JavaScript 与前端,IDE 插件生态天然契合,JSON 处理极其简单,然后解释了JSON.parse()得到的是 JS 对象,不能直接用于 HTTP 传输,需要先将 JS 对象转成字符串,此外,还有异步 IO 高效处理流式响应,零依赖快速启动等好处,所以对于临时调试,JS 是最轻量的选择,然后列举了下不适合 JavaScript 的场景,提到所有主流语言都能实现本地代理,选择取决于开发者的熟悉度和需求,没有最好的语言,只有最合适当前场景的工具,下面继续分析

OpenCode

OK,下面来分析这个本地代理的实现

// dashscope-proxy.jsconsthttp=require('http');consthttps=require('https');constserver=http.createServer((req,res)=>{console.log(`📥 Received${req.method}${req.url}`);if(req.method==='POST'&&req.url==='/v1/chat/completions'){letbody='';req.on('data',chunk=>body+=chunk);req.on('end',()=>{// 从原始请求中获取 Authorization 头constauthHeader=req.headers['authorization']||'';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)}};constproxyReq=https.request(options,(proxyRes)=>{res.writeHead(proxyRes.statusCode,proxyRes.headers);proxyRes.pipe(res);// 自动处理流式/非流式 + 自动 end()});proxyReq.on('error',(e)=>{console.error('Proxy error:',e.message);res.writeHead(502);res.end('Bad Gateway');});proxyReq.write(body);proxyReq.end();});return;}res.writeHead(404);res.end('Not Found');});server.listen(2048,'127.0.0.1',()=>{console.log('✅ DashScope proxy with full OpenCode & Ollama compatibility running on http://127.0.0.1:2048');});

该本地 HTTP 代理服务器可以接收来自 OpenCode(或其他兼容 OpenAI API 的客户端,不仅仅是 OpenCode)的请求,并将请求转发给阿里云 DashScope 的 API 兼容接口

首先是代理的整体结构

consthttp=require('http');consthttps=require('https');constserver=http.createServer((req,res)=>{// 处理每个进来的 HTTP 请求});server.listen(2048);// 假设监听在 127.0.0.1:2048

这里使用 Node.js 内置模块 http 创建一个本地 HTTP 服务器,该服务器监听本地的2048端口,所有发往http://127.0.0.1:2048的请求都会进入这个回调函数

进入服务器后,首先打印记录日志

console.log(`📥 Received${req.method}${req.url}`);

该日志会打印收到的请求方法(比如POST)和请求路径(比如/v1/chat/completions

然后这里只处理特定请求

if(req.method==='POST'&&req.url==='/v1/chat/completions'){// 处理特定请求}

这里只处理 OpenAI 风格的聊天请求,该条件(/v1/chat/completions)是 OpenCode 默认发送的 endpoint,其他请求(比如/v1/models)可以忽略,这里提到了 OpenAI 风格和 endpoint,它们都是现代 AI 开发的核心概念,下面详细解释下

首先是 Endpoint(端点),Endpoint 是模型 API 提供服务的具体 URL 地址,客户端通过 endpoint 向服务器发送请求,可以类比成餐厅的点菜单:

  • 餐厅 = 模型 API 服务商(比如 OpenAI,DashScope)
  • 菜单上的每道菜 = 一个 endpoint
  • 用户想点宫保鸡丁,就得告诉服务员,点这道/menu/kungpao-chicken

从技术角度,Endpoint 是 HTTP 请求的目标路径(URL Path),这个路径决定了服务器执行什么操作,常见的模型 API Endpoints 如下

功能OpenAI EndoiubtDashScope 兼容模型 Endpoint
聊天对话POST/v1/chat/completionsPOST/compatible-mode/v1/chat/completions
获取模型列表GET/v1/modelsGET/compatible-mode/v1/models
文本嵌入POST/v1/embeddingsPOST/compatible-mode/v1/embeddings

所以,这里的判断条件/v1/chat/completions就是一个 endpoint,是专门用于发起聊天请求的入口地址

OK,然后是 OpenAI 风格,是指遵循 OpenAI API 的请求格式,相应格式和 endpoint 设计规范的一套标准,由于由于 OpenAI 的 API 设计简洁,很流行,许多其他厂商(如阿里云 DashScope,Google,Gemini,Ollama,Llama.cpp 等)都提供了兼容 OpenAI API 的接口,让开发者无需该代码就能切换后端


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

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

相关文章:

  • 2026年家庭教育指导师报考指南:行业合规测评、官方授权机构筛选与避坑标准全解析 - 企业推荐官【官方】
  • 用快马AI快速原型一个网页版PS基础工具:从描述到可运行代码
  • 打造个人游戏串流中心:Sunshine开源方案全攻略
  • [技术突破]:Qwen-Image-Edit-Rapid-AIO如何重构图像编辑效率边界?
  • 告别混乱:用Alternative Mod Launcher重塑XCOM 2模组管理体验
  • 5步攻克AI到PSD无损转换:设计师必备的矢量分层工作流指南
  • 38、【Agent】【OpenCode】本地代理分析(二)
  • 实测梦幻动漫魔法工坊:用LoRA调整画风,轻松打造不同风格的动漫作品
  • 浪琴官方售后服务中心新址实地考察报告(2026年4月最新地址电话) - 亨得利官方服务中心
  • 避坑指南:淘晶驰串口屏文件浏览器控件中文乱码?用UTF8字库5分钟搞定!
  • 亨得利官方售后服务中心新址实地考察报告(2026年4月最新地址电话) - 亨得利官方服务中心
  • MogFace-large部署案例:嵌入式AI盒子(Jetson Orin)上轻量运行方案
  • ODrive自定义控制算法开发:从架构思维到高级应用
  • MyKeymap应用专属键盘映射配置指南
  • 面向人形机器人的弹热冷却技术:高效热管理解决方案
  • VoxCPM-1.5-WEBUI作品集:高音质语音合成效果大赏
  • 企业级应用权限架构设计与实践指南
  • AMD Ryzen处理器终极调优:SMU Debug Tool完全指南揭秘硬件性能潜力
  • StructBERT-Large镜像部署教程:GPU加速推理环境搭建指南
  • S7-200组态王在火电厂脱硫应用中的后处理产品:梯形图原理图及IO分配解析
  • 零基础入门:星图平台私有化部署Qwen3-VL:30B,Clawdbot飞书接入完整指南
  • 费城“敬畏部”:AI 与艺术融合的新奇沉浸式体验
  • 如何彻底解决Windows多显示器DPI缩放难题?SetDPI的技术实现与实战指南
  • 教师必备:用CosyVoice快速制作带语音讲解的理工科课件
  • python 文件管理库 Path 解析(详细基础)
  • 效率提升:用快马一键生成优化版快速排序模块,轻松应对大数据排序
  • (支援发出,转发需官方授权)某个名师大家可能还是一个女的自称“廉者不受嗟来之食”对自己对自己的学生和想要招(找)的学生都一样。
  • 2026年宠物口腔医生口碑推荐,狗狗洗牙/猫咪口腔/宠物牙科/狗狗拔牙/狗口腔溃疡诊疗/狗狗牙科,宠物口腔医生推荐 - 品牌推荐师
  • 如何用Depressurizer拯救混乱的Steam游戏库?3个高效管理技巧
  • OpenClaw与Python:构建高效自动化脚本,赋能复杂工作场景落地