4k star!升级版OneAPI,助力 Dify 兼容 OpenAI 格式

最近用 dify 搭建了不少智能体,不过 dify 有一个缺陷。

相信用过的朋友会有同样的感受:它的 API 和 Open AI 不兼容

这就导致一个应用中,用到 dify 的地方,还必须重新写一套 LLM 的调用逻辑。

很是麻烦,怎么搞?

前段时间,和大家分享过大模型分发和管理神器 OneAPI:

所有大模型一键封装成OpenAI协议

并接入了多款大模型 API:

盘点 9 家免费且靠谱的AI大模型 API,统一封装,任性调用!

实现一个接口聚合不同的大模型,再统一转换为 OpenAI 的 API,遗憾的是不支持 Dify 接入

最近看到一款开源项目 NewAPI:对 OneAPI 进行了二次开发,实现了对 Dify 的支持。终于,Dify API 也可以通过 OpenAI 统一分发了!

话不多说,上实操!

1. 服务部署

项目:https://github.com/Calcium-Ion/new-api

推荐使用 docker 部署:

数据库使用 SQLite 的部署命令

docker run -d --name newapi --restart always -p 3007:3000 -e TZ=Asia/Shanghai -v ./data:/data calciumion/new-api:latest

当然,也支持 Docker Compose 的方式:

# 先下载项目到本地
git clone https://github.com/Calcium-Ion/new-api.git
# 然后修改 docker-compose.yml 文件
# 最后启动
docker-compose up -d

2. NewAPI 使用

2.1 登录

本地浏览器通过 IP + 端口的形式进行访问,初始账号密码:root 123456。

2.2 渠道

相信用过 OneAPI 的朋友,应该不陌生:渠道用于添加不同厂商的大模型。

点击「控制台-渠道-添加渠道」,在支持的渠道里选择 Dify:

然后,在代理这里:需填入 dify 的 IP地址+端口号。

注意:图中的http://host.docker.internal:3006 用于从Docker容器内部访问宿主机的网络,不过只能在Windows和Mac版本的 Docker 中使用。Linux 用户需要改为本机的 IP 地址(同一局域网内即可,无需公网 IP)。

清空下方所有模型,填入模型名称 dify:

然后,在最下方填入 dify 应用中获取的密钥:

最后,来测试一下吧,一般只要 IP+端口号没问题,这里都能通过:

此外,New API 完美兼容 OneAPI 的数据库,可直接迁移 OneAPI 的数据库(one-api.db),无需同时维护OneAPI 和 NewAPI 两个项目。

2.3 PlayGround

相比 Dify,作者贴心地新增了 PlayGround,方便可视化模型效果。

模型选择我们之前在 Dify 上搭建的搜索引擎智能体:

2.4 令牌

要在本地客户端调用,还需一个 api_key。添加令牌:

2.5 更多

此外,相比 OneAPI,NewAPI 这个项目还增加了更多实用功能,比如下方的调用量数据看板,同时也增加了支付接口,新一代大模型网关与AI资产管理系统,当之无愧!

写在最后

本文介绍了大模型接口管理工具-NewAPI,除了 Dify 之外,还支持 Midjourney 绘图接口。有需要的朋友快去试试。

如果对你有帮助,欢迎点赞收藏备用。


为方便大家交流,新建了一个 AI 交流群,公众号后台「联系我」,拉你进群。

### 修改 Dify API 以适应 OpenAI 接口标准 为了使 Dify API 能够与 OpenAI 的接口标准兼容,主要工作集中在调整请求路径、参数名称以及响应格式上。以下是具体实现方法: #### 请求路径适配 OpenAI 提供了一系列标准化的API端点用于不同类型的交互操作。对于大多数情况而言,这些端点遵循特定模式,例如 `/v1/completions` 或者 `/v1/chat/completions`。 针对这一点,在调用 Dify API 时可以创建代理层来映射来自客户端发出的标准 OpenAI 风格 URL 到实际对应的内部服务地址[^1]。 ```python from fastapi import FastAPI, Request import requests app = FastAPI() @app.post("/v1/{path:path}") async def proxy_openai(request: Request, path: str): body = await request.json() # 将接收到的数据转发给真实的Dify服务器 response = requests.post( f"http://localhost:8000/api/{path}", json=body) return response.json() ``` 此代码片段展示了如何设置一个简单的FastAPI应用程序作为中间件,它接收符合OpenAI风格URL结构的HTTP POST请求并将它们重定向到运行中的Dify实例。 #### 参数名转换 由于两个平台之间可能存在差异化的命名约定,因此还需要考虑对传入参数进行必要的转换处理。这通常涉及到字段重命名或结构调整等工作。可以通过编写自定义函数来进行此类变换逻辑的设计和实施[^2]。 ```python def transform_params(params): transformed = {} mapping = { 'prompt': 'input_text', 'max_tokens': 'response_length' # 添加其他需要转换的键值对... } for key, value in params.items(): if key in mapping: new_key = mapping[key] transformed[new_key] = value else: transformed[key] = value return transformed ``` 上述Python函数接受原始输入字典并返回一个新的经过转换后的版本,其中包含了适合传递给目标系统的参数集。 #### 响应数据格式化 最后一步是对从Dify获取的结果进行适当加工,使其外观更接近于预期由OpenAI产生的输出形式。这可能涉及到了解两者间存在的任何细微差别,并据此作出相应调整。 ```json { "id": "cmpl-uqkvlQyHxEWb6swHLk4XeDRK", "object": "text_completion", "created": 1589478378, "model": "text-davinci-003", "choices": [ { "text": "...", "index": 0, "logprobs": null, "finish_reason": "length" } ], "usage": {"prompt_tokens": 5, "completion_tokens": 7, "total_tokens": 12} } ``` 理想情况下,应该确保最终呈现出来的JSON对象尽可能贴近官方文档所描述的样子,从而减少下游消费者理解上的障碍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值