HongShi AI正在绞尽脑汁想思路ING···
HongShiのAI摘要
GPT-4o

Dolphin逆向思路+过程

十一到处逛,在L站发现了个帖子发现一个AI(可免费使用) - 开发调优 - LINUX DO我注意到有些站点并没有严格的鉴权限制,甚至允许未登录的用户直接调用模型接口。这类接口往往隐藏在浏览器的网络请求中,通过分析可以实现标准化调用,从而兼容 OpenAI 的 API 生态。下面记录一下我对 Dolphin 模型接口 的逆向过程与思路。

初步分析

目标网站提供了一个在线对话页面,前端直接与模型服务交互:

  • 请求地址:https://chat.dphn.ai/api/chat
  • 请求方法:POST
  • 返回格式:text/event-stream(SSE 流式返回)

这里的关键点是 数据并不是普通 JSON,而是通过 SSE 逐条传输,这意味着需要模拟流式读取。

观察请求参数

通过浏览器开发者工具(Network 面板),我们可以看到完整的请求:

  • Content-Type: application/json
  • Accept: text/event-stream
  • 请求体包含:
    • messages(聊天上下文,符合 OpenAI 格式)
    • model(例如 dolphinpod:24B
    • template(推理模式,如 "logical"

📌 这一步确认了接口 几乎与 OpenAI Chat API 一致,只是多了一个 template 字段。

1
2
3
4
5
6
7
8
{
"messages": [
{"role": "user", "content": "你是谁?"}
],
"model": "dolphinpod:24B",
"template": "logical"
}

处理 SSE 流式返回

返回的数据不是一次性 JSON,而是 逐行推送的 SSE。每一行类似

1
data: {"choices":[{"delta":{"content":"你好"}}]}

需要在客户端逐行解析,提取 delta.content 并拼接成最终结果。
这与 OpenAI stream=True 的机制完全一致。

构建代理层思路

由于原始接口并没有统一的 API Key 验证机制,如果想要对外安全暴露,需要自己加一层 代理服务

  1. 转发请求
    • 外部调用 /v1/chat/completions
    • 代理服务转发到 https://chat.dphn.ai/api/chat
  2. 兼容 OpenAI 格式
    • 输入/输出保持与 OpenAI SDK 一致
    • 方便用户直接用 openai.ChatCompletion.create() 调用
  3. 自定义鉴权
    • 在代理层添加 API Key 校验
    • 保证只有授权用户可以访问

关键难点与解决思路

  • SSE 转发
    • 不能直接 resp.json(),必须逐行解析
    • 需要在服务端用 StreamingResponse(Python)或 ReadableStream(Deno)转发
  • 浏览器伪装
    • 有些站点可能检查 OriginReferer
    • 需要在请求头中补全这两个字段
  • 模型列表
    • 原站点没有 /v1/models 接口
    • 可以在代理层手动定义可用模型(如 dolphinpod:24B

总结

整个逆向过程的关键是:

  1. 观察请求 → 确认接口是 /api/chat,参数与 OpenAI 格式类似
  2. 理解响应 → 识别是 SSE 流式输出,逐行解析
  3. 设计代理 → 实现 /v1/chat/completions/v1/models,加上 API Key 保护
  4. 统一调用 → 让外部可以直接用 OpenAI SDK 访问 Dolphin 模型

通过这种方式,任何支持 OpenAI API 的工具(如 LangChain、ChatUI)都可以无缝切换到 Dolphin 模型。

行了,完事儿了

完整代码前往:dolphin2api-我写的第二个2api - 开发调优 / 开发调优, Lv2 - LINUX DO