基于One API 将本地 Ollama 模型接入 FastGPT

基于One API 将本地 Ollama 模型接入 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.ymlconfig.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

通过上述小结的描述,已经基本了解OllamaOne APIFastGPT的配置和使用。在本小结将融合这三个技术,实现一个简单的对话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 APIFastGPT部署到同一网络下,所以在启动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 APIOllama已经连通。

向量模型不需要测试成功,因为此处的测试按钮实际是发送了一条Chat对话的Message格式。当你把一个向量模型(nomic-embed-text)强行当作对话模型使用时,Ollama 无法在向量模型中找到处理"对话角色(role/user)"的逻辑,因此直接返回了400 Bad Request

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

随后,我们复制令牌的KEY

将One API接入FastGPT

在之前的使用Docker部署FastGPT小结,我们已经成功下载了docker-compose.ymlconfig.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_ENDPOINTServer 端 连接(容器间通信),所以用 fastgpt-minioS3_EXTERNAL_BASE_URLClient 端 连接(浏览器上传),所以必须用 宿主机 IP ,否则浏览器无法解析 fastgpt-minio 这个容器名。

相关推荐
zuozewei19 小时前
零基础 | 基于LangChain的角色扮演聊天机器人实现
python·langchain·机器人
石去皿19 小时前
从本地知识库到“活”知识——RAG 落地全景指南
c++·python·大模型·rag
猫头虎19 小时前
Claude Code 永动机:ralph-loop 无限循环迭代插件详解(安装 / 原理 / 最佳实践 / 避坑)
ide·人工智能·langchain·开源·编辑器·aigc·编程技术
言之。21 小时前
LangChain短期内存系统
microsoft·langchain
xinxin本尊1 天前
使用langchain创建一个ReAct能力的agent
langchain
小小工匠1 天前
LLM - 从通用对话到自治智能体:Agent / Skills / MCP / RAG 三层架构实战
agent·rag·skill·mcp
言之。1 天前
LangChain 模型模块使用详解
python·langchain·flask
田井中律.1 天前
AI大模型之Agent,RAG,LangChain(二)
langchain
linmoo19862 天前
Langchain4j 系列之十一 - 工具调用(AI Services)
人工智能·langchain·工具·langchain4j·toolcall·tool calling