Dolphin逆向思路+过程

Dolphin逆向思路+过程
HongShi十一到处逛,在L站发现了个帖子发现一个AI(可免费使用) - 开发调优 - LINUX DO我注意到有些站点并没有严格的鉴权限制,甚至允许未登录的用户直接调用模型接口。这类接口往往隐藏在浏览器的网络请求中,通过分析可以实现标准化调用,从而兼容 OpenAI 的 API 生态。下面记录一下我对 Dolphin 模型接口 的逆向过程与思路。
初步分析
目标网站提供了一个在线对话页面,前端直接与模型服务交互:
- 请求地址:
https://chat.dphn.ai/api/chat - 请求方法:
POST - 返回格式:
text/event-stream(SSE 流式返回)
这里的关键点是 数据并不是普通 JSON,而是通过 SSE 逐条传输,这意味着需要模拟流式读取。
观察请求参数
通过浏览器开发者工具(Network 面板),我们可以看到完整的请求:
Content-Type: application/jsonAccept: text/event-stream- 请求体包含:
messages(聊天上下文,符合 OpenAI 格式)model(例如dolphinpod:24B)template(推理模式,如"logical")
📌 这一步确认了接口 几乎与 OpenAI Chat API 一致,只是多了一个
template字段。
1 | { |
处理 SSE 流式返回
返回的数据不是一次性 JSON,而是 逐行推送的 SSE。每一行类似
1 | data: {"choices":[{"delta":{"content":"你好"}}]} |
需要在客户端逐行解析,提取 delta.content 并拼接成最终结果。
这与 OpenAI stream=True 的机制完全一致。
构建代理层思路
由于原始接口并没有统一的 API Key 验证机制,如果想要对外安全暴露,需要自己加一层 代理服务:
- 转发请求:
- 外部调用
/v1/chat/completions - 代理服务转发到
https://chat.dphn.ai/api/chat
- 外部调用
- 兼容 OpenAI 格式:
- 输入/输出保持与 OpenAI SDK 一致
- 方便用户直接用
openai.ChatCompletion.create()调用
- 自定义鉴权:
- 在代理层添加 API Key 校验
- 保证只有授权用户可以访问
关键难点与解决思路
- SSE 转发
- 不能直接
resp.json(),必须逐行解析 - 需要在服务端用
StreamingResponse(Python)或ReadableStream(Deno)转发
- 不能直接
- 浏览器伪装
- 有些站点可能检查
Origin和Referer - 需要在请求头中补全这两个字段
- 有些站点可能检查
- 模型列表
- 原站点没有
/v1/models接口 - 可以在代理层手动定义可用模型(如
dolphinpod:24B)
- 原站点没有
总结
整个逆向过程的关键是:
- 观察请求 → 确认接口是
/api/chat,参数与 OpenAI 格式类似 - 理解响应 → 识别是 SSE 流式输出,逐行解析
- 设计代理 → 实现
/v1/chat/completions与/v1/models,加上 API Key 保护 - 统一调用 → 让外部可以直接用 OpenAI SDK 访问 Dolphin 模型
通过这种方式,任何支持 OpenAI API 的工具(如 LangChain、ChatUI)都可以无缝切换到 Dolphin 模型。
行了,完事儿了
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果









![[折腾笔记]小狼毫输入法](/images/cover/%E5%B0%8F%E7%8B%BC%E6%AF%AB.png)



