Skip to content

Repository files navigation

Doubao Free API

将豆包桌面客户端的对话能力包装为 OpenAI 兼容的标准 API,供 Claude Code、OpenCode 等 AI Agent 软件直接调用。

✨ 功能特性

  • 🔄 OpenAI 兼容 — 完全兼容 /v1/chat/completions 接口,支持流式/非流式
  • 🤖 Anthropic 兼容 — 完全兼容 /v1/messages 接口,支持 Claude Code 原生对接
  • 🖼️ Vision 图片识别 — 支持 OpenAI Vision 格式,自动上传图片到豆包 ImageX
  • 🎨 图片生成 — 支持 /v1/images/generations,兼容 OpenAI Image API
  • 🎵 音乐生成 — 支持 AI 音乐创作,自动生成歌词+音频,Web端直接播放
  • 🎙️ 播客生成 — 支持 AI 播客脚本+音频生成,火山引擎原生TTS,前置/后置音乐
  • 🧠 思考模式 — 深度推理,边想边搜
  • 💻 编程模式 — 基于 Doubao-Seed-Code 的代码生成
  • ✍️ 写作/翻译/解题 — 7种特殊模式,参数切换
  • 📊 数据分析师 — 生成数据分析代码(pandas/matplotlib)
  • 📤 对话导出/导入 — 直接调用豆包 IM 接口抓取已有对话,支持媒体下载,JSON/JSONL 格式
  • 💾 服务端持久存储 — SQLite 数据库存储对话和消息,刷新不丢失
  • 🌓 明暗主题切换 — 白天模式(豆包色系)+ 暗黑模式,自动记忆偏好
  • 📊 管理面板 — Web UI 状态监控、在线对话、日志查看,设置面板集成服务状态
  • 👥 多账号池 — Cookie 轮询 + 自动故障转移
  • 🔐 纯算签名 — 默认 sign_method=pure,聊天接口使用 Python 原生纯算 a_bogus
  • 📝 对话日志 — 自动记录每次输入输出

快速开始

1. 安装依赖

默认走 Python 原生签名 + 直接 HTTP 请求,不安装浏览器依赖:

pip install -r requirements.txt

如果需要启用音乐/播客/导出的浏览器最后兜底,再额外安装:

pip install -r requirements-browser.txt
playwright install chromium

浏览器兜底默认关闭,只有配置 enable_browser_fallback=true 时才会尝试使用。

2. 准备网页端登录态

登录 豆包网页版,从浏览器开发者工具复制 www.doubao.com 的 Cookie,并准备 device_idweb_idtea_uuid 等设备参数,写入 config.json

最小配置可以从 config.example.json 复制:

cp config.example.json config.json

然后编辑 config.json,至少填入:

{
  "cookie": "sessionid=...; sid_guard=...; ...",
  "device_id": "...",
  "web_id": "...",
  "tea_uuid": "...",
  "sign_method": "pure"
}

3. 启动服务

python main.py

服务启动后监听 http://localhost:8765,浏览器打开即可使用管理面板。

4. 验证服务

# 健康检查
curl http://localhost:8765/health

# 查看模型列表
curl http://localhost:8765/v1/models

# 非流式对话
curl -X POST http://localhost:8765/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model":"doubao-pro-chat","messages":[{"role":"user","content":"你好"}]}'

# 流式对话
curl -X POST http://localhost:8765/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model":"doubao-pro-chat","messages":[{"role":"user","content":"你好"}],"stream":true}'

对接 AI Agent

Claude Code (Anthropic 原生模式)

ANTHROPIC_API_KEY=any-string ANTHROPIC_BASE_URL=http://localhost:8765 claude

Claude Code 使用 Anthropic Messages API (/v1/messages),本服务已完整兼容,包括流式 SSE 事件格式。

Claude Code (OpenAI 兼容模式)

OPENAI_API_BASE=http://localhost:8765/v1 OPENAI_API_KEY=sk-doubao claude

OpenCode

{
  "provider": "openai",
  "api_base": "http://localhost:8765/v1",
  "api_key": "any-string",
  "model": "doubao-pro-chat"
}

OpenClaw 工具调用模板

config.example.json 保留了原项目给 OpenClaw 使用的 custom_prompt:它会要求模型输出 OpenAI tool_calls JSON,服务端会把纯 JSON 工具调用结果转换为兼容的 tool_calls 响应。

Python SDK

from openai import OpenAI

client = OpenAI(api_key="any-string", base_url="http://localhost:8765/v1")

# 非流式
response = client.chat.completions.create(
    model="doubao-pro-chat",
    messages=[{"role": "user", "content": "你好"}]
)
print(response.choices[0].message.content)

# 流式
stream = client.chat.completions.create(
    model="doubao-pro-chat",
    messages=[{"role": "user", "content": "你好"}],
    stream=True
)
for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")

可用模型

模型 ID 模式 说明
doubao-pro-chat 快速模式 默认,Doubao-Seed-2.0-Mini
doubao-thinking 思考模式 深度推理,边想边搜
doubao-expert 超能模式 自动搜索+深度分析
doubao-coding 编程模式 Doubao-Seed-Code 代码生成
doubao-writing 写作助手 公文/邮件/文案/小说
doubao-translator 翻译 多语言互译
doubao-tutor 解题答疑 数学/物理/化学逐步解题
doubao-data-analyst 数据分析师 生成数据分析代码
doubao-lite-chat 轻量模式 轻量快速
doubao-pro-32k Pro 32K 长上下文
doubao-pro-128k Pro 128K 超长上下文
doubao-image 图片生成 文生图,兼容 OpenAI Image API
doubao-podcast 播客生成 AI 播客脚本+音频
doubao-music 音乐生成 AI 音乐创作(歌词+音频)

Vision 图片识别

支持 OpenAI Vision API 格式,自动上传图片到豆包 ImageX 服务:

# URL 图片
curl -X POST http://localhost:8765/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-pro-chat",
    "messages": [{
      "role": "user",
      "content": [
        {"type": "text", "text": "描述这张图片"},
        {"type": "image_url", "image_url": {"url": "https://example.com/image.png"}}
      ]
    }]
  }'
# Python SDK - base64 图片
import base64
from openai import OpenAI

client = OpenAI(api_key="any-string", base_url="http://localhost:8765/v1")

with open("photo.jpg", "rb") as f:
    b64 = base64.b64encode(f.read()).decode()

response = client.chat.completions.create(
    model="doubao-pro-chat",
    messages=[{
        "role": "user",
        "content": [
            {"type": "text", "text": "描述这张图片"},
            {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{b64}"}}
        ]
    }]
)

支持两种图片输入:

  • HTTP URLhttps://... — 自动下载并上传
  • Base64 Data URLdata:image/png;base64,... — 自动解码并上传

Anthropic Claude Code 兼容

本服务完整实现了 Anthropic Messages API (/v1/messages),Claude Code 可直接使用:

模型映射

Claude 模型 豆包模型
claude-3-5-sonnet-latest doubao-pro-chat
claude-3-5-haiku-latest doubao-lite-chat
claude-3-opus-latest doubao-expert
claude-sonnet-4-* doubao-pro-chat

启动 Claude Code

ANTHROPIC_API_KEY=any-string ANTHROPIC_BASE_URL=http://localhost:8765 claude

直接调用

curl -X POST http://localhost:8765/v1/messages \
  -H "Content-Type: application/json" \
  -H "x-api-key: any-string" \
  -H "anthropic-version: 2023-06-01" \
  -d '{
    "model": "claude-3-5-sonnet-latest",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "你好"}],
    "stream": true
  }'

Python SDK

from anthropic import Anthropic

client = Anthropic(api_key="any-string", base_url="http://localhost:8765")

# 非流式
message = client.messages.create(
    model="claude-3-5-sonnet-latest",
    max_tokens=1024,
    messages=[{"role": "user", "content": "你好"}]
)
print(message.content[0].text)

# 流式
with client.messages.stream(
    model="claude-3-5-sonnet-latest",
    max_tokens=1024,
    messages=[{"role": "user", "content": "你好"}]
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)

支持的 Anthropic 特性

  • ✅ 流式 SSE(message_start, content_block_start, content_block_delta, message_delta, message_stop)
  • ✅ 非流式响应
  • ✅ system 提示词(字符串和 content blocks 格式)
  • ✅ Vision 图片识别(base64 和 URL)
  • ✅ 多轮对话
  • ✅ stop_reason(end_turn)
  • ✅ usage 统计

API 端点

端点 方法 说明
/v1/chat/completions POST OpenAI 对话补全(流式/非流式)
/v1/messages POST Anthropic Messages API(流式/非流式)
/v1/models GET 模型列表(含能力描述)
/v1/images/upload POST 上传图片文件
/v1/images/generations POST 图片生成(OpenAI 兼容 API)
/v1/music/generate POST 音乐生成
/v1/music/status/{task_id} GET 音乐生成状态查询
/v1/music/audio/{task_id} GET 获取音乐音频URL
/v1/music/lyric/{task_id} GET 获取音乐歌词
/v1/music/list GET 音乐任务列表
/v1/music/styles GET 获取音乐风格列表
/v1/podcast/generate POST 播客生成(自动账号重试)
/v1/podcast/upload POST 播客文件上传
/v1/podcast/status/{task_id} GET 播客生成状态查询
/v1/podcast/audio/{task_id} GET 获取播客音频URL
/v1/podcast/script/{task_id} GET 获取播客脚本
/v1/podcast/list GET 播客任务列表
/v1/podcast/file/{filename} GET 播客本地音频文件
/v1/podcast/config GET/POST 播客配置(前置/后置音乐开关)
/v1/user/info GET 获取当前豆包用户信息
/v1/doubao/conversations GET 获取豆包网站对话列表
/v1/doubao/conversations/{id}/export GET 导出指定对话(含媒体下载)
/api/conversations* GET/POST/DELETE 本地 SQLite 会话库;保存 doubao_conversation_id 后可同步删除上游会话
/api/proxy/audio GET 音频代理播放;支持 task_id 或原始 url
/api/proxy/download/{task_id} GET 音乐下载代理
/health GET 健康检查 + 功能状态
/logs/today GET 查看今日对话日志
/logs/{date} GET 查看指定日期日志
/accounts GET/POST 账号池管理
/accounts/{name} DELETE 删除账号
/conversations/{id} GET 查看会话状态

图片生成

支持 OpenAI 兼容的 /v1/images/generations 端点,可用于生成图片:

curl -X POST http://localhost:8765/v1/images/generations \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "一只可爱的小猫",
    "n": 4,
    "size": "1024x1024"
  }'

Python SDK 示例:

from openai import OpenAI

client = OpenAI(api_key="any-string", base_url="http://localhost:8765/v1")

response = client.images.generate(
    model="dall-e-3",  # 模型名可任意,实际使用豆包
    prompt="一只可爱的小猫",
    size="1024x1024",
    n=4
)

for item in response.data:
    print(item.url)

响应格式:

{
  "created": 1715731200,
  "data": [
    {
      "url": "https://...",
      "revised_prompt": "一只可爱的小猫"
    }
  ]
}

管理面板

浏览器打开 http://localhost:8765 即可使用管理面板:

  • 📊 状态页 — 服务状态、账号健康度、模型列表(集成在设置面板中)
  • 💬 对话页 — 在线对话测试,支持图片上传,音乐/播客生成
  • 📋 日志页 — 按日期/关键词/模型筛选日志
  • 👤 账号页 — Cookie 账号池管理
  • ⚙️ 设置页 — 服务配置+服务状态+可用模型
  • 📤 导出/导入 — 豆包网站对话抓取、本地对话导出导入
  • 🌓 主题切换 — 白天/暗黑模式,自动记忆

播客生成

通过 doubao-podcast 模型生成 AI 播客,支持脚本生成 + 原生TTS音频合成:

# 生成播客
curl -X POST http://localhost:8765/v1/podcast/generate \
  -H "Content-Type: application/json" \
  -d '{"topic": "人工智能的未来发展"}'

# 查询状态
curl http://localhost:8765/v1/podcast/status/{task_id}

# 获取音频
curl http://localhost:8765/v1/podcast/audio/{task_id}

TTS 音频合成

播客音频使用火山引擎原生TTS(豆包同款音色):

项目 详情
协议 火山引擎 V1 WebSocket 二进制协议
端点 wss://openspeech.bytedance.com/api/v1/tts/ws_binary
认证 通过豆包 /alice/user/launch API 获取 appid + token
音色 zh_female_wenroutaozi_uranus_bigtts(温柔桃子女声)
格式 MP3, 24kHz 采样率

工作流程

  1. 调用豆包 FPA API 生成播客脚本(双人对话格式)
  2. 解析脚本,按主播分段
  3. 通过火山引擎 WebSocket TTS 合成每段音频
  4. 合并所有音频段,返回完整播客

自动重试机制

  • Cookie 过期时自动切换账号池中的其他账号
  • 火山引擎 TTS 失败时自动回退到 edge-tts

前置/后置音乐

  • 播客音频自动添加前置音乐(intro_jingle.mp3)和后置音乐(outro_jingle.mp3)
  • 使用 ffmpeg 合并音频,带渐入渐出效果
  • 可通过前端复选框或 API 参数控制开关:
    • 生成时传参:{"topic": "...", "intro_jingle": true, "outro_jingle": true}
    • 配置端点:GET/POST /v1/podcast/config

API 端点

端点 方法 说明
/v1/podcast/generate POST 生成播客(自动账号重试)
/v1/podcast/status/{task_id} GET 播客生成状态查询
/v1/podcast/audio/{task_id} GET 获取播客音频URL
/v1/podcast/script/{task_id} GET 获取播客脚本
/v1/podcast/list GET 播客任务列表
/v1/podcast/file/{filename} GET 音频文件下载
/v1/podcast/config GET/POST 播客配置(前置/后置音乐开关)

通过 doubao-music 模型生成 AI 音乐,支持歌词+音频自动生成:

curl -X POST http://localhost:8765/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-music",
    "messages": [{"role": "user", "content": "创作一首关于春天的歌曲"}],
    "stream": true
  }'

音乐生成流程:

  1. 本地用 pure_signer.py/samantha/chat/completion,发送 content_type=2005 音乐 skill 输入
  2. message.ext.input_skill.variables 必须使用豆包 skill pack 的英文值,例如 genre=Popmood=Happygender=Femalegeneration_type=AI_lyric
  3. SSE 返回 content_type=2006 音乐卡片,里面包含歌词、封面、音频 video_model 等字段
  4. Web 界面自动显示音频播放器(封面+标题+时长+播放控件),并记录真实 conversation_id 供删除上游会话

也可直接调用音乐 API:

# 生成音乐
curl -X POST http://localhost:8765/v1/music/generate \
  -H "Content-Type: application/json" \
  -d '{"prompt":"一首快乐的流行歌曲","style":"流行","mood":"快乐","voice":"女声"}'

# 查询状态
curl http://localhost:8765/v1/music/status/{task_id}

# 获取音频URL
curl http://localhost:8765/v1/music/audio/{task_id}

对话导出/导入

从豆包网站抓取对话

系统优先直接调用豆包网页当前使用的 IM 接口获取对话数据;只有直接请求失败时,才回退到浏览器拦截方案:

  1. 抓取对话列表POST /im/chain/recent_conv
  2. 读取对话信息POST /im/conversation/info
  3. 导出单个对话消息POST /im/chain/single
  4. 下载媒体文件 — 自动下载对话中的图片、音频、视频到本地 exports/media/ 目录
  5. 保存为 JSON — 导出结果保存到 exports/{conversation_id}.json
# 获取对话列表
curl http://localhost:8765/v1/doubao/conversations

# 导出指定对话(含媒体下载)
curl http://localhost:8765/v1/doubao/conversations/{conversation_id}/export

技术原理

聊天补全接口 /samantha/chat/completion 默认使用 sign_method=pure 生成 a_bogus。浏览器实测发现:对话列表/历史消息已不再走旧文档里的 /samantha/chat/conversation/list/samantha/chat/conversation/message/list,而是走 /im/* 协议接口;这些 IM 接口携带登录 Cookie 和设备参数即可直接请求,不需要浏览器常驻。

导出流程采用 直接 IM 请求优先 + 浏览器降级 策略:

  • 直接 IM 请求im_api.py 使用 aiohttp 请求 /im/chain/recent_conv/im/conversation/info/im/chain/single
  • 浏览器降级:直接请求失败时,exporter.py 才使用 CloakBrowser/Playwright 拦截网页请求

工作流程:

1. 从 Cookie 池中选择有效账号(检查 sid_guard 过期时间)
2. 直接请求 /im/chain/recent_conv 获取对话列表
3. 直接请求 /im/conversation/info 获取标题/参与者信息
4. 直接请求 /im/chain/single 获取消息链
5. 解析响应数据,提取对话/消息/用户信息
6. 如直接请求失败,再启动 CloakBrowser/Playwright 作为降级

可选配置:

{
  "export_page_size": 50,
  "export_max_pages": 50
}

导出数据格式

{
  "conversation_id": "7xxxxxxxxxx",
  "messages": [
    {
      "message_id": "msg_xxx",
      "role": "user",
      "content_type": 10000,
      "created_at": 1715731200,
      "text": "你好",
      "images": [],
      "audio_url": null,
      "video_url": null
    },
    {
      "message_id": "msg_yyy",
      "role": "assistant",
      "content_type": 2006,
      "text": "春暖人间烂漫\n\n(歌词...)",
      "images": ["exports/media/conv_id/msg_yyy_img0.jpg"],
      "audio_url": "exports/media/conv_id/msg_yyy_audio.mp3",
      "video_url": null
    }
  ],
  "message_count": 2,
  "exported_at": 1715731200.0
}

本地对话导出/导入

Web 管理面板支持:

  • 导出本地对话:将系统中的对话导出为 JSON 或 JSONL 格式
  • 导入对话文件:导入 JSON/JSONL 格式的对话文件,自动去重

项目结构

doubao-api/
├── main.py                      # FastAPI 入口 + 路由注册
├── config.py                    # 读取 config.json/accounts.json、Cookie 池、日志目录
├── config.example.json          # 配置模板;复制为 config.json 后填入登录态/设备参数
├── config.json                  # 本地敏感配置(git 忽略,不提交)
├── accounts.json                # 多账号池配置(可选,git 忽略)
├── requirements.txt             # 当前 pure 签名 + 直接 HTTP 主路径最小依赖
├── requirements-browser.txt     # 可选浏览器兜底依赖
├── models.py                    # 请求/响应模型 + 豆包模型映射
├── sse.py                       # 豆包 SSE 解析 + OpenAI SSE 格式化
├── openai_api.py                # OpenAI 兼容 /v1/chat/completions 主逻辑
├── anthropic_api.py             # Anthropic 兼容 /v1/messages 主逻辑
├── pure_signer.py               # Python 原生 a_bogus 签名(默认 pure 模式)
├── im_api.py                    # 豆包 IM 直连接口(对话列表/详情/消息)
├── exporter.py                  # 对话导出(IM 直连优先 + 浏览器降级 + 媒体下载)
├── uploader.py                  # 图片上传模块(ImageX 4 步流程)
├── signer.py                    # Playwright 签名模块(B2 实验性/不推荐)
├── storage.py                   # SQLite 本地会话存储
├── music.py                     # 音乐生成模块
├── podcast.py                   # 播客生成模块
├── volcengine_tts.py            # 火山引擎 TTS WebSocket 客户端
├── index.html                   # Web 管理面板
├── run-server.bat               # Windows 启动脚本
├── README.md                    # 项目说明
├── .gitignore                   # 忽略敏感配置与运行产物
├── docs/
│   └── reverse-engineering-report.md
├── data/                        # 自动生成;SQLite/播客等数据(git 忽略)
├── conversations/               # 自动生成;对话状态/日志(git 忽略)
├── logs/                        # 自动生成;运行日志(git 忽略)
├── exports/                     # 自动生成;导出的对话与媒体(git 忽略)
├── media/                       # 自动生成;音频缓存(git 忽略)
└── temp/                        # 可选;本地临时调试目录(git 忽略)

配置最小示例:

{
  "cookie": "YOUR_COOKIE_HERE",
  "device_id": "YOUR_DEVICE_ID_HERE",
  "web_id": "YOUR_WEB_ID_HERE",
  "tea_uuid": "YOUR_TEA_UUID_HERE",
  "api_base": "https://www.doubao.com",
  "sign_method": "pure",
  "server_host": "0.0.0.0",
  "server_port": 8765
}

技术原理

默认使用 Python 原生 pure 签名方案,由 pure_signer.py 生成 a_bogus;B3/x-flow-trace 仅作为历史兼容/回退分支:

  1. 从豆包网页版准备 Cookie 和设备参数
  2. 序列化请求体,并通过 pure_signer.py/samantha/chat/completion 生成 a_bogus
  3. 调用豆包 /samantha/chat/completion API;如果 pure 签名生成失败,再退回 B3 参数直连
  4. 将三层嵌套 SSE 响应转换为 OpenAI 标准格式

签名方案对比

方案 方法 结果 原因
pure Python 原生 a_bogus ✅ 默认 调用 pure_signer.py 原生生成 172/176 字符长 a_bogus
B3 x-flow-trace 绕过 ✅ 兼容 不依赖 a_bogus,作为历史兼容分支保留
B2 Playwright 生成 X-Bogus ❌ 不推荐 触发服务端浏览器指纹验证,且依赖浏览器

启用纯算签名:

{
  "sign_method": "pure"
}

pure 模式默认走 Python 原生签名,不需要 Node、浏览器、Playwright、CloakBrowser、JS 文件或 JSRPC。

图片上传流程

1. prepare_upload → 获取 AWS 临时凭证
2. ApplyImageUpload → 获取 TOS 存储地址
3. Upload Binary → 上传图片二进制 (CRC32 校验)
4. CommitImageUpload → 确认上传,获取 ImageUri

降级策略

业务 主路径 签名/接口失败后的降级
聊天 pure_signer.py/samantha/chat/completion B3 参数直连降级;再按账号池重试
图片生成 复用聊天 call_doubao_api() B3 参数直连降级;再按账号池重试
音乐生成 pure_signer.py/samantha/chat/completion pure 签名失败 → B3 参数直连;请求/空响应失败 → 账号池重试;最后才按 enable_browser_fallback=true 允许浏览器兜底
播客生成 pure_signer.py/samantha/chat/completion pure 签名失败 → B3 参数直连;脚本有结果但无音频 → 聊天触发音频/TTS;最后才按 enable_browser_fallback=true 允许浏览器兜底
上传 /alice/resource/prepare_upload + ImageX 不依赖 a_bogus;失败按上传错误处理
IM/会话删除 /im/* 不依赖 a_bogus;失败按接口错误处理

降级不等于都走浏览器:所有 /samantha/chat/completion 业务都先走 pure 签名;pure 生成失败时先退回 B3 参数直连。音乐/播客即使开启 enable_browser_fallback=true,也只是在非浏览器兜底失败后才走浏览器,避免缺 Playwright/CloakBrowser 时覆盖真实 API 错误。

a_bogus 使用矩阵

业务 本地入口 上游接口 是否需要 a_bogus 当前实现
聊天 /v1/chat/completions/v1/messages /samantha/chat/completion openai_api.py -> pure_signer.py
图片生成 /v1/images/generations /samantha/chat/completion 复用 call_doubao_api(),走 pure_signer.py
音乐生成 /v1/music/generate /samantha/chat/completion music.py -> pure_signer.py;pure 失败后 B3,浏览器兜底默认关闭
播客生成 /v1/podcast/generate /samantha/chat/completion podcast.py -> pure_signer.py;pure 失败后 B3,音频阶段可退 TTS,浏览器兜底默认关闭
图片/文件上传准备 /v1/images/upload/v1/podcast/upload /alice/resource/prepare_upload Cookie + 设备参数即可;后续 ImageX 走 AWS4Auth
对话列表 /v1/doubao/conversations /im/chain/recent_conv im_api.py 直连
对话信息 导出流程内部 /im/conversation/info im_api.py 直连
消息链 /v1/doubao/conversations/{id}/export /im/chain/single im_api.py 直连
会话删除 /v1/conversations/{id} /im/conversation/batch_del_user_conv openai_api.py -> im_api.py
账号新增/删除 /accounts/accounts/{name} 无上游请求 只改本地 accounts.json/内存池
本地会话创建/删除 /api/conversations* 无上游请求 只改本地 SQLite
用户偏好 手动验证/内部调用 /samantha/user/preference/get im_api.py::user_preference()

判断规则:只要业务最终打 /samantha/chat/completion,主路径就走 pure_signer.py 生成 a_bogus;如果 pure 签名生成失败,退回 B3 参数直连。/im/*、账号池、本地 SQLite、上传准备接口不需要。

手动验证命令

项目不再保留独立测试脚本。常用手动验证命令如下:

# 健康检查
curl http://localhost:8765/health

# 模型列表
curl http://localhost:8765/v1/models

# 非流式聊天
curl -X POST http://localhost:8765/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model":"doubao-pro-chat","messages":[{"role":"user","content":"只回复 OK"}]}'

# 音乐风格列表
curl http://localhost:8765/v1/music/styles

# 本地会话列表
curl http://localhost:8765/api/conversations

# 豆包网页 IM 对话列表
curl http://localhost:8765/v1/doubao/conversations

需要测试上游 /samantha/chat/completion、音乐、播客、图片生成这类会创建网页会话或媒体任务的接口时,测试后要手动删除对应会话,避免污染账号历史。

Cookie 过期处理

Cookie 有效期约 30 天。过期后重新登录豆包网页版,并把新的 www.doubao.com Cookie 更新到 config.json 即可。

注意事项

  • 仅供学习研究,请勿用于商业用途
  • Cookie 属于敏感信息,请勿泄露(config.json 已加入 .gitignore)
  • 豆包 API 可能随时变更,导致服务失效
  • 建议不要高频调用,以免触发风控

License

MIT

About

豆包(Doubao)免费API服务 - 将豆包桌面客户端包装为OpenAI兼容API,支持流式响应、Vision图片识别、思考/编程/写作/翻译/解题等特殊模式

Resources

Stars

30 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages