OrcaTerm Model Proxy
把 OrcaTerm 网页版的免费模型接入 DeepSeek Harness(DSH),支持工具调用与图片识别。
本项目与腾讯云 / OrcaTerm 官方无关,是一个第三方集成插件。使用前请自行确认符合 OrcaTerm 的服务条款。
功能
- 接入 8 个免费模型:DeepSeek V4.1 Flash / V4 Flash / V4 Pro、Kimi K3、GLM 5.3 Flash / 5.3 / 5.2、Hunyuan 3
- 凭证自动续期:只需配置一次,之后长期自动续期,不需要反复更新
- 工具调用:DSH 注册的工具由本机执行,模型可以读取文件、执行命令等
- 图片识别:可以把图片发给模型(DeepSeek V4.1 Flash、Kimi K3 支持;GLM 5.3 不接受图片)
- 可视化设置面板:模型选择、推理强度、账号状态、额度查询、调用统计
安装
从 GitHub 安装(推荐)
dsh plugin --profile desktop add github:lyp0709/orcaterm-model-proxy
从本地目录安装
dsh plugin --profile desktop add "D:\path\to\orcaterm-model-proxy"
或者使用 DSH 的插件管理器:设置 → 插件 → 安装本地插件,选择目录。
交给 AI 助手
在 DSH 里直接说:
帮我安装这个插件:github.com/lyp0709/orcaterm-model-proxy
安装完成后重启 DSH。
本插件零运行时依赖,安装时不需要构建步骤。
配置凭证(一键登录)
插件需要 OrcaTerm 的登录凭证。只需登录一次,之后自动续期。
- 打开 DSH 设置 → 找到 OrcaTerm 面板(登录区块在最上面)
- 点 「一键登录」
- 插件自动弹出一个独立的浏览器窗口(与日常浏览器完全隔离,不影响你正在用的)
- 在这个窗口里用腾讯云账号登录(支持微信扫码、QQ、GitHub、账号密码等)
- 登录成功后无需操作 —— 插件自动检测并读取凭证,然后关闭窗口
- 面板显示「登录成功,凭证已生效」即完成
成功后会有明显提示,并显示识别到的账号和凭证有效期。
自动登录的实现
浏览器把 Cookie 加密存储(Chrome 127+ / Edge 新版使用 App-Bound Encryption,密钥与浏览器进程身份绑定),第三方进程无法解密。但浏览器自己可以。
插件的做法:
- 用独立 profile 启动 Edge/Chrome,开启
--remote-debugging-port - 导航到
orcaterm.ai/terminal,让用户完成登录 - 通过 CDP 的
Network.getCookies读取__Secure-ot_session - 拿到后立即关闭浏览器并保存凭证
这个过程只读取 orcaterm.ai 一个域名的 Cookie,不触碰用户日常浏览器数据。
手动方式(自动登录不可用时)
- 点「手动输入」展开
- 点「打开登录页」,用浏览器登录
- 按
F12→ Application 标签 → Cookies → 选中https://orcaterm.ai - 找到
__Secure-ot_session,双击 Value 列全选复制(约 80 个字符) - 粘贴到输入框,点「保存并校验」
提示:也可以直接复制整条 Cookie 请求头,插件会自动提取需要的部分。
关于账号
- 需要一个腾讯云账号。首次使用腾讯云可能需要完成实名认证等前置步骤。
- OrcaTerm 目前提供免费额度(AI 功能为单一额度池,不按模型区分)。
使用
配置完成后,在 DSH 的模型选择器里就能看到 OrcaTerm 提供的模型。
设置面板里还可以调整:
| 选项 | 说明 |
|---|---|
| 默认模型 | 未指定时使用的模型 |
| 推理强度 | low / medium / high |
| 显示思考过程 | 是否显示模型的推理过程 |
| 工具调用 | 是否允许模型使用 DSH 的工具 |
| 图片识别 | 是否把图片发给模型 |
| 失败重试 | 网络错误、限流时的重试次数 |
| 备用模型 | 主模型失败时自动切换 |
| 超长会话裁剪 | 历史超过阈值时自动丢弃最老对话;可关闭 |
上下文与长度限制
重要结论:服务端容量很大,真正的瓶颈是模型注意力。
以下数据全部来自实测,测试方法见文末。
容量:至少 120 万字符
| 档位(目标 token) | 实际字符数 | 请求体 | 耗时 | 结果 |
|---|---|---|---|---|
| 256k | 300,331 | 0.86 MB | 13–19s | ✅ HTTP 200 |
| 500k | 600,331 | 1.72 MB | 19–23s | ✅ HTTP 200 |
| 1M | 1,200,331 | 3.43 MB | 15–16s | ✅ HTTP 200 |
三档全部正常返回,既不报超限,也不静默截断 —— 验证方式是在文档首部和尾部各埋一个标记,两处都能被模型读到。
可靠性:约 20 万字符是上限
在 600,000 字符的文档里,把标记放在不同位置,看模型能否找到:
| 位置 | 1% | 2% | 5% | 10% | 20% | 30% | 50% | 70% | 90% | 95% | 99% | 100% |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 能否读到 | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ |
首尾能读到,中间全部丢失。 长度递增测试进一步确认边界:
| 文档长度 | 首部 1% | 中部 50% | 尾部 99% |
|---|---|---|---|
| 20,000 | ✅ | ✅ | ✅ |
| 50,000 | ✅ | ✅ | ✅ |
| 100,000 | ✅ | ✅ | ✅ |
| 200,000 | ✅ | ✅ | ✅ |
| 400,000 | ✅ | ❌ | ❌ |
| 600,000 | ✅ | ❌ | ✅ |
这是大模型的 lost-in-the-middle 现象,与 OrcaTerm 无关 —— 上游完整地把内容传给了模型,但模型注意力只覆盖首尾。
对照实验确认模型没有编造:不放标记时它如实回答「未找到」。
其他硬限制
| 项目 | 限制 |
|---|---|
| 单次输出 | max_tokens 硬上限 8,096,超出被服务端拒绝 |
| 超限表现 | 服务端报错,特征为 context_length_exceeded / too many tokens / prompt is too long |
插件的处理
max_tokens夹紧 —— 传入值超过 8,096 时自动下调,避免请求被拒。- 主动历史裁剪 —— 默认阈值 200,000 字符(用满可靠区间)。超出时丢弃最老对话,保留:
system消息(永不丢弃)- 最近 8 条对话(保证连贯)
- 成对的工具调用与结果(不会从中间切断)
- 超限提示 —— 万一服务端仍报超限,翻译成「输入超出上下文上限,建议新建会话或精简需求」。
裁剪阈值可在设置面板调整,范围 40,000 ~ 1,000,000,或关闭。
调高阈值能容纳更多历史,但模型可能漏读中间部分 —— 超出 20 万字符后,多保留的内容不一定被模型真正用到。关闭裁剪(始终全量发送)同理。
测试方法
- 容量:构造 30 万 / 60 万 / 120 万字符的文档,在首尾各埋标记,用自然提问让模型回答标记内容。
- 可靠性:固定 600k 字符文档,在 12 个不同百分位依次埋标记,逐个验证。
- 边界:在 20k ~ 600k 六个长度下,分别测首部 / 中部 / 尾部三个位置。
- 防伪:不放标记时观察模型是否编造。
早期用过「暗号 + 只回答暗号」的测法,但模型会把它识别为提示注入而拒答,导致「没看到」和「不肯说」无法区分。改用编号章节 + 中性提问后才得到可靠结论。
工作原理
插件实现了 DSH 的 LlmAdapter 接口,把 DSH 的请求翻译成 OrcaTerm 的 ACP 协议:
- 认证:用
__Secure-ot_session换取 JWT access token(有效期 2 小时,自动续期) - 对话:调用 OrcaTerm 的 SSE 流式接口,把事件映射成 DSH 的 chunk
- 工具调用:把 DSH 的工具清单写进系统提示位,模型返回工具请求后由 DSH 在本机执行,结果回传
- 图片:把 DSH 的图片附件转成 base64 放进
input.files - 长度管理:
max_tokens夹紧 + 历史裁剪,见上节
工具始终在本机运行,OrcaTerm 服务器只负责转发调用描述与执行结果。
已知限制
- 仅支持腾讯云账号登录,不支持 OrcaTerm 独立账号。
- OrcaTerm 不提供 token 用量数据,因此 DSH 的 token 统计面板不会显示本插件的用量。插件自带的调用统计(次数、耗时、首字延迟)是准确的。
- 图片识别的模型支持不一致:GLM 5.3 收到图片会报错(插件会自动跳过),Hunyuan 3 识图不准确。
- 模型列表是内置的。OrcaTerm 调整模型时需要更新插件版本。
- 单次输出上限固定为 8,096 token,这是上游限制,插件无法提高。
- 超过约 20 万字符后,模型会漏读中间内容(lost-in-the-middle)。这是大模型的通病,不是本插件或 OrcaTerm 的问题。调高裁剪阈值或关闭裁剪都不会改变这一点。
- 裁剪会丢失早期对话细节。如果任务依赖很早期的上下文,建议关闭裁剪或新建会话。
隐私说明
插件会做什么:
- 一键登录时启动一个独立的浏览器窗口,用户数据目录为
~/.dsh/orcaterm-login-profile,与你日常使用的浏览器完全隔离 - 通过 Chrome DevTools Protocol 读取
orcaterm.ai这一个域名的__Secure-ot_sessionCookie - 读到凭证后立即关闭该浏览器窗口
插件不会做什么:
- ❌ 不读取你日常浏览器的任何数据
- ❌ 不读取其他网站的任何 Cookie
- ❌ 不把凭证发送到除 OrcaTerm 官方接口以外的任何地方
- ❌ 不在后台常驻浏览器进程
本地存储的文件:
| 文件 | 内容 |
|---|---|
~/.dsh/orcaterm-cookie.txt |
仅 __Secure-ot_session 一个值 |
~/.dsh/orcaterm-token.json |
短期 JWT 缓存(2 小时) |
~/.dsh/orcaterm-usage.json |
本地调用统计 |
~/.dsh/orcaterm-login-profile/ |
登录专用浏览器数据,可在面板「清除登录缓存」删除 |
故障排查
设置面板的「诊断」可查看最近一次调用的详情。也可以直接访问:
http://127.0.0.1:<DSH端口>/api/orcaterm/diag
常见问题:
| 现象 | 原因与处理 |
|---|---|
| 一键登录没弹出浏览器 | 确认安装了 Edge 或 Chrome;关闭同名浏览器窗口后重试 |
| 一键登录提示端口占用 | 可能有残留浏览器进程,重启或改用手动输入 |
| 登录后未检测到凭证 | 登录完成后让窗口保持打开几秒;仍失败则用手动输入 |
| 提示凭证无效 | 登录状态过期,点「重新登录」 |
| 模型不返回内容 | 检查是否触发限流(上游限制约 2 秒 1 次) |
| 图片识别失效 | 确认用的是 DeepSeek 或 Kimi 模型,且设置里「图片识别」已开启 |
| 工具调用失败 | 确认「工具调用」已开启;GLM 5.3 对图片会 400 |
项目结构
├── index.js 插件入口:LlmAdapter 实现 + /api/orcaterm/* 端点
├── service.js Host 数据层:凭证、续期、额度、模型列表、调用统计
├── client.js 设置面板(浏览器侧 React 组件)
├── cordis.patch.yml DSH 插件装配清单(配置项默认值)
│
├── auto-login.js 一键登录:CDP 启动浏览器并读取 Cookie
├── cookie-normalize.js 凭证归一化:整条 Cookie → 只留 __Secure-otSession
├── open-external.js 打开系统浏览器(仅允许 http/https)
│
├── tool-stream.js 信封解析:区分工具 / 正文 / ask 三类信封
├── tool-prompt.js 工具清单注入 emphasisPrompt
├── tool-loop.js 工具结果回传(reportToolResult)
├── answer-stream.js JSON 信封的增量正文提取
│
├── image-files.js DSH ImageBlock → input.files(base64)
├── session-map.js DSH 会话 → OrcaTerm conversationId 映射
└── usage.js 本地调用统计
代码改动后需要重启 DSH 才能生效(Node 模块缓存)。
调试可以用设置面板的「诊断」,或直接读接口:
# 最近一次调用的完整画像
curl http://127.0.0.1:<DSH端口>/api/orcaterm/diag
关键诊断字段:imageCount / imageSkipped(图片是否送达)、toolReported(工具结果是否回传)、roleBreakdown(消息结构)、isToolFollowUp(是否工具回灌轮)。
许可
MIT
No comments yet. Be the first to write one.