Skip to content

OpenDify 是一个将 Dify API 转换为 OpenAI API 格式的代理服务器。它允许使用 OpenAI API 客户端直接与 Dify 服务进行交互,支持保持会话历史。OpenDify is a proxy server that transforms the Dify API into OpenAI API format. It allows direct interaction with Dify services using any OpenAI API client.

Notifications You must be signed in to change notification settings

lzskyline/OpenDify

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenDify

OpenDify 是一个将 Dify API 转换为 OpenAI API 格式的代理服务器。它允许使用 OpenAI API 客户端直接与 Dify 服务进行交互。

🌟 本项目完全由AI自动生成,未手动编写任何代码(包括此Readme),向 AI 辅助编程的未来致敬!

English Version

功能特点

  • 完整支持 OpenAI API 格式转换为 Dify API
  • 支持流式输出(Streaming)
  • 智能动态延迟控制,提供流畅的输出体验
  • 支持多种会话记忆模式,包括零宽字符模式和history_message模式
  • 支持 OpenAI Function Call 和 MCP Server 功能
  • 支持图片附件上传:自动处理包含图片的多模态请求,支持视觉模型
  • 支持多个模型配置
  • 支持Dify Agent应用,处理高级工具调用(如生成图片等)
  • 兼容标准的 OpenAI API 客户端
  • 自动获取 Dify 应用信息

效果展示

Function Call 和 MCP Server 支持

新增对 OpenAI Function Call 和 MCP Server 的支持,即使 Dify 不支持直接设置系统提示词:

  • 自动检测请求中的 system 角色消息
  • 智能将系统提示词插入到用户查询中
  • 防止重复插入系统提示词
  • 完美兼容 OpenAI 的 Function Call 格式

Function Call 支持示例

上图展示了 OpenDify 对 Function Call 的支持。即使 Dify 应用不支持直接设置系统提示词,通过 OpenDify 的转换,也能正确处理 MCP Server 及 Function Call 的需求。

Dify Agent应用支持

Dify Agent应用截图

截图展示了OpenDify代理服务支持的Dify Agent应用界面,可以看到Agent成功地处理了用户的Python多线程用法请求,并返回了相关代码示例。

会话记忆功能

Dify会话记忆功能截图

上图展示了OpenDify的会话记忆功能。当用户提问"今天是什么天气?"时,AI能够记住之前对话中提到"今天是晴天"的上下文信息,并给出相应回复。

图片附件支持

OpenDify 现在支持处理包含图片的多模态请求,自动将图片上传到 Dify 平台并正确传递给支持视觉的模型。

图片附件支持示例

上图展示了 OpenDify 对图片附件的支持。系统会自动检测请求中的图片内容,将其上传到 Dify 平台,并在请求中正确引用上传的文件。

⚠️ 重要提醒

  1. Dify 平台限制:当前 Dify 平台仅支持图片类型的附件上传,请确保上传的文件为 PNG、JPG、JPEG、WEBP 或 GIF 格式。

  2. Cherry Studio 客户端设置:如果您使用的是 Cherry Studio 客户端,请确保在模型设置中启用了视觉支持(参考下图),否则客户端不会发送任何附件内容到 API。

Cherry Studio 视觉支持设置

  1. Dify 平台视觉设置:同时请确保在 Dify 平台上对应的模型也已勾选开启视觉功能,否则平台侧不会响应任何图片内容。

Dify 平台视觉功能设置

特性

会话记忆功能

该代理支持自动记忆会话上下文,无需客户端进行额外处理。提供了两种会话记忆模式:

  1. history_message模式:将历史消息直接附加到当前消息中,支持客户端编辑历史消息(默认)
  2. 零宽字符模式:在每个新会话的第一条回复中,会自动嵌入不可见的会话ID,后续消息自动继承上下文

可以通过环境变量控制此功能:

# 在 .env 文件中设置会话记忆模式
# 1: 构造history_message附加到消息中的模式(默认)
# 2: 零宽字符模式
CONVERSATION_MEMORY_MODE=1

默认情况下使用history_message模式,这种模式更灵活,支持客户端编辑历史消息,并能更好地处理系统提示词。

注意:history_message模式会将所有历史消息追加到当前消息中,可能会消耗更多的token。

流式输出优化

  • 智能缓冲区管理
  • 动态延迟计算
  • 平滑的输出体验

配置灵活性

  • 自动获取应用信息
  • 简化的配置方式
  • 动态模型名称映射

支持的模型

支持任意 Dify 应用,系统会自动从 Dify API 获取应用名称和信息。只需在配置文件中添加应用的 API Key 即可。

API 使用

List Models

获取所有可用模型列表:

import openai

openai.api_base = "http://127.0.0.1:5000/v1"
openai.api_key = "sk-abc123"  # 使用配置的有效API Key

# 获取可用模型列表
models = openai.Model.list()
print(models)

# 输出示例:
{
    "object": "list",
    "data": [
        {
            "id": "My Translation App",  # Dify 应用名称
            "object": "model",
            "created": 1704603847,
            "owned_by": "dify"
        },
        {
            "id": "Code Assistant",  # 另一个 Dify 应用名称
            "object": "model",
            "created": 1704603847,
            "owned_by": "dify"
        }
    ]
}

系统会自动从 Dify API 获取应用名称,并用作模型 ID。

Chat Completions

import openai

openai.api_base = "http://127.0.0.1:5000/v1"
openai.api_key = "sk-abc123"  # 使用配置的有效API Key

response = openai.ChatCompletion.create(
    model="My Translation App",  # 使用 Dify 应用的名称
    messages=[
        {"role": "user", "content": "你好"}
    ],
    stream=True
)

for chunk in response:
    print(chunk.choices[0].delta.content or "", end="")

快速开始

环境要求

  • Python 3.9+
  • pip

安装依赖

pip install -r requirements.txt

配置

  1. 复制 .env.example 文件并重命名为 .env
cp .env.example .env
  1. 在 Dify 平台配置应用:

    • 登录 Dify 平台,进入工作室
    • 点击"创建应用",配置好需要的模型(如 Claude、Gemini 等)
    • 配置应用的提示语和其他参数
    • 发布应用
    • 进入"访问 API"页面,生成 API 密钥

    重要说明:Dify 不支持在请求时动态传入提示词、切换模型及其他参数。所有这些配置都需要在创建应用时设置好。Dify 会根据 API 密钥来确定使用哪个应用及其对应的配置。系统会自动从 Dify API 获取应用的名称和描述信息。

  2. .env 文件中配置你的 Dify API Keys:

# Dify API Keys Configuration
# Format: Comma-separated list of API keys
DIFY_API_KEYS=app-xxxxxxxx,app-yyyyyyyy,app-zzzzzzzz

# Dify API Base URL
DIFY_API_BASE="https://your-dify-api-base-url/v1"

# OpenAI Compatible API Keys (for client authentication)
VALID_API_KEYS="sk-abc123,sk-def456"

# Server Configuration
SERVER_HOST="127.0.0.1"
SERVER_PORT=5000

配置说明:

  • DIFY_API_KEYS:以逗号分隔的 API Keys 列表,每个 Key 对应一个 Dify 应用
  • VALID_API_KEYS:客户端连接时使用的有效 API Keys,以逗号分隔
  • 系统会自动从 Dify API 获取每个应用的名称和信息

运行服务

python main.py

服务将在 http://127.0.0.1:5000 启动

贡献指南

欢迎提交 Issue 和 Pull Request 来帮助改进项目。

许可证

MIT License

About

OpenDify 是一个将 Dify API 转换为 OpenAI API 格式的代理服务器。它允许使用 OpenAI API 客户端直接与 Dify 服务进行交互,支持保持会话历史。OpenDify is a proxy server that transforms the Dify API into OpenAI API format. It allows direct interaction with Dify services using any OpenAI API client.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages