内部智能体配置文档 · 专题汇总(理论 + 操作 + 实战记录)
本文定位:把
docs/md_cursor/下全部 Cursor 专题、手册、SOP、作业的理论框架、执行流程、完整代码、CPU/GPU 建议、实战问题解法汇总成一份「配置总纲」。适用环境:
192.168.110.207(Dify 1.16.1 + Xinference CPU + Langfuse + Weaviate)+116.62.10.183(vLLM Qwen3.6-27B,H20 共享 GPU)。阅读方式:先读本文第二、五部分建立全局图;具体操作打开对应专题 md/html;跑代码只改
/opt/workbuddy/scripts_cursor/内部智能体配置文档专题汇总/_config.py。HTML 成品:
docs/html_cursor/内部智能体配置文档专题汇总_cursor.html
运行环境:业务脚本均在 207 固定目录
/opt/workbuddy执行,Python 为/usr/bin/python3。 Windows 开发机仅保留_probe_*调试脚本;同步命令:python scripts_cursor/完整代码约定/00_部署_workbuddy到207.py。
目录
- 第一部分 文档体系与阅读地图
- 第二部分 系统架构与执行流程(理论)
- 第三部分 环境常量与服务器角色
- 第四部分 主线三步:理论 + 操作步骤
- 第五部分 CPU 与 GPU 双路径建议(本系统 + 未来扩展)
- 第六部分 完整代码程序(可直接运行)
- 第七部分 实战问题与解决方案总表
- 第八部分 对本系统的专业建议
- 第九部分 全部专题 md / html 对照索引
第一部分 文档体系与阅读地图
1.1 这套文档解决什么
目标不是「只装 Dify」,而是在本机搭一套可运维的企业内部智能体:
| 能力 | 典型产物 | 对应文档 |
|---|---|---|
| 制度 / 知识库问答 | 播城行政问答智能体 | 手册 + 专题十五 |
| 观测 Trace / Token | Langfuse 4.12 | Langfuse 部署 + 连接 |
| 检索排序更准 | Rerank Top-1 变答题条款 | 专题十三 |
| 工具调用 | 运维巡检 Agent(HTTP 工具) | 作业 1 |
| 意图路由 | 客服 Workflow(知识库/工单/人工) | 作业 2 |
| 日常排障 | 搜不到 / 答偏 / 变慢 | 企业 AI 排错 SOP + 专题十四 |
| SLA 大盘 | Prometheus :9092 + Grafana :3001 | 集成环境部署 + 作业 8 |
1.2 推荐阅读顺序(不要从专题三看到十五)
① 安装手册 + 专题十五 → 平台、模型、知识库、新 Agent 能问能答
② Langfuse 部署 + 连接 → 每轮问答能在 Langfuse 点开 Trace
③ 专题十三 Rerank → 命中测试排序变准;对话引用关键数字
④ 按症状查排障专题 / SOP → 出问题再查,不要改主线正文
⑤ 作业 1 → 第一个 HTTP 工具 Agent
⑥ 作业 2 → Workflow 意图路由(知识库 + HTTP + 模板)口诀(创建和改配置时必记):
工作室里没有的开关 → 工作区「设置 → 模型供应商」或
dify_api.pyAPI。改 Agent 快照后 → 不要点「构建 / 发布」(会把
max_tokens写回null)。
1.3 代码与文档约定
| 目录 | 内容 |
|---|---|
docs/md_cursor/ | Markdown 专题,文件名 *_cursor.md |
docs/html_cursor/ | HTML 成品,文件名 *_cursor.html |
/opt/workbuddy/scripts_cursor/ | 完整 Python(每步一个 .py) |
scripts_bash_cursor/ | 完整 Bash |
patches_cursor/ | 完整补丁 / OpenAPI / env |
维护命令:
python tools/sync_doc_code.py --all # 展开本文等文档里的完整代码嵌入
python gen_all_html.py # 批量 md → html
python gen_index_html.py # 更新索引页第二部分 系统架构与执行流程(理论)
2.1 总体拓扑
┌─────────────────────────────────────────┐
│ 用户浏览器 / 业务方 │
└──────────────────┬──────────────────────┘
│ HTTP
┌──────────────────▼──────────────────────┐
│ 192.168.110.207 │
│ ┌─────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Dify │ │Langfuse │ │Xinference│ │
│ │ 1.16.1 │ │ :3000 │ │ :9997 │ │
│ │ :80/443 │ │ │ │ CPU 推理 │ │
│ └────┬────┘ └────▲─────┘ └────┬─────┘ │
│ │ │ Trace │ │
│ │ bge-m3 / rerank │ │
│ │ │ │
│ ┌────▼────┐ Weaviate(:8088中继) │ │
│ │ Postgres│◄──────────────────────┘ │
│ │ Redis │ │
│ └─────────┘ │
└──────────────────┬──────────────────────────┘
│ OpenAI 兼容 API
┌──────────────────▼──────────────────────┐
│ 116.62.10.183(GPU 机) │
│ vLLM Qwen3.6-27B :8000 │
│ H20 96GB,与 mxh_env/mxh_live 共享 │
│ max-num-seqs=8, gpu-mem-util=0.75 │
└──────────────────────────────────────────┘角色分工:
| 机器 | 当前职责 | 未来有 GPU 时可扩展 |
|---|---|---|
| 207 | Dify 全家桶、Xinference(CPU)、Langfuse、Weaviate、作业 1 模拟 API | 可继续只做控制面;或把 Xinference 迁到 116 |
| 116 | 仅 vLLM 大模型推理 | 可同时跑 Xinference GPU(Embedding + Rerank) |
2.2 知识库问答完整执行流程(新 Agent)
这是「播城行政问答」每一轮对话在后台的实际路径。理论部分必须理解:界面显示的工具名 ≠ 当前正在执行的层。
【阶段 0】用户在新对话输入问句
│
▼
【阶段 1】docker-api-1 接收
POST /console/api/agent/<agent_id>/chat-messages
读取 agent_config_snapshots(不是知识库页的实时配置)
│
▼
【阶段 2】docker-agent_backend-1 编排
加载快照:model / prompt / knowledge.sets[].retrieval / tools
│
▼
【阶段 3】第一次 LLM 调用(116 vLLM)
模型决定:是否调用 knowledge_base_search
界面出现「思考中」或工具框
│
▼
【阶段 4】知识检索(207 本机)
4a. Embedding:Xinference bge-m3 → 向量
4b. Weaviate:Top-N 召回(经 8088 中继,避免 IPv6 偶发失败)
4c. Rerank(若快照开启):Xinference bge-reranker-v2-m3 重排
4d. 取 Top-K 片段写入 Prompt
│ ※ 界面可能仍显示 knowledge_base_search,但 4 可能 2 秒就结束
▼
【阶段 5】第二次 LLM 调用(116 vLLM)
Prompt = system + 历史 + Top-K 制度片段 + 用户问句
Qwen3.6 先 thinking(计入 max_tokens),再输出正文
│ ※ thinking 吃满 max_tokens → 空泡 / token limit 8192(专题十二)
▼
【阶段 6】写 messages 表 + 可选 Langfuse
status=normal / error
Celery worker 推 Trace(若已配置 trace-config)配置生效的三层(不要找错):
工作区「设置 → 模型供应商」 ← Qwen / bge-m3 / Rerank 凭据、默认模型
│
知识库页 retrieval_model ← 命中测试用这套
│
Agent 快照 + 草稿 ← 对话真正用的 Top-K / Rerank / max_tokens / 绑库只改知识库页 → 命中测试变好,对话可能仍按旧检索跑(专题十三·问题 7)。
2.3 HTTP 工具 Agent 执行流程(作业 1)
用户:「帮我看看 gpu-server-01 的状态」
│
▼
第一次 LLM → 决定调用 getServerStatus(server_name=...)
│
▼
Dify API 工具层(OpenAPI 导入)
GET http://192.168.110.207:8777/server/status?server_name=gpu-server-01
(经 ssrf_proxy 出网)
│
▼
FastAPI 模拟服务返回 JSON
│
▼
第二次 LLM → 按 system_prompt 格式化为中文汇报关键配置点:
- 创建 Agent 用
POST /agent,不是POST /apps+mode=agent。 tools.dify_tools[].provider_id必须是tool_api_providers.id(UUID),不能写名称server_status。
2.4 Langfuse 观测链路
用户发问 → Dify 对话完成
│
▼
docker-worker-1(Celery 队列 ops_trace)
读 apps.tracing + trace_app_config
│
▼
POST Langfuse /api/public/ingestion(需 dual 模式)
│
▼
langfuse-clickhouse 存 Trace / Generation / Token反直觉事实:
- Dify 1.16 不读全局
LANGFUSE_*环境变量,必须走应用级 API 配 trace-config。 - Generation Input 往往只有用户原话,看不到逐条 chunk → 召回看命中测试,不是 Langfuse。
- Langfuse 4 默认
events_only会拒收旧 ingestion → web/worker 都要LANGFUSE_INGESTION_MODE=dual。
2.5 故障定性四分类(排障理论入口)
| 类型 | 页面 | messages.status | 含义 |
|---|---|---|---|
| 还在跑 | 思考、时间在涨 | 尚无最终行 | 看日志确认卡在哪一层 |
| 已失败未刷新 | 空泡、3/3 | error | 新开对话,别继续点 |
| 成功但慢 | 有正文 | normal,latency 大 | 性能 / 排队,不是功能坏 |
| 明确报错 | 红字 / 400 | error 有原文 | 对号入座第七部分 |
第三部分 环境常量与服务器角色
换机器 / 换应用时只改这一处,所有脚本共用。
完整程序:/opt/workbuddy/scripts_cursor/内部智能体配置文档专题汇总/_config.py(常量文件,不是可执行脚本)
编辑/引用:/opt/workbuddy/scripts_cursor/内部智能体配置文档专题汇总/_config.py(换环境时只改此文件)
# -*- coding: utf-8 -*-
"""各专题脚本共用的环境常量。换机器/换应用时只改这一处。"""
# Dify 控制台
DIFY_EMAIL = "38205036@qq.com"
DIFY_PASSWORD = "Difyai123456"
DIFY_BASE = "http://192.168.110.207"
# 播城行政问答(专题十三 / 十四 / 十五 / Langfuse 等)
APP_ID = "40e95fd3-e7f5-44f2-a03b-dc3e60413540"
AGENT_ID = "01a012e7-bed3-7574-b0d1-a5cc79a0d3de"
SNAP_ID = "01a0135c-320e-79dc-97a0-94da9b904c13"
DRAFT_ID = "01a012e7-bf60-7673-a894-64551d984a23"
DS_ID = "ee2495bf-c370-49d1-8268-10c51f650fa6"
DS_NAME = "播城内部行政管理知识库"
# Xinference
XF_KEY = "xf-K8H3LiS27H4188XdOyWJj74MWMOlIR9tZbiybDbxbSas7eAI"
XF_URL = "http://192.168.110.207:9997"
XF_ADMIN_USER = "admin"
XF_ADMIN_PASS = "admin1234"
XF_CONTAINER = "xinference"
# 模型
EMBED_MODEL = "bge-m3"
RERANK_MODEL = "bge-reranker-v2-m3"
XINFERENCE_PROVIDER = "langgenius/xinference/xinference"
# vLLM / Qwen(专题一 / 手册 / 十五)
VLLM_BASE = "http://116.62.10.183:8000/v1"
VLLM_KEY = "123456"
QWEN_MODEL = "qwen3.6-27b"
OPENAI_PROVIDER = "langgenius/openai/openai"
QWEN_CTX = 64000
MAX_TOKENS = 32768
# Langfuse
LANGFUSE_PK = "pk-lf-84a76d89-b6b4-4943-b4ea-2dee48d4cda7"
LANGFUSE_SK = "sk-lf-24aa6d73-ed36-4447-9eb6-3ebd446fb298"
LANGFUSE_URL = "http://192.168.110.207:3000"
LANGFUSE_HEALTH = "http://192.168.110.207:3000/api/public/health"
# GPU 机 Xinference(路径 B 时用)
XF_GPU_URL = "http://116.62.10.183:9997"
XF_GPU_CONTAINER = "xinference-gpu"
# Docker 容器名(207)
PG_CONTAINER = "docker-db_postgres-1"
PLUGIN_CONTAINER = "docker-plugin_daemon-1"
DIFY_WORKER = "docker-worker-1"
DIFY_API_CTR = "docker-api-1"
DIFY_DOCKER_DIR = "/dify/dify-main/docker"
# 专题十五 · 新建应用时的工作名(按需改)
NEW_APP_NAME = "播城行政问答智能体"
# 作业 1 · 第一个 Agent 工具调用
SERVER_STATUS_PORT = 8777
SERVER_STATUS_BASE = "http://192.168.110.207:8777"
SERVER_STATUS_PROVIDER = "server_status"
SERVER_STATUS_PROVIDER_ID = "021a4445-098d-4821-81fe-ff0ebc660ecc"
HOMEWORK1_APP_NAME = "运维巡检 Agent"
HOMEWORK1_PROBE_QUERY = "帮我看看 gpu-server-01 的状态"
HOMEWORK1_APP_ID = "d00d0382-ca3f-4cf2-9cc9-0cb5aed9404d"
HOMEWORK1_AGENT_ID = "01a0189c-7d7e-742f-83d1-74c5c16878da"
HOMEWORK1_SNAP_ID = "01a0189c-7d82-777e-9f1a-8af87e14ae38"
HOMEWORK1_DRAFT_ID = "01a0189d-44b0-7191-9b51-44b257b97459"
# 作业 2 · 客服意图路由 Workflow
TICKET_API_PORT = 8778
TICKET_API_BASE = "http://192.168.110.207:8778"
HOMEWORK2_APP_NAME = "客服意图路由工作流"
HOMEWORK2_APP_ID = "f0e82c66-e324-4df7-a1fe-44d6ce6ec7cf"
HOMEWORK2_PROBE_KB = "怎么请假"
HOMEWORK2_PROBE_TICKET = "帮我报修设备"
HOMEWORK2_PROBE_HUMAN = "我要投诉"
# 验收用问句
PROBE_QUERY_KB = "管理人员需要钉钉打卡吗"
PROBE_QUERY_OVERTIME = "法定假日加班的制度是什么,加班费怎么算?"
PROBE_QUERY_LANGFUSE = "请用一两句话说明公司请假流程,这是 Langfuse 完整链路验收。"3.1 本环境 ID 速查
| 项 | 值 | 用途 |
|---|---|---|
| 行政问答 app_id | 40e95fd3-e7f5-44f2-a03b-dc3e60413540 | Langfuse trace-config |
| 行政 agent_id | 01a012e7-bed3-7574-b0d1-a5cc79a0d3de | 对话 API |
| 知识库 ID | ee2495bf-c370-49d1-8268-10c51f650fa6 | 绑库 / 命中测试 |
| 运维巡检 agent_id | 01a0189c-7d7e-742f-83d1-74c5c16878da | 作业 1 |
| 意图路由 app_id | f0e82c66-e324-4df7-a1fe-44d6ce6ec7cf | 作业 2 |
| vLLM | http://116.62.10.183:8000/v1 | Qwen3.6-27B |
| Xinference | http://192.168.110.207:9997 | bge-m3 + rerank(CPU) |
| Langfuse | http://192.168.110.207:3000 | Trace |
第四部分 主线三步:理论 + 操作步骤
4.1 第一步 · 部署 Dify(模型 + 知识库 + Agent)
理论目标
结束时:能基于知识库问答;不必已有 Langfuse 或 Rerank。
操作步骤(按序,不可跳)
| 步 | 做什么 | 文档 | 脚本 |
|---|---|---|---|
| 0 | 创建前检查:LLM 列表、Xinference、知识库 available | 专题十五 | 专题十五_00_创建前检查.py |
| 1 | git clone Dify、docker compose、接 vLLM | 安装手册 + 专题一 | 手册内 bash |
| 2 | Xinference 起 bge-m3 | 专题二 | 专题二脚本 |
| 3 | 建知识库、分段、等 available | 手册 | — |
| 4 | POST /agent 创建新 Agent 空壳 | 专题十五 | 专题十五_01_创建应用空壳.py(需改为 /agent) |
| 5 | 查 app/agent/snap/draft ID | 专题十五 | 专题十五_02_查三个ID.py |
| 6 | 绑知识库 + 写 system_prompt | 专题十五 | 专题十五_05_改Agent快照绑库与Rerank.py |
| 7 | 设 max_tokens=32768(制度+thinking) | 专题十一/十二 | 专题十五_06_改max_tokens.py |
| 8 | 新开对话验收 | 专题十五 | 专题十五_09_Agent对话验收.py |
第一步验收标准
- [ ]
GET /v1/models(116)含qwen3.6-27b - [ ] Xinference 含
bge-m3且model_type=embedding - [ ] 知识库状态
available,命中测试有结果 - [ ] 新 Agent 对话
messages.status=normal,能引用制度原文
第一步典型卡点(实战汇总,不替代专题正文)
| 卡点 | 常见现象 | 优先处理 |
|---|---|---|
| 平台未就绪 | Dify 容器 unhealthy | 安装手册 二;专题六 weaviate |
| 向量未真跑 | /v1/models 无 bge-m3 | 专题二 launch |
| LLM 不可选 | 「不兼容」/ 列表空 | 专题一、专题十 |
| 绑库失败 | Agent 选不到知识库 | 专题三;确认库 available |
| 对话 400 system | 多条 system 未合并 | 手册 八 chat.py;专题四 |
| 空泡/无正文 | thinking 占满 max_tokens | 专题十一/十二 |
| 配置页 500 | OpenAPI UUID 当 builtin | 作业1/专题十六 的 06 修复脚本 |
上表是路由索引:具体改哪行代码、贴哪段 patch,仍以安装手册 + 对应专题为准,此处不删改原文。
4.2 第二步 · 接上 Langfuse
理论目标
Dify 问一句 → Langfuse 能看到 Trace + Prompt + Token。
操作步骤
| 步 | 做什么 | 文档 |
|---|---|---|
| 1 | 207 上 docker compose 起 Langfuse 4 | Langfuse_部署教程_cursor |
| 2 | .env 写 INIT pk/sk;compose 设 dual | 部署教程 + 连接专题第八章 |
| 3 | Dify API:POST trace-config + POST trace | 连接专题 |
| 4 | 插件补丁:Generation 带 UUID(worker 内) | 连接专题 |
| 5 | 问一句知识库问题,打开 Trace 验收 | 连接专题 |
Host 必须写 http://192.168.110.207:3000,不能写 localhost(容器内 localhost ≠ 宿主机)。
第二步典型卡点
| 卡点 | 常见现象 | 优先处理 |
|---|---|---|
| Langfuse 起不来 | compose 拉镜像超时 | Langfuse_部署教程 镜像加速章 |
| Trace 开关不生效 | Dify 里看不到 Trace | 连接专题:按 app 配 trace-config,非全局 env |
| Host 写 localhost | 容器内上报失败 | Host 改为 http://192.168.110.207:3000 |
| 只有 Generation 无 Tool Span | 补丁未打到 worker | 连接专题步骤 2;作业 3 验收脚本 |
| traceId 对不上 | 查到旧 trace | 连接专题问题 2;用最新 conversation |
4.3 第三步 · 开启 Rerank
理论目标
以前排第 3 的「加班费 300%」条款排到第 1;对话能引用关键数字。
理论流程
用户问句
→ Embedding 召回 Top-N(如 20)
→ Rerank 交叉编码器重打分
→ 取 Top-K(如 5)进 Prompt
→ LLM 生成必须改两处 JSON(字段名不同):
| 位置 | Rerank 字段名 |
|---|---|
知识库 retrieval_model | reranking_provider_name / reranking_model_name |
Agent 快照 knowledge.sets[].retrieval | provider / model |
操作步骤
| 步 | 做什么 | 文档 | 脚本 |
|---|---|---|---|
| 1 | Xinference login + launch reranker | 专题十三 3.1(CPU)或 3.2(GPU) | 专题十三_02_launch_rerank*.py |
| 2 | Dify 添加 Rerank 凭据 | 专题十三 | — |
| 3 | PATCH 知识库 retrieval_model | 专题十三 | 专题十五_04_改知识库检索.py |
| 4 | 改 Agent 快照+草稿 retrieval | 专题十三 | 专题十五_05_改Agent快照绑库与Rerank.py |
| 5 | 命中测试对比 + 新开对话 | 专题十三 | 专题十五_08 / 09 |
改完 不要点发布。
第三步典型卡点
| 卡点 | 常见现象 | 优先处理 |
|---|---|---|
| Rerank 模型未 launch | Dify 无 rerank 供应商 | 专题十三 3.1/3.2 |
| 只改库未改 Agent | 对话仍用旧排序 | 快照+草稿两处 JSON 字段名不同 |
| 命中测试变了、对话不变 | 用了旧会话缓存 | 新开对话验收 |
| Top-1 仍不对 | rerank 模型弱或 Top-N 太小 | 专题十三调 Top-N/K;换 bge-reranker |
| 变慢明显 | CPU rerank + 大 Top-N | 专题十四容量;GPU 路径 3.2 |
第五部分 CPU 与 GPU 双路径建议(本系统 + 未来扩展)
现状:207 无 GPU,Embedding + Rerank 在 CPU;116 有 H20,只跑 vLLM。
文档写法:CPU 路径 = 当前生产实录;GPU 路径 = 有卡后的推荐做法,避免以后重复踩坑。
5.1 组件 × CPU / GPU 对照总表
| 组件 | 当前(207 CPU + 116 GPU) | 仅 CPU 最小可跑 | 有 GPU 推荐 |
|---|---|---|---|
| LLM Qwen3.6-27B | 116 vLLM,BF16,~50GB 权重 | ❌ 不建议 27B 纯 CPU | 单卡 ≥80GB 或量化到 24–48GB 卡 |
| Embedding bge-m3 | 207 Xinference CPU | 8 核 + 8Gi 可跑 | GPU 4–8GB 显存,QPS 高时必须 |
| Rerank bge-reranker-v2-m3 | 207 Xinference CPU,Top-K=5 约 2–16s | 能跑,长文/高并发慢 | GPU 2–4GB,生产推荐 |
| Weaviate | 207,8088 中继 | 吃 CPU + 内存 | 与 Dify 同机即可 |
| Dify 栈 | 207,31Gi 内存偏紧 | 16Gi 很紧,32Gi 起 | 控制面与推理分离 |
5.2 CPU 路径(当前 207 实录)
适用场景
- 公司在职约 100 人,高峰同时提问 2–6 人。
- 检索 QPS 低,Rerank Top-K≤5,可接受单次命中测试 2–16 秒。
- GPU 机显存已被 vLLM + 业务进程占满(
gpu-memory-utilization 0.75)。
CPU 路径 launch 规则(专题十三·问题 4)
| 规则 | 说明 |
|---|---|
容器 不要 加 --gpus | 207 无 NVIDIA |
launch 不要 传 --n-gpu | 尤其 禁止 --n-gpu 0(会 ValueError) |
不传则 accelerators: [] | 正常走 CPU,与 bge-m3 一致 |
| 重启后实例丢失 | 必须重新 xinference login + launch |
CPU 路径 Rerank 性能预期
| 条件 | 耗时量级 | 建议 |
|---|---|---|
| Top-K=5,短块(400–800 字) | 2–5s | 当前配置可接受 |
| Top-K=10,长块(2000+ 字) | 10–20s+ | 降 K、缩短切块,或迁 GPU |
| 多人同时命中测试 | CPU 打满 | 错峰;长期迁 GPU |
CPU 路径 Dify / 主机资源建议
| 资源 | 当前 207 | 建议 |
|---|---|---|
| 内存 31Gi | Dify + Weaviate + Postgres + Xinference + Langfuse 同机 | 监控 docker stats;Langfuse 与 Xinference 峰值叠加 |
| CPU | Rerank + Weaviate 争抢 | 16 核+ 更稳;100 人以上考虑把 Xinference 迁出 |
| 磁盘 | 模型权重 + 向量库 | SSD / NVMe |
5.3 GPU 路径(未来有卡时)
何时应该从 CPU 迁到 GPU
命中测试经常 >10s?
├─ 是 → 优先 Rerank 上 GPU
└─ 否 → 继续观察
高峰同时提问 >15 人?
├─ 是 → Embedding + Rerank 都应 GPU;vLLM 加 max-num-seqs 或加卡
└─ 否 → CPU 仍可维持
116 上 nvidia-smi 有余量(>10GB 空闲)?
├─ 是 → 路径 A:本机 Xinference 加 --gpus all
└─ 否 → 路径 B:独立 GPU 机或降 vLLM 显存占用路径 A · 本机 Xinference 已有 GPU 容器
① 确认容器能见到 GPU
docker inspect xinference --format '{{json .HostConfig.DeviceRequests}}'
docker exec xinference nvidia-smiDeviceRequests 不能为 null;否则需 --gpus all 重建容器。
② launch(有 GPU 时必须指定 n_gpu)
docker exec xinference bash -lc '
xinference login -e http://127.0.0.1:9997 -u admin -p admin1234
xinference launch -e http://127.0.0.1:9997 -n bge-m3 -t embedding -u bge-m3 --n-gpu auto
xinference launch -e http://127.0.0.1:9997 -n bge-reranker-v2-m3 -t rerank -u bge-reranker-v2-m3 --n-gpu auto
'③ 验收:GET /v1/models 里 accelerators 非空;Rerank 同问句明显快于 CPU。
路径 B · 把 Xinference 迁到 116(与 vLLM 同机)
与安装手册步骤 9.1 同思路:Embedding 和 Rerank 必须在同一套 Xinference,Dify 只改供应商 URL(两处凭据一致)。
| 步 | 操作 |
|---|---|
| 1 | 116 上 nvidia-smi 确认余量(勿挤 mxh_env / mxh_live) |
| 2 | docker run --gpus all 起 xinference-gpu |
| 3 | login + launch bge-m3 + reranker(均 --n-gpu auto) |
| 4 | 207 上 curl 116:9997 验网 |
| 5 | Dify 工作区改 Xinference URL → http://116.62.10.183:9997 |
| 6 | 不必重建知识库;命中测试复测 |
完整脚本:/opt/workbuddy/scripts_cursor/Dify_专题十三_知识库Rerank重排序/专题十三_03B_改Dify凭据_GPU路径.py
GPU 路径 vLLM 参数(116 当前 + 扩展)
| 参数 | 当前值 | 含义 | 扩展建议 |
|---|---|---|---|
--max-num-seqs | 8 | 同时生成路数 | 100 人公司够用;200+ 需 16–32 或加卡 |
--gpu-memory-utilization | 0.75 | 显存占用上限 | 共享卡必须保守;独占卡可 0.90 |
--max-model-len | 65536 | 上下文上限 | 与 Dify context_size=64000 对齐 |
--tool-call-parser | qwen3_xml | 工具调用解析 | 不能用 qwen3(不存在) |
--reasoning-parser | qwen3 | thinking 解析 | 与 max_tokens 预算联动 |
排队判断(全员变慢时):
# 116 GPU 机
nvidia-smi
curl -s http://116.62.10.183:8000/metrics | grep vllm_num_requests
docker logs <vllm容器> 2>&1 | tail -50vllm_num_requests_waiting > 0 → vLLM 排队,不是检索慢。
5.4 按公司人数的容量规划(专题十四提炼)
| 在职人数 | 高峰同时提问 | vLLM 规划并发 | Rerank | 主机建议 |
|---|---|---|---|---|
| ~100 | 2–6 | max-num-seqs 8 | CPU 可接受 | 207 31Gi 勉强;116 共享 H20 |
| 200–300 | 6–15 | 16 路 | 建议 GPU | Xinference 迁 GPU 机 |
| 300–500 | 10–25 | 24–32 路 | 必须 GPU | Dify 与推理分离 |
| 500+ | 20–50+ | 水平扩展 | 独立检索集群 | 勿单机堆所有组件 |
5.5 生成参数建议(与 CPU/GPU 无关,但必须设)
| 参数 | 本环境推荐 | 原因 |
|---|---|---|
max_tokens | 32768 | Qwen3.6 thinking 计入同一预算;Prompt 可达 14k+ |
| Top-K | 3–5 | K 越大 Prompt 越长,越容易 token 耗尽 |
| 切块 | 400–800 汉字,重叠 10–15% | 避免单块几千字 |
max_tokens + Prompt | < 65536 | 小于 vLLM max-model-len |
5.6 CPU → GPU 迁移检查单(留给未来)
- [ ] 116
nvidia-smi空闲显存 > 10GB(含 Rerank + Embedding) - [ ] Xinference 容器
--gpus all,容器内nvidia-smi正常 - [ ] launch 用
--n-gpu auto,不用--n-gpu 0 - [ ]
accelerators非空 - [ ] Dify 两处 Xinference URL 一致
- [ ] 命中测试 latency 下降;对话 Rerank 生效(快照与知识库一致)
- [ ] 未挤占 vLLM OOM(监控 116 显存)
第六部分 完整代码程序(可直接运行)
以下均为完整程序,不是片段。换环境只改
/opt/workbuddy/scripts_cursor/内部智能体配置文档专题汇总/_config.py。
6.1 环境常量(必改)
见 第三部分 已嵌入完整 _config.py。
6.2 创建前检查(第一步步骤 0)
运行:/usr/bin/python3 /opt/workbuddy/scripts_cursor/内部智能体配置文档专题汇总/专题十五_00_创建前检查.py
完整程序:/opt/workbuddy/scripts_cursor/内部智能体配置文档专题汇总/专题十五_00_创建前检查.py
运行/引用:/usr/bin/python3 /opt/workbuddy/scripts_cursor/内部智能体配置文档专题汇总/专题十五_00_创建前检查.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""专题十五 · 步骤 0:创建前检查 LLM / Embedding / Rerank / 知识库 / 外部探针。"""
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()
pp("llm", d.get("/workspaces/current/models/model-types/llm"))
pp("emb", d.get("/workspaces/current/models/model-types/text-embedding"))
pp("rerank", d.get("/workspaces/current/models/model-types/rerank"))
pp("datasets", d.get("/datasets?page=1&limit=20"))
print("\n=== vLLM ===")
out, err = d.sh(
"curl -s -m 10 -H 'Authorization: Bearer %s' %s/models"
% (C.VLLM_KEY, C.VLLM_BASE)
)
print(out or err)
print("\n=== Xinference ===")
out2, err2 = d.sh(
"curl -s -m 15 -H 'Authorization: Bearer %s' %s/v1/models"
% (C.XF_KEY, C.XF_URL)
)
print(out2 or err2)
return 0
finally:
d.close()
if __name__ == "__main__":
sys.exit(main())6.3 分层健康探针(LLM / Embedding / Rerank / vLLM)
运行:/usr/bin/python3 /opt/workbuddy/scripts_cursor/内部智能体配置文档专题汇总/专题十四_03_分层探针.py
完整程序:/opt/workbuddy/scripts_cursor/内部智能体配置文档专题汇总/专题十四_03_分层探针.py
运行/引用:/usr/bin/python3 /opt/workbuddy/scripts_cursor/内部智能体配置文档专题汇总/专题十四_03_分层探针.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""专题十四 · 步骤 3:分层探针(Xinference / Rerank / vLLM / 最短对话)。"""
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:
probes = [
("1) Xinference /v1/models", (
"curl -s -m 15 -H 'Authorization: Bearer %s' %s/v1/models"
% (C.XF_KEY, C.XF_URL)
)),
("2) Xinference /v1/rerank", (
"curl -s -m 30 -H 'Authorization: Bearer %s' -H 'Content-Type: application/json' "
"-d '{\"model\":\"%s\",\"query\":\"%s\",\"documents\":[\"管理人员应通过钉钉打卡。\",\"班车时间以通知为准。\"]}' "
"%s/v1/rerank"
% (C.XF_KEY, C.RERANK_MODEL, C.PROBE_QUERY_KB, C.XF_URL)
)),
("3) vLLM /v1/models", (
"curl -s -m 10 -H 'Authorization: Bearer %s' %s/models"
% (C.VLLM_KEY, C.VLLM_BASE)
)),
("4) vLLM 最短对话", (
"curl -s -m 60 -X POST %s/chat/completions "
"-H 'Authorization: Bearer %s' -H 'Content-Type: application/json' "
"-d '{\"model\":\"%s\",\"messages\":[{\"role\":\"user\",\"content\":\"只回:pong\"}],\"max_tokens\":16}'"
% (C.VLLM_BASE, C.VLLM_KEY, C.QWEN_MODEL)
)),
]
for title, cmd in probes:
print("\n=== %s ===" % title)
out, err = d.sh(cmd)
text = out or err
print(text[:1500] if len(text) > 1500 else text)
return 0
finally:
d.close()
if __name__ == "__main__":
sys.exit(main())6.4 作业 1 · 工具调用验收
运行:/usr/bin/python3 /opt/workbuddy/scripts_cursor/内部智能体配置文档专题汇总/作业1_05_对话验收.py
完整程序:/opt/workbuddy/scripts_cursor/内部智能体配置文档专题汇总/作业1_05_对话验收.py
运行/引用:/usr/bin/python3 /opt/workbuddy/scripts_cursor/内部智能体配置文档专题汇总/作业1_05_对话验收.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""作业 1 · 步骤 5:对话验收 —— 问 gpu-server-01 状态,应触发工具并返回指标。"""
from __future__ import annotations
import sys
import _bootstrap # noqa: F401
import _config as C
from dify_api import Dify, pp
def resolve_agent_id(d: Dify) -> str:
aid = getattr(C, "HOMEWORK1_AGENT_ID", "") or ""
if aid:
return aid
sql = (
"SELECT a.id FROM apps ap JOIN agents a ON a.app_id=ap.id "
"WHERE ap.name='%s' ORDER BY ap.created_at DESC LIMIT 1;"
% C.HOMEWORK1_APP_NAME.replace("'", "''")
)
out, err = d.sh(
'docker exec %s psql -U postgres -d dify -t -A -c "%s"'
% (C.PG_CONTAINER, sql)
)
aid = (out or "").strip()
if not aid:
raise RuntimeError("找不到 Agent: %s %s" % (out, err))
return aid
def main() -> int:
d = Dify(C.DIFY_EMAIL, C.DIFY_PASSWORD)
try:
d.login()
agent_id = resolve_agent_id(d)
print("agent_id", agent_id)
r = d.post(
"/agent/%s/chat-messages" % agent_id,
body={
"inputs": {},
"query": C.HOMEWORK1_PROBE_QUERY,
"response_mode": "streaming",
"files": [],
"conversation_id": "",
},
extra="-m 420 --max-time 420",
t=450,
)
pp("chat", r, limit=4000)
text = r.get("text") or ""
ok_markers = ("45%", "62%", "78%", "18.2", "gpu-server-01", "getServerStatus")
hits = [m for m in ok_markers if m in text]
print("\n匹配到的验收关键词:", hits)
if r.get("code") not in ("200",) or len(hits) < 2:
print("\n[FAIL] 未看到工具返回的模拟指标,请检查工具挂载与 SSRF 出网。")
return 1
print("\n[PASS] Agent 已调用工具并返回状态信息。")
return 0
finally:
d.close()
if __name__ == "__main__":
sys.exit(main())6.5 作业 1 · FastAPI 模拟服务
运行(207 上):uvicorn 作业1_server_status_api:app --host 0.0.0.0 --port 8777
完整程序:/opt/workbuddy/scripts_cursor/内部智能体配置文档专题汇总/作业1_server_status_api.py
运行/引用:/usr/bin/python3 /opt/workbuddy/scripts_cursor/内部智能体配置文档专题汇总/作业1_server_status_api.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""作业 1 · 模拟「查询服务器状态」HTTP 工具(FastAPI)。
启动(207 上):
pip3 install fastapi uvicorn -q
uvicorn 作业1_server_status_api:app --host 0.0.0.0 --port 8777
或:bash /opt/workbuddy/scripts_bash_cursor/作业1_带工具调用的Agent_服务器状态/作业1_启动_server_status.sh
"""
from __future__ import annotations
from fastapi import FastAPI
app = FastAPI(
title="Server Status API",
version="1.0.0",
description="Dify Agent 作业 1:模拟查询服务器 CPU / 内存 / GPU 状态",
)
@app.get("/server/status", operation_id="getServerStatus", summary="查询服务器状态")
def get_status(server_name: str) -> dict[str, str]:
"""根据 server_name 返回模拟监控指标(本服务不连真实监控)。"""
return {
"server": server_name,
"cpu": "45%",
"memory": "62%",
"gpu_util": "78%",
"gpu_memory": "18.2/24 GB",
}
@app.get("/health")
def health() -> dict[str, str]:
return {"status": "ok"}
if __name__ == "__main__":
import uvicorn
uvicorn.run("作业1_server_status_api:app", host="0.0.0.0", port=8777, reload=False)6.6 Xinference 重启后恢复(CPU 路径,完整 Bash)
运行(207 上):bash /opt/workbuddy/scripts_bash_cursor/Dify_专题十四_知识库问答变慢卡住失败排查与容量规划/专题十四_内联_12.sh
完整脚本:scripts_bash_cursor/Dify_专题十四_知识库问答变慢卡住失败排查与容量规划/专题十四_内联_12.sh
运行/引用:bash /opt/workbuddy/scripts_bash_cursor/Dify_专题十四_知识库问答变慢卡住失败排查与容量规划/专题十四_内联_12.sh
#!/usr/bin/env bash
set -euo pipefail
docker exec xinference bash -lc '
xinference login -e http://127.0.0.1:9997 --username admin --password admin1234
xinference launch -e http://127.0.0.1:9997 -n bge-m3 -t embedding -u bge-m3
xinference launch -e http://127.0.0.1:9997 -n bge-reranker-v2-m3 -t rerank -u bge-reranker-v2-m3
'6.7 OpenAPI 工具 Schema(作业 1)
完整补丁:patches_cursor/内部智能体配置文档专题汇总/作业1_server_status_openapi.yaml
运行/引用:见 patches_cursor/内部智能体配置文档专题汇总/作业1_server_status_openapi.yaml
openapi: 3.0.0
info:
title: Server Status API
version: 1.0.0
description: 作业 1 · 模拟查询服务器 CPU / 内存 / GPU 状态
servers:
- url: http://192.168.110.207:8777
paths:
/server/status:
get:
operationId: getServerStatus
summary: 查询服务器状态
description: 根据服务器名称返回 CPU、内存、GPU 利用率等模拟指标
parameters:
- name: server_name
in: query
required: true
description: 服务器名称,例如 gpu-server-01
schema:
type: string
responses:
"200":
description: 成功
content:
application/json:
schema:
type: object
properties:
server:
type: string
cpu:
type: string
memory:
type: string
gpu_util:
type: string
gpu_memory:
type: string6.8 更多完整程序索引
| 场景 | 程序 |
|---|---|
| 改 Agent 快照绑库+Rerank | 专题十五_05_改Agent快照绑库与Rerank.py |
| 改 max_tokens | 专题十五_06_改max_tokens.py |
| 注册 OpenAPI 工具 | 作业1_02_注册OpenAPI工具.py |
| 挂工具到 Agent | 作业1_04_查ID并挂工具.py |
| GPU 路径改 Dify 凭据 | 专题十三_03B_改Dify凭据_GPU路径.py |
| Weaviate 中继 | scripts_bash_cursor/Dify_专题六_weaviate中继/专题六_01_启动weaviate中继.sh |
| Shell 工具排障 | 专题七_01_检查沙箱服务.py |
全部列表见 docs/md_cursor/完整代码约定_cursor.md 与各专题文末「程序一览」。
第七部分 实战问题与解决方案总表
汇总各专题「本次实战」记录。现象 → 根因 → 解法 → 对应专题。
7.1 模型与接入
| # | 现象 | 根因 | 解法 | 专题 |
|---|---|---|---|---|
| M1 | Dify 模型列表空 / 创建 Agent 报 schema | 插件 schema 克隆 bug | 补丁 llm.py;专题十 | 专题十 |
| M2 | vLLM Up,Dify curl 不通 | API Base 漏 /v1、防火墙、模型名不一致 | 七层排查;116:8000/v1 | 专题五 |
| M3 | KeyError: invalid tool call parser: qwen3 | vLLM 无 qym3 解析器名 | 改 --tool-call-parser qwen3_xml | 专题四/九 |
| M4 | 控制台登录 403 | 密码未 base64、缺 CSRF | 用 dify_api.py 登录 | 专题九 |
| M5 | context_size 与 max-model-len 差数量级 | Dify 校验失败 | LLM 64000,vLLM 65536 | 专题九 |
7.2 知识库与检索
| # | 现象 | 根因 | 解法 | 专题 |
|---|---|---|---|---|
| K1 | Agent 选不到知识库,库页仍 available | Xinference 重启,bge-m3 实例丢 | login + launch bge-m3 | 专题三 |
| K2 | 命中测试时好时坏 | Weaviate IPv6/IPv4 | 8088 中继 | 专题六 |
| K3 | 命中测试排序差 | 未开 Rerank | 专题十三 两处 JSON | 专题十三 |
| K4 | 命中测试好了,对话仍差 | 只改知识库,未改 Agent 快照 | 改 snapshots + drafts | 专题十三·7 |
| K5 | Rerank JSON 被拒绝 | 两套字段名混用 | 知识库用 reranking_*,Agent 用 provider/model | 专题十三·8 |
| K6 | --n-gpu 0 ValueError | 无 GPU 不能传 0 | 不传 --n-gpu | 专题十三·4 |
| K7 | 403 launch / 401 列模型 | 用推理 Key 做管理操作 | 容器内 admin login 再 launch | 专题十三·1–3 |
| K8 | CLI 100% 但列表无 rerank | worker 异步失败 | 以 /v1/models 为准 | 专题十三·11 |
| K9 | 重启后检索全挂 | launch 不持久化 | 见第六部分 6.6 relaunch 脚本 | 专题十三·12 / 十四·G |
7.3 问答与 Agent 配置
| # | 现象 | 根因 | 解法 | 专题 |
|---|---|---|---|---|
| A1 | System message must be at the beginning | Qwen3 只接受一条 system 在最前 | 补丁合并 system(chat.py) | 专题四 |
| A2 | 空泡 / token limit 2048 / 8192 | max_tokens 太小;thinking 吃预算 | 快照设 32768;Top-K 3–5 | 专题十一/十二/十四·B |
| A3 | 改完 Max Tokens 又变 8192 | 点「发布」写回 null | 不要发布;API/SQL 改快照+草稿 | 专题十一 |
| A4 | 界面停 knowledge_base_search | 检索已结束,LLM 在 thinking | 看 agent_backend 时间线 | 专题十四 |
| A5 | POST /apps mode=agent 400 | 1.16 创建口改为 /agent | 用 POST /agent | 作业 1 |
| A6 | invalid uuid: server_status | provider_id 写了名称非 UUID | 查 tool_api_providers.id | 作业 1 |
| A7 | Shell / no available node | sandbox 未起或 SANDBOX_URL 错 | compose 服务名,非 localhost | 专题七 |
| A8 | 插件 SyntaxError future | patch 顺序 | 专题八 apply 脚本 | 专题八 |
7.4 Langfuse
| # | 现象 | 根因 | 解法 | 专题 |
|---|---|---|---|---|
| L1 | Dify .env 配 Langfuse 无效 | 1.16 应用级 trace-config | Console API 写入 | Langfuse 连接·坑1 |
| L2 | Langfuse 无 API Key | 缺 INIT pk/sk | .env + 重建 web | 坑2 |
| L3 | Celery success 但后台空 | events_only 拒 ingestion | dual 模式 | 坑3–4 |
| L4 | 无 Token 面板 | Generation 缺 UUID | 补丁 langfuse_trace.py | 坑5 |
| L5 | Host localhost 连错 | 容器 localhost ≠ 宿主机 | http://192.168.110.207:3000 | 坑7 |
| L6 | Trace 无 chunk 列表 | 上报链路限制 | 召回看命中测试 | 专题十三·10 / 十四·J |
7.5 性能与容量
| # | 现象 | 根因 | 解法 | 专题 |
|---|---|---|---|---|
| P1 | 全员慢,命中测试快 | vLLM 排队 max-num-seqs=8 | nvidia-smi + metrics waiting | 专题十四·I / SOP |
| P2 | Rerank 16s+ | CPU 交叉编码器 | 降 K / 短块 / 迁 GPU | 专题十三 / 十四·C |
| P3 | GPU OOM | 显存被多进程占满 | 降 utilization;勿盲目加 seq | 专题九 |
7.6 场景速查(一线运维用)
| 你看到的 | 先做 | 打开 |
|---|---|---|
| 搜不到 | 命中测试 + available + bge-m3 | SOP §1 / 专题三 |
| 答偏 | 命中测试 Top1 + Langfuse Trace | SOP §2 / 专题十三 |
| 很慢 | 分层探针 + vLLM 排队 | SOP §3 / 专题十四 |
| 空泡 8192 | message_tokens vs max_tokens | 专题十二 |
| 重启后全挂 | relaunch embedding+rerank | §6.6 |
第八部分 对本系统的专业建议
8.1 架构建议
- 控制面与推理面分离:207 跑 Dify + 观测 +(当前)CPU 检索;116 跑 vLLM。公司到 200 人时,把 Xinference 迁到 116 或第三台 GPU 机,避免 207 内存成为瓶颈。
- 配置单一真相源:运行期以
agent_config_snapshots+agent_config_drafts为准;知识库页只影响命中测试,除非同步改快照。 - 补丁清单化:plugin_daemon / worker 内补丁(system 合并、Langfuse UUID、schema 克隆)在容器重建后会丢——维护一份
patches_cursor/apply 脚本顺序,重建后按序重打。 - Weaviate 中继长期保留:8088 中继解决 IPv6 偶发,不要「修好了就删」。
8.2 运维建议
- Xinference 重启 SOP:任何
docker restart xinference后,执行 §6.6 relaunch,再测命中测试。 - 验收永远新开对话:
conversation_id="";失败会话status=error不要继续点。 - 禁止随意点发布:新 Agent 改库后只强刷页面。
- 监控最小集:116
nvidia-smi+ vLLM metrics;207docker stats xinference+ Weaviate 8088 探活。 - Langfuse 仅作观测:不作为检索调试工具;召回问题回 Dify 命中测试。
8.3 安全建议
_config.py含控制台与 API 密钥——勿提交公网仓库;换密钥后同步改脚本常量。- 自定义 HTTP 工具走 ssrf_proxy——模拟 API 不要暴露内网敏感接口无鉴权。
- Langfuse / Dify 控制台限制内网访问或加 SSO。
8.4 演进路线(建议优先级)
| 阶段 | 动作 | 触发条件 |
|---|---|---|
| 现在 | 维持 CPU Rerank + 116 vLLM;max_tokens=32768 | 已验收 |
| 短期 | 作业 2+ 更多 HTTP 工具 / 工作流 | 业务要动数据 |
| 中期 | 116 加 Xinference GPU(路径 B) | 命中测试常 >10s 或人数 >150 |
| 长期 | vLLM 第二副本 / 小模型分流 | waiting 长期 >0 |
第九部分 全部专题 md / html 对照索引
| 分类 | 文档 | Markdown | HTML |
|---|---|---|---|
| 总入口 | 文档索引首页 | 内部智能体搭建_文档索引首页_cursor.md | .html |
| 本文 | 配置专题汇总 | 内部智能体配置文档专题汇总_cursor.md | .html |
| 第一步 | 安装手册 | Dify_Qwen安装配置手册_cursor.md | .html |
| 第一步 | 新 Agent 创建 | Dify_专题十五_新Agent从零创建完整教程_cursor.md | .html |
| 第一步 | Qwen 接入 | Dify_专题一_集成Qwen3.6-27B_cursor.md | .html |
| 第一步 | bge-m3 | Dify_专题二_Xinference运行bge-m3_cursor.md | .html |
| 第一步 | 模型不通 | Dify_专题五_大模型运行成功但Dify仍不可用_cursor.md | .html |
| 第一步 | 其它配置 | Dify_专题九_其它配置问题解决_cursor.md | .html |
| 第一步 | Shell 工具 | Dify_专题七_Agent_shell_provider修复_cursor.md | .html |
| 第二步 | Langfuse 部署 | Langfuse_部署教程_cursor.md | .html |
| 第二步 | Langfuse 连接 | Langfuse_连接Dify专题_cursor.md | .html |
| 第三步 | Rerank | Dify_专题十三_知识库Rerank重排序_cursor.md | .html |
| 排障 | 知识库选不到 | Dify_专题三_Agent知识库选择_cursor.md | .html |
| 排障 | 问答报错 | Dify_专题四_Agent问答报错_cursor.md | .html |
| 排障 | weaviate | Dify_专题六_weaviate中继_cursor.md | .html |
| 排障 | 插件 patch | Dify_专题八_插件patch_future顺序子坑_cursor.md | .html |
| 排障 | 模型列表空 | Dify_专题十_模型列表为空Agent创建报错_cursor.md | .html |
| 排障 | max_tokens 不落库 | Dify_专题十一_新Agent类型max_tokens不持久化_cursor.md | .html |
| 排障 | 空泡 2048 | Dify_专题十二_max_tokens过小导致空泡卡住_cursor.md | .html |
| 排障 | 变慢/容量 | Dify_专题十四_知识库问答变慢卡住失败排查与容量规划_cursor.md | .html |
| 培训 | 排错 SOP | 企业AI助手排错SOP_培训与赋能_cursor.md | .html |
| 集成环境 | Prometheus/Grafana/SLA | 集成环境部署_Prometheus_Grafana_SLA_cursor.md | .html |
| 作业 | 工具调用 Agent | 作业1_带工具调用的Agent_服务器状态_cursor.md | .html |
| 作业 | 汇报 PPT 模版 | 作业9_汇报PPT模版_cursor.md | .html |
| 作业 | 企业使用手册 | 作业10_企业AI平台使用手册_cursor.md | .html |
| 作业 | 企业白皮书 | 作业11_企业AI平台白皮书_cursor.md | .html |
| 作业 | 意图路由 Workflow | 作业2_客服意图路由工作流_cursor.md | .html |
| 约定 | 完整代码 | 完整代码约定_cursor.md | .html |
*汇总文档版本:与 207 实战环境同步;细节变更以各专题正文为准,本文提供总纲与索引。*