Skip to content
DistPubPublic

About

腾讯ima能力封装为openai风格api

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

ima 下游客户端(OpenAI 风格透传)

定位:下游。构造 ima 鉴权头 → 调上游 ima 接口 → 透传结果。 鉴权、积分扣减、沙盒编排全在上游。

本项目仅供学习,违反ima协议导致账号被封后果自负!

文件

config.py       配置
ima_auth.py     ★ 鉴权头构造:cookie 序列化 + bkn 签名(算法已从 H5 源码还原)
ima_upstream.py 上游客户端(chat + SSE 透传)
server.py       FastAPI 入口:/v1/chat/completions(流式/非流式)
selftest.py     bkn/鉴权头自检

鉴权头(已完整还原,自检通过)

x-ima-cookie:     IMA-UID=..;IMA-TOKEN=..;IMA-REFRESH-TOKEN=..;UID-TYPE=..;TOKEN-TYPE=..
from_browser_ima: 1
x-ima-bkn:        DJB33(IMA-TOKEN)  ← ima_auth.py:ima_bkn(),JS 32 位语义精确模拟

票据从哪提取(你自己的登录态)

PC 版 ima 是 Chromium 架构,登录票据在本机数据目录:

  1. 找数据目录:%LOCALAPPDATA%\ima.copilot\User Data\(或安装目录下 User Data)
  2. 粗提取(最快):在该目录下用工具搜二进制 IMA-TOKEN 字符串(如 findstr /m /s 或 7-Zip 打开 Default\Network\Cookies、Default\Local Storage\leveldb\*.ldb 逐个看),找到形如 IMA-TOKEN=t@xxxx 的值
  3. 写成 ima_cookie.txt 放服务目录:
    IMA-UID=你的uid
    IMA-TOKEN=t@xxxx
    IMA-REFRESH-TOKEN=r@xxxx
    UID-TYPE=1
    TOKEN-TYPE=1
    
  4. 或者开 PC 客户端 remote debugging(启动参数 --remote-debugging-port=9222 --remote-allow-origins=*),DevTools 的 Network 里直接看任意 cgi 请求的 x-ima-cookie 原串——最准,连 token 轮换后的新值都能看

跑法

pip install fastapi uvicorn httpx
python selftest.py          # 鉴权构造自检
uvicorn server:app --port 8300
curl http://127.0.0.1:8300/v1/chat/completions -H "Content-Type: application/json" \
  -d '{"stream":true,"messages":[{"role":"user","content":"你好"}]}'

已知风险(票据到位后实测)

  • /cgi-bin/s/* 走加密通道(x-ima-cm/ckey/ctk 三头 + ErrRejectPlain 拒明文), 加解密由客户端 native(Go so:X25519+HKDF+AES-GCM)完成
  • cgi-bin/assistant/qa 是否强制加密未知——401 只说明要票据,带上票据后实测见分晓
  • 若 qa 强制加密:再战 Go crypto 逆向(X25519 会话协商),工程量大但路径已清楚

测试客户端(opencode 风格工具集)

tools_def.py      read/bash/edit/write 工具定义(OpenAI schema)+ 真实执行器(限定 agent_ws 目录)
test_client.py    agent 循环客户端(连 /v1/chat/completions,自动执行 tool_calls 并回传)
mock_upstream.py  无 token 验链路:MOCK_UPSTREAM=1 切模拟模型
e2e_test.py       进程内端到端测试(无需起服务)

无 token 验链路(mock)

python3 e2e_test.py
# 或真实 HTTP:
MOCK_UPSTREAM=1 uvicorn server:app --port 8300
python3 test_client.py "帮我看下 demo.txt"

token 到位后切真实链路

uvicorn server:app --port 8300    # 不设 MOCK_UPSTREAM 即真实 ima
python3 test_client.py "你的任务"

预期输出(三轮循环)

第1轮:tool_calls → read(demo.txt)   ← 模型发起,finish_reason=tool_calls
第2轮:tool_calls → bash(ls -la)     ← 工具结果已回注上下文
第3轮:最终回答,finish_reason=stop

✅ 2026-10-31 真机实测定稿协议

1. POST /cgi-bin/session_logic/init_session   {"session_type":0,"env_info":{"robot_type":10000}}
   → session_id(每轮问答新建,规避同session限流"版本过低")
2. POST /cgi-bin/assistant/qa  (SSE)
   {"session_id","robot_type":10000,"question","question_type":0,
    "client_id","command_info":{"command_type":0,"params":{}},"attach_media":[]}
   → 事件: QA_START(模型/trace) → SESSION_START → MESSAGE(Text) 或
          STRUCTURED_BLOCK(blockMessage.text_message.Text) → COMPLETED → CLOSE
3. 鉴权: x-ima-cookie + x-ima-bkn(DJB33, 已验证与线上一致) + from_browser_ima:1

实测记录(真实 ima 模型,2026-10-31)

  • 第1轮:tools 注入 → 模型输出 {"tool_calls":[...read(demo.txt)...]} → 解析为 OpenAI tool_calls → 本地执行
  • 第2轮:工具结果回注 → 模型基于结果回答 → finish_reason=stop
  • 限流:同账号连续请求会被限(约20s间隔安全),生产加重试即可
  • 注意:robot_type=15(Copilot) 走 web 通道报"当前版本暂不支持",Main=10000 可用

About

腾讯ima能力封装为openai风格api

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages