基于One API 将本地 Ollama 模型接入 FastGPT
- 背景知识
-
- Ollama部署本地DeepSeek
- [部署One API大模型网关](#部署One API大模型网关)
- 使用Docker部署FastGPT
-
- [基于One API 将本地 Ollama 模型接入 FastGPT](#基于One API 将本地 Ollama 模型接入 FastGPT)
-
- 使用Ollama下载大模型至本地
- [使用One API配置Ollama模型](#使用One API配置Ollama模型)
- [将One API接入FastGPT](#将One API接入FastGPT)
背景知识
Ollama部署本地DeepSeek
Ollama:https://ollama.com/
在Ollama选择好大模型后可以在terminal运行。例如我们选择deepseek-r1:1.5b,则使用ollama run deepseek-r1:1.5b运行并下载至本地,在终端就会出现与网页大模型交互一样的问答。
http://localhost:11434是Ollama本地服务器默认监听的API入口。
embedding = OllamaEmbeddings(model='nomic-embed-text:latest', base_url='http://localhost:11434')
text_embedding = embedding.embed_query('你好')
print(text_embedding)
llm = ChatOllama(
model='deepseek-r1:1.5b',
base_url='http://localhost:11434'
)
print(llm.invoke('你是谁?'))
部署One API大模型网关
One Api Github: https://github.com/songquanpeng/one-api.git
将/Volumes/franzliszt/Docker/one-api替换为自己电脑存储的路径。如果是Mac M系列需要在one-api的github仓库上寻找适配arm-64架构的版本,然后如下所示拉去对应版本的镜像v0.6.10。没有特殊情况,windows可以不用加这个版本号。
docker run --name one-api -d \
--restart always \
-p 3000:3000 \
-e TZ=Asia/Shanghai \
-v /Volumes/franzliszt/Docker/one-api:/data \
justsong/one-api:v0.6.10
启动docker之后,我们可以访问http://localhost:3000/。在One API界面进行配置项管理。
我们需要到One API中配置所分发的渠道。其中,渠道是指分发给不同的大模型路径。One API只是将用户的请求根据建立的渠道分发给不同的大模型。渠道分发会根据建立渠道的指定模型为优。随后,我们需要在One API中创建一个令牌,后续我们在代码中使用ChatOpenAI客户端时,使用此令牌作为openai_api_key。

Ollama也适配ChatOpenAI,但是需要遵循OpenAI协议,则需要在base_url后面增加一个后缀v1。
llm = ChatOpenAI(
model='deepseek-r1:1.5b',
openai_api_key='sk-qnZhOBAz7GGFkNOrC0A301B45cE142569d5071A1FcF82b81',
base_url='http://localhost:3000/v1'
)
print(llm.invoke('你是谁?'))
使用Docker部署FastGPT
FastGPT文档:https://doc.fastgpt.io/docs/introduction/development/docker
FastGPT Github:https://github.com/labring/FastGPT
brew install orbstack
使用PgVector版本脚本下载docker-compose.yml和config.json文件
# 国内镜像(阿里云)
bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh) --region=cn --vector=pg
# 非国内镜像(dockhub, ghcr)
bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh) --region=global --vector=pg
启动容器
docker-compose up -d
关闭容器
docker-compose down
基于One API 将本地 Ollama 模型接入 FastGPT
通过上述小结的描述,已经基本了解Ollama、One API和FastGPT的配置和使用。在本小结将融合这三个技术,实现一个简单的对话Agent。
使用Ollama下载大模型至本地
# 文本生成模型
ollama run deepseek-r1:1.5b
# 向量模型
ollama pull nomic-embed-text
如果你是采用的主机应用 Ollama 而不是镜像,需要确保你的 Ollama 可以监听0.0.0.0。
- Linxu:如果 Ollama 作为 systemd 服务运行,打开终端,编辑 Ollama 的 systemd 服务文件,使用命令sudo systemctl edit ollama.service,在[Service]部分添加Environment="OLLAMA_HOST=0.0.0.0"。保存并退出编辑器,然后执行sudo systemctl daemon - reload和sudo systemctl restart ollama使配置生效。
- Macos:打开终端,使用
launchctl setenv ollama_host "0.0.0.0"命令设置环境变量,设置允许跨域请求(这对 One-API 非常重要)launchctl setenv OLLAMA_ORIGINS "*"。然后重启 Ollama 应用程序以使更改生效。 - Windows:通过 "开始" 菜单或搜索栏打开 "编辑系统环境变量",在 "系统属性" 窗口中点击 "环境变量",在 "系统变量" 部分点击 "新建",创建一个名为OLLAMA_HOST的变量,变量值设置为0.0.0.0,点击 "确定" 保存更改,最后从 "开始" 菜单重启 Ollama 应用程序。
使用One API配置Ollama模型
通过下列指令查看FastGPT网络名称。
docker network ls
我们需要将One API和FastGPT部署到同一网络下,所以在启动One API容器时,需要指定网络为FastGPT的网络名称。同时,因为FastGPT默认也是使用3000端口。为了避免端口冲突,我们将One API的端口更改为3001。随后,等待启动完毕之后,我们就可以访问One API后台localhost:3001
docker run --name one-api -d \
--network fastgpt_fastgpt \
--restart always \
-p 3001:3000 \
-e TZ=Asia/Shanghai \
-v /Volumes/franzliszt/Docker/one-api:/data \
justsong/one-api:v0.6.10
在One API后台我们只需要做两件事情:(1)配置文本生成模型和向量模型的渠道。(2)生成令牌。
在添加新的渠道时,我们需要注意以下事项:
- 类型选择
Ollama,非强制 - 添加模型必须与
Ollama下载的模型名称一致。可以通过Ollama list指令查看下载的模型列表 - 密钥随便填写,不会生效
- 代理:http://host.docker.internal:11434
代理地址:在 Docker 中,如果 One-API 容器已经和 FastGPT 在同一个网络(fastgpt_fastgpt),使用 http://host.docker.internal:11434 是通过宿主机中转。
宿主机中转网络隔离:你的 One-API 运行在 Docker 容器内部,而 Ollama 运行在你的 Mac 宿主机上。
桥梁作用 :
host.docker.internal是 Docker 专门为容器访问"外面"的宿主机提供的一个特殊域名。中转过程 :当 One-API 向
http://host.docker.internal:11434发送请求时,Docker 引擎会将这个请求转发给宿主机(你的 Mac)的 11434 端口。前提条件 :这正是为什么你之前必须在 Mac 终端执行
launchctl setenv OLLAMA_HOST "0.0.0.0"的原因------只有让 Ollama 监听0.0.0.0,它才会接收来自这个 Docker "中转"过来的请求。
如果文本生成模型点击测试,可以测试通过,说明One API和Ollama已经连通。
向量模型不需要测试成功,因为此处的测试按钮实际是发送了一条Chat对话的Message格式。当你把一个向量模型(nomic-embed-text)强行当作对话模型使用时,Ollama 无法在向量模型中找到处理"对话角色(role/user)"的逻辑,因此直接返回了400 Bad Request。

添加令牌我们唯一需要注意的就是需要将所配置渠道的模型添加到模型范围内。不然当使用FastGPT调用模型时,会出现Token令牌无效异常。

随后,我们复制令牌的KEY

将One API接入FastGPT
在之前的使用Docker部署FastGPT小结,我们已经成功下载了docker-compose.yml和config.json配置文件。我们进入docker-compose.yml文件,使用One API令牌中的KEY替换原有的地址。
在docker-compose.yml文件中找到下列两句,将其注释。
# AI Proxy 的地址,如果配了该地址,优先使用
AIPROXY_API_ENDPOINT: http://aiproxy:3000
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
AIPROXY_API_TOKEN: *x-aiproxy-token
将One API令牌中的KEY填入CHAT_API_KEY中。其中,OPENAI_BASE_URL必须增加v1后缀,以适配OpenAI协议。
OPENAI_BASE_URL: http://one-api:3000/v1
CHAT_API_KEY: sk-qnZhOBAz7GGFkNOrC0A301B45cE142569d5071A1FcF82b81
配置完上述内容,就可以启动FastGPT容器。
docker-compose up -d
FastGPT容器启动成功后,访问FastGPT后台localhost:3001。可以在账号-模型提供商-模型配置中配置Ollama中的本地模型。一般是配置文本生成模型和向量模型即可。添加完成之后,可以添加知识库内容和体验对话应用。

但是我在使用知识库添加本地文件时,出现了一些异常。
解决FastGPT中minio数据库无法保存文件的问题
当我在FastGPT的知识库中上传文件时,出现下列错误。即FastGPT 在尝试连接 MinIO以获取上传授权时失败了。
[Error] 2026-01-06 10:23:55 System unexpected error: /api/core/dataset/presignDatasetFilePostUrl, Failed to create post presigned url
{ message: 'Failed to create post presigned url', stack: undefined }
获取当前主机的ip地址,因为我连的wifi可以通过下列方式获取。
ipconfig getifaddr en0
更通用的方式
ifconfig | grep "inet " | grep -v 127.0.0.1
随后,我们打开之前下载的FastGPT配置文件docker-compose.yml。将S3_EXTERNAL_BASE_URL配置项的https://minio.com替换为你的ip地址
# S3_EXTERNAL_BASE_URL: https://minio.com # S3 的公网访问地址
S3_EXTERNAL_BASE_URL: http://10.2.42.182:9000
S3_ENDPOINT 是 Server 端 连接(容器间通信),所以用 fastgpt-minio;S3_EXTERNAL_BASE_URL 是 Client 端 连接(浏览器上传),所以必须用 宿主机 IP ,否则浏览器无法解析 fastgpt-minio 这个容器名。