Dify_专题二_Xinference运行bge-m3_cursor.md
这是基于原文生成的 Cursor 版文档。
原文件未改动;本版只做三件事:统一阅读入口、修正已审出的明显问题、补充更适合快速排障的提示。
Cursor 版修订说明
- 补充提醒:若启用了 Xinference 鉴权,则文中的 API 调用示例需要自行补上认证头。
- 保留原排障经验,但将其视为特定环境实录,不把真实凭据视为通用默认值。
阅读提示
- 若正文中的容器名、目录名、IP 与你的环境不一致,请以实际
docker ps、docker compose ps、目录结构为准。 - 若正文属于“本次实战记录”,应理解为环境实录,不等同于所有环境的唯一正确默认值。
运行环境:业务脚本均在 207 固定目录
/opt/workbuddy执行,Python 为/usr/bin/python3。 Windows 开发机仅保留_probe_*调试脚本;同步命令:python scripts_cursor/完整代码约定/00_部署_workbuddy到207.py。
原文主体(已纳入 Cursor 版纠错)
专题二:Xinference 平台如何成功运行 bge-m3 模型
阅读导航(何时打开 · 报错往哪查)
本文是单点修复/排障专题,配合《安装配置手册》使用;下文实战步骤与代码全部保留,此处只做索引。
| 现象 | 优先看本文 | 还可能是 |
|---|---|---|
| Xinference 容器在跑但无模型 | §0、§四 launch | 安装手册步骤 8 |
| launch 失败 / 无 embedding | §二 依赖 | pip sentence-transformers |
| Dify 测 embedding 失败 | §六 对接 | URL 勿带 /v1 |
| 知识库索引失败 | §五 验证 1024 维 | 专题六 weaviate |
专题目标:讲清楚 Xinference 是怎么把 bge-m3 跑起来的——从容器部署、依赖安装、显式启动模型,到验证它在对外服务。涉及的所有命令、配置、代码都直接写在文中。
环境:Xinference 跑在
192.168.110.207:9997,bge-m3 的model_uid固定为bge-m3,供 Dify 当作默认 Embedding 使用。
0. 一个必须先理解的点:容器起来 ≠ 模型在跑
Xinference 是一个模型调度/推理服务平台。启动 Xinference 容器只是把"调度器"拉起来了,bge-m3 此时还没有被加载。要真正对外提供 embedding 服务,必须再显式启动(launch)一次模型——Xinference 才会分配资源、把权重加载进内存/显存,并注册成一个可调用实例。
所以"成功运行 bge-m3" = Xinference 容器运行中 + bge-m3 实例状态为 running。下面按这个链路讲。
一、部署 Xinference 容器
完整脚本:scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_01.sh
运行/引用:bash /opt/workbuddy/scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_01.sh
#!/usr/bin/env bash
set -euo pipefail
docker run -d \
--name xinference \
--restart always \
-p 9997:9997 \
-e HF_ENDPOINT=https://hf-mirror.com \
xprobe/xinference:latest配置说明:
-p 9997:9997:Xinference 默认 RESTful/Web 端口就是9997。-e HF_ENDPOINT=https://hf-mirror.com:国内网络关键配置。Xinference 默认从 HuggingFace 拉权重,国内直连极慢或超时;设成镜像源后拉取正常。- 如需让 bge-m3 用 GPU 推理(更快),加
--gpus all;纯 CPU 也能跑,只是索引大文档时较慢。 - 镜像用
latest;起稳后可docker images查 digest 固定版本。
启动后确认服务在线: 完整脚本:scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_02.sh
运行/引用:bash /opt/workbuddy/scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_02.sh
#!/usr/bin/env bash
set -euo pipefail
docker logs -f xinference # 看到 Uvicorn running on http://0.0.0.0:9997 即就绪二、安装 bge-m3 运行依赖(容器内)
bge-m3 依赖 sentence-transformers(底层用 transformers + FlagEmbedding)。Xinference 基础镜像不一定预装,必须进容器补装,否则启动模型会失败:
完整脚本:scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_03.sh
运行/引用:bash /opt/workbuddy/scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_03.sh
#!/usr/bin/env bash
set -euo pipefail
docker exec -it xinference pip install sentence-transformers国内环境若
pip也慢,可先设镜像:docker exec -it xinference pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple,再装。
装完确认: 完整脚本:scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_04.sh
运行/引用:bash /opt/workbuddy/scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_04.sh
#!/usr/bin/env bash
set -euo pipefail
docker exec -it xinference python -c "import sentence_transformers; print(sentence_transformers.__version__)"三、创建 Xinference 管理员账号
Xinference 启用了鉴权,需先建账号(本文 admin / admin1234)。可通过 Web UI 注册,也可通过内置管理接口。建好后在 Dify 对接时填入对应 API Key。
Dify 对接用的 API Key 形如
xf-K8H3LiS27H4188XdOyWJj74MWMOlIR9tZbiybDbxbSas7eAI,在 Xinference 用户中心生成。
四、启动 bge-m3 模型(三种等价方式)
不管用哪种方式,核心都是向 Xinference 提交一次"启动 embedding 模型"的请求,并把 model_uid 固定为 bge-m3——Dify 之后要靠这个 uid 匹配模型。
方式 A · Web UI(最直观)
- 浏览器打开
http://192.168.110.207:9997,用admin / admin1234登录。 - 左侧 Models → Launch Model。
- 搜索框输入
bge-m3,在结果里选中(模型类型显示为embedding)。 - 展开高级选项,把 Model UID 设为
bge-m3(务必与此一致)。 - 点 Launch,等待状态从
pending→running(首次会拉权重,已配 HF 镜像源)。 - Models 列表出现
bge-m3行、状态running,即启动成功。
方式 B · REST API(可脚本化,推荐用于自动化)
启动(必须带 model_type: "embedding"):
完整脚本:scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_05.sh
运行/引用:bash /opt/workbuddy/scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_05.sh
#!/usr/bin/env bash
set -euo pipefail
curl -X POST 'http://192.168.110.207:9997/v1/models' \
-H 'Content-Type: application/json' \
-d '{
"model_uid": "bge-m3",
"model_name": "bge-m3",
"model_type": "embedding"
}'可选的进阶启动参数(按需添加到 body):
{
"model_uid": "bge-m3",
"model_name": "bge-m3",
"model_type": "embedding",
"model_format": "pytorch",
"model_engine": "default",
"n_gpu": "auto"
}n_gpu:指定用几张卡,"auto"表示自动;CPU 环境删掉此项即可。model_engine:默认default即可,Xinference 会选适配 bge-m3 的引擎。
返回 JSON 里会带回 model_uid(即 bge-m3),表示已接受启动任务。
方式 C · Python 客户端
完整程序:/opt/workbuddy/scripts_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_01.py
运行/引用:/usr/bin/python3 /opt/workbuddy/scripts_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_01.py
from xinference.client import Client
client = Client("http://192.168.110.207:9997")
# 返回启动后的 model_uid
uid = client.launch_model(
model_uid="bge-m3",
model_name="bge-m3",
model_type="embedding",
)
print("launched:", uid)五、验证 bge-m3 确实在对外服务
1. 看模型列表里有没有它(且 running): 完整脚本:scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_06.sh
运行/引用:bash /opt/workbuddy/scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_06.sh
#!/usr/bin/env bash
set -euo pipefail
curl 'http://192.168.110.207:9997/v1/models'
# 期望返回里含 "bge-m3"2. 实跑一次 embedding,确认真能出向量(最关键的一步): 完整脚本:scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_07.sh
运行/引用:bash /opt/workbuddy/scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_07.sh
#!/usr/bin/env bash
set -euo pipefail
curl -X POST 'http://192.168.110.207:9997/v1/embeddings' \
-H 'Content-Type: application/json' \
-d '{
"model": "bge-m3",
"input": "这是一个测试文本"
}'期望返回:
{
"model": "bge-m3",
"data": [
{ "object": "embedding", "index": 0, "embedding": [0.012, -0.034, ...] }
],
"usage": { "prompt_tokens": 8, "total_tokens": 8 }
}embedding 数组长度 = bge-m3 的向量维度(1024 维),能返回即"成功运行"。
补充:bge-m3 还支持重排(rerank)能力。若需要,可另启动一个
model_type: "rerank"的实例(uid 如bge-reranker),在 Dify 知识库召回后做精排。本文聚焦 embedding,rerank 为可选扩展。
六、在 Dify 中对接(衔接"让知识库用上它")
Xinference 里 bge-m3 跑起来后,到 Dify 接入:
控制台 → 模型供应商 → 添加 Xinference:
- 服务器 URL:
http://192.168.110.207:9997(不要带/v1,插件会自动拼接) - 模型 UID:
bge-m3 - API Key:
xf-K8H3LiS27H4188XdOyWJj74MWMOlIR9tZbiybDbxbSas7eAI - 选中
bge-m3并设为默认 Embedding
本次实操等价控制台 API(模型供应商页找不到或想自动化时用这一段;路径与专题十三加 Rerank 相同,只是 model_type=embedding):
完整程序:/opt/workbuddy/scripts_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_02.py
运行/引用:/usr/bin/python3 /opt/workbuddy/scripts_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_02.py
from dify_api import Dify, pp
XF_KEY = "xf-K8H3LiS27H4188XdOyWJj74MWMOlIR9tZbiybDbxbSas7eAI"
d = Dify("38205036@qq.com", "Difyai123456")
d.login()
body = {
"model": "bge-m3",
"model_type": "embedding",
"credentials": {
"server_url": "http://192.168.110.207:9997",
"model_uid": "bge-m3",
"api_key": XF_KEY,
"invoke_timeout": "60",
"max_retries": "3",
},
"name": "bge-m3",
}
r = d.post(
"/workspaces/current/model-providers/langgenius/xinference/xinference/models/credentials",
body,
)
pp("add embedding cred", r) # 期望 200/201
r = d.get("/workspaces/current/models/model-types/text-embedding")
pp("embedding models", r)
r = d.post(
"/workspaces/current/default-model",
body={
"model_settings": [{
"model_type": "text-embedding",
"provider": "langgenius/xinference/xinference",
"model": "bge-m3",
}]
},
)
pp("set default embedding", r)
d.close()server_url 不要带 /v1。验证:model-types/text-embedding 里 bge-m3 为 active。
建知识库时选 bge-m3 做 high_quality 索引,命中测试返回相关 chunk,整条 RAG 链路即通。
七、关键配置要点(务必照做)
| 配置项 | 正确做法 | 说明 |
|---|---|---|
HF_ENDPOINT | https://hf-mirror.com | 国内拉权重必须,否则卡在拉取/超时 |
sentence-transformers | 容器内必须 pip install | 缺它 bge-m3 启动失败 |
model_uid | 固定 bge-m3 | Dify 靠 uid 匹配,不一致则选不到 |
| 服务器 URL(Dify 侧) | 不带 /v1 | 插件会自己拼 /v1,多写会 404 |
model_type | embedding | 启动时必须声明,否则按默认类型处理 |
| GPU(可选) | --gpus all + n_gpu:auto | 大文档索引更快;CPU 也能跑 |
八、落地清单
- [ ] Xinference 容器
running,日志显示监听9997。 - [ ] 容器内
sentence-transformers已安装。 - [ ]
HF_ENDPOINT已设国内镜像源。 - [ ] bge-m3 已通过 UI / REST / Python 任一方式启动,状态
running,model_uid=bge-m3。 - [ ]
GET /v1/models返回bge-m3。 - [ ]
POST /v1/embeddings实跑返回 1024 维向量。 - [ ] Dify 已接入 Xinference,URL 不带
/v1,bge-m3 设为默认 Embedding。 - [ ] 知识库用 bge-m3 建索引,命中测试正常。
九、实战记录(本次部署真实遇到的情况)
本次真实遇到的坑,核心是"容器在跑 ≠ 模型在跑"。按统一维度拆解:现象 → 定位 → 改了什么 → 怎么重启 → 怎么看日志 → 怎么判断正常。
9.1 现象
首次建「播城内部知识库」时索引失败 / 检索为空,知识库命中测试无结果。
9.2 定位
完整脚本:scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_08.sh
运行/引用:bash /opt/workbuddy/scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_08.sh
#!/usr/bin/env bash
set -euo pipefail
curl 'http://192.168.110.207:9997/v1/models' # 列表里没有 bge-m3 —— 果然没起
docker logs xinference 2>&1 | tail -20 # 一度发现 launch 失败,缺 sentence-transformers根因:bge-m3 必须显式 launch 才变 running 实例(分配资源、加载权重);且容器里缺 sentence-transformers 导致 launch 直接失败。
9.3 改了什么(逐条命令)
- 容器内补装依赖:
完整脚本:scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_09.sh
运行/引用:bash /opt/workbuddy/scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_09.sh
#!/usr/bin/env bash
set -euo pipefail
docker exec -it xinference pip install sentence-transformers
- 设国内镜像源(拉权重用):
完整脚本:scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_10.sh
运行/引用:bash /opt/workbuddy/scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_10.sh
#!/usr/bin/env bash
set -euo pipefail
docker exec -it xinference pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
(HF_ENDPOINT=https://hf-mirror.com 已写在 docker run -e 里,确保没漏)
- REST 启动 bge-m3,Model UID 固定
bge-m3:
完整脚本:scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_11.sh
运行/引用:bash /opt/workbuddy/scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_11.sh
#!/usr/bin/env bash
set -euo pipefail
curl -X POST 'http://192.168.110.207:9997/v1/models' \
-H 'Content-Type: application/json' \
-d '{"model_uid":"bge-m3","model_name":"bge-m3","model_type":"embedding"}'
9.4 怎么看日志 / 判断启动
完整脚本:scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_12.sh
运行/引用:bash /opt/workbuddy/scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_12.sh
#!/usr/bin/env bash
set -euo pipefail
docker logs -f xinference # 看 Uvicorn running on http://0.0.0.0:9997 即调度器就绪
curl 'http://192.168.110.207:9997/v1/models' # 列表含 bge-m3 且状态 running9.5 怎么判断正常(最关键:实跑 embedding)
完整脚本:scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_13.sh
运行/引用:bash /opt/workbuddy/scripts_bash_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_13.sh
#!/usr/bin/env bash
set -euo pipefail
curl -X POST 'http://192.168.110.207:9997/v1/embeddings' \
-H 'Content-Type: application/json' \
-d '{"model":"bge-m3","input":"这是一个测试文本"}'返回 embedding 数组长度 = 1024 维,即"成功运行"。
9.6 Dify 侧收尾
服务器 URL 不带 /v1、model_uid=bge-m3、设为默认 Embedding;知识库重建后命中测试正常。
连锁影响:这次 bge-m3 实例掉线,也正是专题三第八节"Agent 选不到已有知识库"的真实根因——两者同源(embedding provider 不可达,Dify 就隐藏该知识库)。
一句话对照:专题二前面是"三种启动方式的方法论",本节是"本次 bge-m3 没随容器自起、导致知识库建不出、又牵连 Agent 选不到"的真实经过。
本专题 Python 程序一览
| 文件 | 用途 | |---|---|| 专题二_01_确认Xinference与bge-m3.py | 专题二 · 步骤 0:确认 Xinference 容器与 bge-m3 是否在跑。 | | 专题二_02_启动bge-m3.py | 专题二 · 步骤 4B:REST 启动 bge-m3(model_uid 固定 bge-m3)。 | | 专题二_03_验证embedding.py | 专题二 · 步骤 5:实跑 embedding,确认 1024 维向量。 | | 专题二_04_添加Dify_Embedding凭据.py | 专题二 · 步骤 6:Dify 控制台 API 添加 bge-m3 Embedding 凭据。 | | 专题二_05_设默认Embedding.py | 专题二 · 步骤 6:设 bge-m3 为默认 Embedding。 |
专题二_01_确认Xinference与bge-m3.py
运行:/usr/bin/python3 /opt/workbuddy/scripts_cursor/Dify_专题二_Xinference运行bge-m3/专题二_01_确认Xinference与bge-m3.py
完整补丁:patches_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_01.py
运行/引用:见 patches_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_01.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""专题二 · 步骤 0:确认 Xinference 容器与 bge-m3 是否在跑。"""
from __future__ import annotations
import json
import sys
import _bootstrap # noqa: F401
import _config as C
from dify_api import Dify
def main() -> int:
d = Dify(C.DIFY_EMAIL, C.DIFY_PASSWORD)
try:
print("=== 1/3 容器状态 ===")
for cmd in [
"docker ps --filter name=%s --format '{{.Names}} {{.Status}}'" % C.XF_CONTAINER,
"docker logs %s 2>&1 | tail -5" % C.XF_CONTAINER,
]:
out, err = d.sh(cmd)
print(out or err)
print("\n=== 2/3 GET /v1/models(需 Bearer Key)===")
out, err = d.sh(
"curl -s -H 'Authorization: Bearer %s' %s/v1/models" % (C.XF_KEY, C.XF_URL)
)
print(out or err)
has_bge = C.EMBED_MODEL in (out or "")
print("bge-m3 in list:", has_bge)
print("\n=== 3/3 sentence-transformers ===")
out, err = d.sh(
"docker exec %s python -c \"import sentence_transformers; print(sentence_transformers.__version__)\""
% C.XF_CONTAINER
)
print(out or err)
if not has_bge:
print("[WARN] bge-m3 未 running — 运行 专题二_02_启动bge-m3.py")
return 1
return 0
finally:
d.close()
if __name__ == "__main__":
sys.exit(main())专题二_02_启动bge-m3.py
运行:/usr/bin/python3 /opt/workbuddy/scripts_cursor/Dify_专题二_Xinference运行bge-m3/专题二_02_启动bge-m3.py
完整补丁:patches_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_02.py
运行/引用:见 patches_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_02.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""专题二 · 步骤 4B:REST 启动 bge-m3(model_uid 固定 bge-m3)。"""
from __future__ import annotations
import json
import sys
import _bootstrap # noqa: F401
import _config as C
from dify_api import Dify
def main() -> int:
d = Dify(C.DIFY_EMAIL, C.DIFY_PASSWORD)
try:
body = json.dumps({
"model_uid": C.EMBED_MODEL,
"model_name": C.EMBED_MODEL,
"model_type": "embedding",
})
out, err = d.sh(
"curl -s -X POST '%s/v1/models' -H 'Authorization: Bearer %s' "
"-H 'Content-Type: application/json' -d '%s'"
% (C.XF_URL, C.XF_KEY, body)
)
print("launch response:", out or err)
print("\n=== 等待列表出现 bge-m3 ===")
out2, err2 = d.sh(
"curl -s -H 'Authorization: Bearer %s' %s/v1/models" % (C.XF_KEY, C.XF_URL)
)
print(out2 or err2)
return 0 if C.EMBED_MODEL in (out2 or "") else 1
finally:
d.close()
if __name__ == "__main__":
sys.exit(main())专题二_03_验证embedding.py
运行:/usr/bin/python3 /opt/workbuddy/scripts_cursor/Dify_专题二_Xinference运行bge-m3/专题二_03_验证embedding.py
完整补丁:patches_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_03.py
运行/引用:见 patches_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_03.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""专题二 · 步骤 5:实跑 embedding,确认 1024 维向量。"""
from __future__ import annotations
import json
import sys
import _bootstrap # noqa: F401
import _config as C
from dify_api import Dify
def main() -> int:
d = Dify(C.DIFY_EMAIL, C.DIFY_PASSWORD)
try:
body = json.dumps({"model": C.EMBED_MODEL, "input": "这是一个测试文本"})
out, err = d.sh(
"curl -s -X POST '%s/v1/embeddings' -H 'Authorization: Bearer %s' "
"-H 'Content-Type: application/json' -d '%s'"
% (C.XF_URL, C.XF_KEY, body)
)
print(out or err)
try:
data = json.loads(out)
emb = data["data"][0]["embedding"]
print("embedding dim:", len(emb))
if len(emb) != 1024:
print("[WARN] 期望 1024 维")
return 1
except Exception as e:
print("[ERR] 解析失败:", e)
return 1
return 0
finally:
d.close()
if __name__ == "__main__":
sys.exit(main())专题二_04_添加Dify_Embedding凭据.py
运行:/usr/bin/python3 /opt/workbuddy/scripts_cursor/Dify_专题二_Xinference运行bge-m3/专题二_04_添加Dify_Embedding凭据.py
完整补丁:patches_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_04.py
运行/引用:见 patches_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_04.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""专题二 · 步骤 6:Dify 控制台 API 添加 bge-m3 Embedding 凭据。"""
from __future__ import annotations
import sys
import _bootstrap # noqa: F401
import _config as C
from dify_api import Dify, pp
def main() -> int:
d = Dify(C.DIFY_EMAIL, C.DIFY_PASSWORD)
try:
d.login()
body = {
"model": C.EMBED_MODEL,
"model_type": "embedding",
"credentials": {
"server_url": C.XF_URL,
"model_uid": C.EMBED_MODEL,
"api_key": C.XF_KEY,
"invoke_timeout": "60",
"max_retries": "3",
},
"name": C.EMBED_MODEL,
}
path = "/workspaces/current/model-providers/%s/models/credentials" % C.XINFERENCE_PROVIDER
r = d.post(path, body)
pp("add embedding cred", r)
if r.get("code") not in ("200", "201"):
r = d.req("PUT", path, body=body)
pp("put embedding cred", r)
r2 = d.get("/workspaces/current/models/model-types/text-embedding")
pp("embedding models", r2)
return 0 if r.get("code") in ("200", "201") else 1
finally:
d.close()
if __name__ == "__main__":
sys.exit(main())专题二_05_设默认Embedding.py
运行:/usr/bin/python3 /opt/workbuddy/scripts_cursor/Dify_专题二_Xinference运行bge-m3/专题二_05_设默认Embedding.py
完整补丁:patches_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_05.py
运行/引用:见 patches_cursor/Dify_专题二_Xinference运行bge-m3/专题二_内联_05.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""专题二 · 步骤 6:设 bge-m3 为默认 Embedding。"""
from __future__ import annotations
import sys
import _bootstrap # noqa: F401
import _config as C
from dify_api import Dify, pp
def main() -> int:
d = Dify(C.DIFY_EMAIL, C.DIFY_PASSWORD)
try:
d.login()
r = d.post(
"/workspaces/current/default-model",
body={
"model_settings": [{
"model_type": "text-embedding",
"provider": C.XINFERENCE_PROVIDER,
"model": C.EMBED_MODEL,
}]
},
)
pp("set default embedding", r)
r2 = d.get("/workspaces/current/models/model-types/text-embedding")
pp("embedding list", r2)
return 0 if r.get("code") in ("200", "201") else 1
finally:
d.close()
if __name__ == "__main__":
sys.exit(main())