Dify 接入本地嵌入模型(FastAPI+SentenceTransformer)
·
文章目录
本地嵌入模型调用成功

一、本地 Embedding 服务搭建(FastAPI + BGE-M3)
直接使用 SentenceTransformer + FastAPI 搭建本地向量模型服务,完全兼容 Dify OpenAI 格式。
1. 安装依赖
pip install torch fastapi uvicorn sentence-transformers transformers huggingface-hub pyyaml
2. 完整运行代码(注意 OpenAI 返回格式)
重点:必须严格返回 OpenAI 格式,否则 Dify 会报 list index out of range
import os
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
from fastapi import FastAPI
from sentence_transformers import SentenceTransformer
import uvicorn
app = FastAPI()
# 加载模型
model = SentenceTransformer(
"BAAI/bge-m3",# 下载的模型名称
cache_folder="./model"# 下载至工作目录
)
# 定义接口地址
@app.post("/v1/embeddings")
def create_embedding(data: dict):
input_data = data.get("input", [])
# 转列表
if isinstance(input_data, str):
texts = [input_data]
else:
texts = input_data
# 生成向量
embeddings = model.encode(texts, normalize_embeddings=True).tolist()
# 严格 OpenAI 格式(必须这样写,否则报错)
return {
"object": "list",
"data": [
{
"object": "embedding",
"embedding": emb,
"index": i
} for i, emb in enumerate(embeddings)
],
"model": "BAAI/bge-m3", # 下载的模型名称
"usage": {
"prompt_tokens": len(texts),
"completion_tokens": 0,
"total_tokens": len(texts)
}
}
# 启动服务
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=6008)
3. 启动服务
第一次运行会下载向量模型,耐心等待
python embedding_server.py
服务地址:
http://localhost:6008/v1/embeddings
二、Dify 添加本地嵌入模型(关键步骤)
1. 模型供应商 → 选择 OpenAI API 兼容
2. 模型设置
Base URL:http://host.docker.internal:6008/v1
API Key:随便填(如 123456)
模型名称:BAAI/bge-m3" # 或者你下载的模型名称
其他可根据模型与本机配置自行设置

3. 为什么必须用 host.docker.internal
- 因为 Dify 运行在 Docker 容器内,容器网络是隔离的
127.0.0.1→ 指向容器自己,不是你的电脑localhost→ 同样指向容器内部host.docker.internal→ Docker 提供的专用地址,指向真实宿主机
所以**本地启的服务,Dify 容器内必须用 host.docker.internal 才能访问,否则会报错:
Connection refused
111: Connection refused
Max retries exceeded
三、为什么会报:list index out of range
99% 的原因:返回格式不是标准 OpenAI 格式,Dify 解析 Embedding 响应时,严格要求:
- 顶层
object: list data数组里每个对象必须带:object: embeddingembedding: 向量数组index: 序号
- 必须带
usage字段
缺少任何一个,都会直接下标越界报错!
四、Dify 版本重要 Bug 说明
我在实际部署中测试了 1.10.0 / 1.12.1 / 1.13.3 三个版本:
1. 问题现象
在使用 Agent / 工作流时,1.12.1、1.13.3 在使用LLM调用Stability Tool的时候,前端直接崩溃。
2. 推测原因
可能是 前端 mimetype / 格式解析 出现问题,我没有深入定位源码,但表现非常统一:
- 发请求 → 后端正常返回
- 前端直接崩掉
3. 解决方案
回退到 1.10.0 版本,问题完全消失!
git checkout 1.10.0
docker compose down && docker compose up -d --build
根据实测:
- 1.10.0 暂时还没发现问题(无前端崩溃、无索引异常、无模式 bug)
- 1.12.1、1.13.3 均存在前端渲染异常
- 如无新功能需求,建议使用 1.10.0 生产环境
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)