Skip to content
 
 

Latest commit

 

History

11 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

hy3-proxy

把 WorkBuddy 客户端里免费的 hy3(腾讯混元 3,Hunyuan 3)反代成本地 OpenAI 兼容 API。

  • 上游:WorkBuddy 官方网关 https://copilot.tencent.com/v2/chat/completions
  • 鉴权(两层):
    • 客户端 → 本代理Authorization: Bearer <API_KEY>(未配置则启动时随机生成并写入 .env
    • 本代理 → 上游Authorization: Bearer <WorkBuddy accessToken> + X-User-Id
  • 端点:/v1/chat/completions/v1/responses(Responses 自动转换,非流式自动合并 SSE)、/v1/models(获取模型列表)
  • 特性:流式/非流式、工具调用、上下文裁剪(默认 180K,MAX_INPUT_TOKENS 可调)、启动自检(自动读登录态 / 生成密钥 / 释放端口 / 自检)

原理

WorkBuddy 客户端里 hy3 的免费额度(活动 hy3-free-trial-202608)通过官方网关提供服务。 本代理用你的 WorkBuddy 登录态(token + uid)直连官方网关,并转换为 OpenAI 兼容协议, 因此 Codex、Trae、Cherry Studio 等客户端可以直接使用。

配置

复制 .env.example.env

PORT=8910
UPSTREAM_URL=https://copilot.tencent.com/v2/chat/completions
API_KEY=
MAX_INPUT_TOKENS=180000
WB_ACCESS_TOKEN=
WB_USER_ID=
  • API_KEY:客户端调用本代理的鉴权密钥。留空时启动会自动生成 sk-xxxx 并写入 .env, 之后所有客户端请求都必须在 Authorization: Bearer <API_KEY> 中携带它(缺失/错误返回 401)。 想换密钥直接改 .env 里的 API_KEY 重启即可;想彻底关闭客户端鉴权可把 API_KEY 设为固定值并在客户端使用同样的值。
  • 模型固定为 hy3(对应免费通道活动模型),无需配置:对外 GET /v1/models 返回模型 hy3-chat(显示名 hy3,分组 hy3;ID 带 hy3- 前缀是为了让 Cherry Studio 等客户端 能推导出分组名,避免落到服务商的 UUID 分组);客户端请求里无论 model 传什么值, 都会统一改写为 hy3 再发往上游。
  • WB_ACCESS_TOKEN / WB_USER_ID:WorkBuddy 登录态。 代理启动时会自动从 WorkBuddy 客户端登录文件(%LOCALAPPDATA%\CodeBuddyExtension\Data\Public\auth\workbuddy-desktop.info)读取并写入 .env(仅 Windows,由 Node 直连读取,无需 powershell/hy3-env.ps1);也可手动填写。
  • token 过期后:先在 WorkBuddy 客户端登录一次,再重跑 start-hy3.bat

启动与测试

所有启动逻辑(读取 WorkBuddy 登录态、生成/持久化 API 密钥、释放被占用的端口、打印接入信息、自检 /v1/models)都在 proxy.js 内由 Node 完成,bat 只是 4 行启动器:

node proxy.js

Windows 一键启动(仅 chcp 65001 + node proxy.js无中文、无 powershell、无 .ps1,所有中文提示由 Node 控制台以 UTF-8 输出,规避了 bat 中文乱码问题):

start-hy3.bat

启动后控制台会直接打印三项接入信息(API 密钥 / API 地址 / 模型名称)并自检 /v1/models 是否返回 200。 如需完整对话测试,可另跑 node hy3-test.js(自动从 .env 读取 API_KEY 发一次 chat/completions):

node hy3-test.js

手动测试:

# API_KEY 取启动日志或 .env 中的值
curl http://127.0.0.1:8910/v1/models -H "Authorization: Bearer $API_KEY"
curl http://127.0.0.1:8910/v1/chat/completions -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" \
  -d '{"model":"hy3","messages":[{"role":"user","content":"ping"}],"stream":false}'
curl http://127.0.0.1:8910/v1/responses -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" \
  -d '{"model":"hy3","input":"ping","stream":false}'
# 未携带密钥会被拒绝:
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8910/v1/chat/completions   # -> 401

客户端配置:

Base URL:  http://127.0.0.1:8910/v1
API Key:   启动日志/.env 中的 API_KEY(如 sk-xxxx...)
Model:     hy3

日志

代理运行时会写入以下文件(位于项目下 log/ 目录):

文件 内容
log/hy3-debug.log 每条请求的元数据:路由、是否流式、模型、tools 数量、各消息角色/长度/前 160 字符、上游状态码、内容过滤标记,带 reqId 关联
log/hy3-error.log 结构化错误日志(JSON):代理内部异常(含 stack)、上游非 200 错误正文(upstream_body)、内容过滤命中,带 reqId 关联
log/hy3-requests.log 仅当请求带 tools 时记录完整请求体

代理的控制台输出(启动 banner、自检结果、警告)直接打印到运行 start-hy3.bat 的终端窗口。 每次收到客户端请求时还会实时打印通信内容:请求侧打印路由、是否流式、消息条数、估算输入 tokens、各消息角色与内容摘要;响应侧打印状态码、耗时、上游实际返回的 token 用量(in/out/total)与回复摘要。持久化日志见上表三个文件。

排障时,先用报错时间或客户端拿到的 req_xxx id 在 log/hy3-error.loglog/hy3-debug.log 中交叉定位同一次请求。

日志轮转log/hy3-debug.log / log/hy3-error.log / log/hy3-requests.log 在超过单文件大小上限、或跨天时会自动切卷,归档文件按日期标记命名(不再用 .1/.2):

  • 当天首次切卷:log/hy3-error.log.2026-08-18
  • 同一天多次切卷:追加时间后缀 log/hy3-error.log.2026-08-18-143500
  • 超过保留份数的最旧归档按日期自动删除

可通过环境变量调整:

MAX_LOG_BYTES=5242880     # 单文件上限(字节),默认 5MB(下限 64KB)
MAX_LOG_BACKUPS=30        # 保留的日期归档份数,默认 30(约一个月)

.envlog/ 目录(含全部日志与日期归档)已被 .gitignore 忽略,请勿提交凭证与日志。

说明与免责声明

  • hy3 免费活动有期限(hy3-free-trial-202608),结束时间以上游为准。
  • 上游仅支持流式(非流式请求返回 code 11101),本代理对非流式客户端自动合并 SSE。
  • 上游内容安全策略较严格,本代理会把 Codex 类 agent 系统提示替换为中立系统提示以避免误拦截。
  • 请遵守 WorkBuddy / 腾讯云相关服务条款;token 属于敏感信息,请勿公开。

License

MIT

About

Reverse proxy for WorkBuddy free hy3 (Tencent Hunyuan 3) via copilot.tencent.com - OpenAI-compatible chat/completions & responses API

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages