# j-dify2openai **Repository Path**: zjwan461/j-dify2openai ## Basic Information - **Project Name**: j-dify2openai - **Description**: JDify2OpenAI 是一个基于 Spring Boot 3 开发的接口适配器,可将 OpenAI 格式的请求转换为 Dify 平台的请求格式,并将 Dify 的响应转换为 OpenAI 兼容格式(支持流式响应)。适用于需要将现有 OpenAI 客户端 / 应用无缝对接 Dify 平台的场景 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-11-29 - **Last Updated**: 2025-12-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # JDify2OpenAI: Dify 转 OpenAI 接口适配器 JDify2OpenAI 是一个基于 Spring Boot 3 开发的接口适配器,可将 OpenAI 格式的请求转换为 Dify 平台的请求格式,并将 Dify 的响应转换为 OpenAI 兼容格式(支持流式响应)。适用于需要将现有 OpenAI 客户端/应用无缝对接 Dify 平台的场景。 ## ✨ 核心功能 - **请求/响应格式转换**:自动将 OpenAI Chat Completions 请求转换为 Dify 聊天接口格式,响应转换为 OpenAI 兼容格式 - **流式响应支持**:完全兼容 OpenAI 流式响应规范(`data: {JSON}\n\n`),支持实时增量返回内容 - **Redis 映射管理**:通过 Redis 存储 `chat_id` 与 Dify `conversation_id` 的映射关系,支持多实例共享会话 - **调试接口**:提供映射关系查询、删除接口,便于问题排查 - **健康检查**:提供应用、Dify API、Redis 健康状态接口 ## 📋 技术栈 - 框架:Spring Boot 3 + Spring WebFlux(流式响应) - 存储:Redis(会话映射) - 构建:Maven - 部署:Docker + Docker Compose ## 🚀 快速开始 ### 1. 环境准备 - JDK 17+(本地开发) - Maven 3.6+(本地开发) - Docker + Docker Compose(部署) - Dify 平台:已部署 Dify 服务并获取 API Key - Redis:Docker Compose 会自动部署(或使用已有 Redis) ### 2. 本地开发 #### 克隆项目 ```bash git clone https://your-repo/jdify2openai.git cd jdify2openai ``` #### 配置文件 修改 `src/main/resources/application-dev.yml`: ```yaml spring: data: redis: url: redis://localhost:6379/0 # 本地 Redis 地址 dify: api-url: http://localhost:3000/v1/chat-messages # 本地 Dify 接口地址 api-key: sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # 你的 Dify API Key ``` #### 启动项目 ```bash mvn spring-boot:run ``` ### 3. Docker 部署 #### 配置环境变量 创建 `.env` 文件(与 `docker-compose.yml` 同级): ```env # Dify 配置 DIFY_API_URL=https://your-dify-domain/v1/chat-messages DIFY_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx DIFY_TIMEOUT=600 # Redis 配置 REDIS_PASSWORD=your-redis-password # 建议生产环境设置 MAPPING_EXPIRE_HOURS=24 # 应用配置 SPRING_PROFILES_ACTIVE=prod SERVER_PORT=8080 ``` #### 启动服务 ```bash # 构建镜像并启动(首次启动) docker-compose up -d --build # 后续启动(无需重新构建) docker-compose up -d ``` ## 🔌 接口使用 ### 1. OpenAI 兼容接口 #### 聊天完成(流式) ```bash curl -X POST http://localhost:8080/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer sk-your-dify-api-key" \ -d '{ "model": "gpt-3.5-turbo", "messages": [{"role": "user", "content": "你好"}], "stream": true, "chat_id": "test-chat-123" }' ``` #### 聊天完成(非流式) ```bash curl -X POST http://localhost:8080/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer sk-your-dify-api-key" \ -d '{ "model": "gpt-3.5-turbo", "messages": [{"role": "user", "content": "你好"}], "stream": false, "chat_id": "test-chat-123" }' ``` ### 2. 调试接口 #### 查看所有会话映射 ```bash curl http://localhost:8080/v1/chat/mappings ``` #### 删除指定会话映射 ```bash curl -X DELETE http://localhost:8080/v1/chat/mappings/test-chat-123 ``` ### 3. 健康检查 ```bash curl http://localhost:8080/health ``` ## 📁 项目结构 ``` jdify2openai/ ├── src/ │ ├── main/ │ │ ├── java/com/itsu/jdify2openai/ │ │ │ ├── Jdify2openaiApplication.java # 启动类 │ │ │ ├── config/ # 配置类(Dify/Redis/WebClient) │ │ │ ├── controller/ # 接口控制器(聊天/调试/健康检查) │ │ │ ├── dto/ # 数据传输对象(OpenAI/Dify 请求/响应) │ │ │ └── service/ # 业务逻辑(请求转换/Redis 映射) │ │ └── resources/ │ │ ├── application.yml # 主配置 ├── Dockerfile # 镜像构建文件 ├── docker-compose.yml # 一键部署配置 ├── pom.xml # Maven 依赖配置 └── README.md # 项目说明 ``` ## ⚙️ 配置说明 核心配置项(通过 `.env` 或 `application.yml` 设置): | 配置项 | 说明 | |-----------------------|----------------------------------------------------------------------| | `DIFY_API_URL` | Dify 聊天接口地址(例:`https://dify.example.com/v1/chat-messages`) | | `DIFY_API_KEY` | Dify API Key(从 Dify 后台「设置 > API 密钥」获取) | | `SPRING_DATA_REDIS_URL` | Redis 连接地址(例:`redis://redis:6379/0`) | | `REDIS_PASSWORD` | Redis 密码(无密码则留空) | | `REDIS_KEY_PREFIX` | Redis 映射 Key 前缀(默认:`dify:openai:mapping:`) | | `MAPPING_EXPIRE_HOURS`| 映射过期时间(单位:小时,默认:24) | | `SERVER_PORT` | 应用端口(默认:8080) | ## 🐛 常见问题 1. **流式响应出现空 `data:` 行**: Dify 响应包含空块,已通过代码过滤,确保仅返回有效内容。 2. **Dify API 401 未授权**: 检查 `DIFY_API_KEY` 是否正确,或请求头中 `Authorization` 是否有效。 3. **Redis 连接失败**: 检查 `SPRING_DATA_REDIS_URL` 和 `REDIS_PASSWORD` 是否与 Redis 配置一致。 ## 📄 许可证 MIT License(可自由修改、分发)