Skip to content

About

将 Dify API 接口转换成OpenAI Chat Completions格式

Resources

Stars

22 stars

Watchers

1 watching

Forks

Latest commit

 

History

31 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dify2OpenaiApi

把 Dify 应用的对话接口转换成 OpenAI Chat Completions 格式,让只支持 OpenAI API 的客户端(如 ChatGPT-Next-Web、各类 OpenAI SDK)可以直接调用 Dify 应用。

工作原理

客户端 ──(OpenAI 格式)──> Dify2OpenaiApi ──(Dify 格式)──> Dify /chat-messages
       <──(OpenAI SSE)──                <──(Dify SSE)──
  • 接收 POST /v1/chat/completions 请求
  • 把请求头里的 Authorization: Bearer <key> 原样转发给 Dify,因此 这里填的 key 就是 Dify 应用的 API Key
  • 取 messages 数组中的最后一条消息作为 query 发给 Dify 的 /chat-messages(streaming 模式)
  • 把 Dify 返回的 message 事件转换成 OpenAI 的 chat.completion.chunk,以 SSE 形式返回,最后发送 data: [DONE]

快速开始

需要 Node.js 18 或更高版本。

git clone <本仓库地址>
cd Dify2OpenaiApi
npm install

在项目根目录创建 .env:

# Dify API 地址(必填),例如 Dify 云服务:
DIFY_API_URL=https://api.dify.ai/v1
# 监听端口(可选,默认 3000)
PORT=3000

启动:

npm start

使用示例

curl

curl http://localhost:3000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer app-xxxxxxxxxxxxxxxx" \
  -d '{
    "model": "dify",
    "messages": [{"role": "user", "content": "你好"}],
    "stream": true
  }'

OpenAI Node.js SDK

import OpenAI from 'openai';

const openai = new OpenAI({
  apiKey: 'app-xxxxxxxxxxxxxxxx', // Dify 应用的 API Key
  baseURL: 'http://localhost:3000/v1',
});

const stream = await openai.chat.completions.create({
  model: 'dify',
  messages: [{ role: 'user', content: '你好' }],
  stream: true,
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content || '');
}

第三方客户端

在客户端里把 API 地址设为 http://<你的服务器>:3000,API Key 填 Dify 应用的 API Key 即可。model 可以随便填,服务只会把它原样写回响应。

环境变量

变量 必填 默认值 说明
DIFY_API_URL 是 — Dify API 基础地址,会在后面拼接 /chat-messages
PORT 否 3000 服务监听端口

当前限制

  • 只支持流式返回:不论请求里 stream 是否为 true,都以 SSE 形式返回
  • 不支持多轮对话:Dify 用 conversation_id 维护上下文,本服务每次都新建会话,只发送最后一条消息,之前的 messages 会被忽略
  • 只支持 Dify 的对话型应用(调用 /chat-messages 接口),不支持文本生成型应用
  • inputs 固定为空对象,user 固定为 apiuser
  • 只实现了 /v1/chat/completions,没有 /v1/models 等其他接口
  • 每个请求都会把请求头和请求体打印到控制台(包括 Authorization),生产环境请注意日志安全

License

ISC

About

将 Dify API 接口转换成OpenAI Chat Completions格式

Resources

Stars

22 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages