Dify 的 LLM 节点接上 TaoToken 后,JumpServer 加授权只需一句话
Dify 的 LLM 节点接上 TaoTokenhttps://taotoken.net/?utm_sourcetaotoken_aicg_blog_end之后JumpServer 加授权真的只要一句话给张三授权 192.168.100.100模型自己去找 user_id 和 asset_id最后落到 jumpserver_create_asset_permission 上人不用再在资产页和授权页之间来回点。用过 JumpServer 的同行都清楚新建用户、导入资产、拉账号、加授权规则每一步都不难凑在一起就是十几下鼠标而且要重复很多遍。于是就有了这条思路用 Dify 编一个智能运维助手把 JumpServer MCP 的八百多个工具挂上去让 LLM 当大脑、MCP 当手臂。整套流程里最容易翻车的不是 MCP 授权而是第四步 LLM 节点里那把模型 Key —— 从哪儿拿、Base URL 填什么、模型 ID 怎么写填错一个字符工具节点就永远调不起来。1. Dify 当「大脑」、JumpServer MCP 当「手臂」Key 是中间那根神经1.1 JumpServer MCP Server 把八百多个 API 包装成模型看得懂的工具JumpServer 本身提供的是 REST API参数、路径、认证方式都是给人看的模型直接啃接口文档很容易在参数名上翻车。MCP Server 就是夹在中间的一层独立程序把你的 JumpServer 地址、认证方式、API 结构都吃进去再吐出一批命名统一、参数明确的工具函数。对模型来说它看到的不再是「拼一个 POST 请求到某路径」而是 users_users_create、jumpserver_create_asset_permission 这样的工具名和结构化参数选对工具、填对参数剩下的网络请求由 MCP 去做。这套工具的数量是它的优点也是它的麻烦点八百多个覆盖用户、资产、权限、账号、命令过滤等各个模块。第一次接进 Dify 的时候光把清单拉完就要等一阵子中途超时失败也很常见。所以建议部署时把 MCP Server 和 JumpServer 放同一台机器走内网减少 Dify 那边等授权时被网络抖动打断的概率。至于每个工具具体做什么不用背JumpServer 自己的 API 文档页http://你的jumpserver地址/api/docs/就是最好的字典MCP 的工具名基本能和那一页的接口一一对上。1.2 真正决定「一句话授权」能不能成的是 LLM 节点Dify 在这里的角色是调度员接住自然语言判断意图挑工具再把工具返回的 JSON 翻译成人话。整个链路里吃能力的是 LLM 节点因为它要完成两步串联——先把「张三」和「192.168.100.100」这两个人类概念翻译成授权接口真正需要的 user_id 和 asset_id再用这两个 ID 去调授权工具。这两步之间没有人工介入全靠模型自己在多轮工具调用里保持上下文所以它对提示词的敏感度远高于普通问答。模型是谁其实不那么关键DeepSeek-chat 应付这类「抽关键词 选工具 拼参数」的活已经够用真正要稳住的是它背后那把 KeyKey 是否有效、模型 ID 是否和供应商列表里完全一致、Base URL 有没有填成落地页地址。把 Key 统一收到 TaoToken 之后这三个变量就收敛成一个 Base URL 加一个模型名以后想换更贵的模型试效果改一个字段就行不用再折腾账号体系。2. 前置准备三套环境跑起来再去拿模型 Key2.1 Dify、JumpServer、MCP Server 各自的边界三套东西可以挤在一台机器上也可以分三台判断标准只有一条Dify 能不能通过网络访问到 MCP Server 暴露的端口。MCP Server 建议和 JumpServer 同机因为它要频繁调 JumpServer 的 API走内网最省事。Dify 如果是容器部署特别要注意地址写法——容器里的 localhost 指向的是容器自己不是宿主机写 127.0.0.1 会让 Dify 一直连不上 MCP这类问题在日志里通常表现为连接超时或者连接被拒。JumpServer 侧至少要有一个能调 API 的账号权限别一上来就给超级管理员。可以新建一个运维专用的账号只给它需要的那部分资产管理权限这样即使智能体判断失误能造成的破坏也被框在权限范围内。这一步在原文里其实没细说但做过授权系统的人都明白工具越强越要先想清楚「它最多能干到什么程度」。2.2 打开 TaoToken 注册创建一把 API KeyDify 的模型供应商需要一个能访问大模型的凭证官方渠道要么得绑境外支付方式要么免费额度卡得很死做实验跑几轮就没了。打开 TaoToken注册登录后在控制台创建一把 API Key先复制到本地记事本Dify 里的模型供应商只填这一次。Key 通常在创建时完整展示一次后面再看就是脱敏状态了丢了直接重新建一把成本不高。顺手在模型广场扫一眼当前列表里 DeepSeek-chat 的准确写法大小写、有没有版本后缀都以当时页面显示为准。Dify 里模型名填错一个字符报错信息往往只说「模型不存在」会让你以为是供应商配置错了其实是名字没对上。另外提醒一句这里拿的是给大模型用的 KeyJumpServer 那套 Bearer Token 是另一个系统的凭证两者千万别互相顶替。3. 在 Dify 里把 JumpServer MCP 接上八百多个工具值不值得等3.1 工具 → MCP → 添加服务端点 URL 和请求头怎么填进入 Dify 左侧菜单的「工具」切到「MCP」页签点「添加 MCP 服务」。服务端点 URL 填你 MCP Server 对外暴露的地址形如 http://你的MCP地址:端口/协议路径具体路径取决于部署方式以 MCP Server 的启动日志或说明为准。请求头里需要带上 JumpServer 侧的认证信息格式是 Authorization: Bearer 你的JumpServerToken。这个 Token 的获取方式和原文一致用 JumpServer 的认证接口换一次就行TOKEN$(curl -s -X POST http://YOUR_JUMPSERVER_HOST/api/v1/authentication/auth/ \ -H Content-Type: application/json \ -d {username:admin,password:YOUR_PASSWORD} \ --insecure | jq -r .token) echo $TOKEN命令里的地址、账号、密码全换成你自己的返回的字符串就是 Bearer Token。注意这里换的是 JumpServer 自己的登录凭证是给 MCP 去调 JumpServer API 用的模型那把 Key 走的是 TaoToken两套东西在配置里分属不同位置不要混填。3.2 点完授权要等八百多个工具不是一瞬间能拉完的点下授权之后页面会转很久几十秒到几分钟都算正常范围工具数量摆在那里中途刷新页面很可能让拉取重来。判断是否真的卡死看两个信号Dify 这边有没有超时提示MCP Server 的日志里有没有持续的请求记录。如果两边都静悄悄多半是网络不通如果 MCP 日志里报认证失败那就是 Bearer Token 过期或者账号密码错了。授权成功以后别急着建工作流先在工具列表里搜一下 jumpserver_create_asset_permission 和 users_users_create 在不在。这两个是后面「一句话授权」和「一句话建用户」要用的核心工具只要它们出现了说明这次同步是完整的如果只同步了一部分删掉重新授权比在一个残缺的工具集上排错更快。4. Dify 模型供应商Base URL 填 https://taotoken.net/api模型选 DeepSeek-chat4.1 OpenAI-API-compatible 的四个字段一个都不能填混Dify 里选「OpenAI-API-compatible」这一类供应商最省事因为它走的是通用协议不挑具体厂商。要填的字段就那么几个但恰恰是这几个最容易串字段填什么说明模型类型LLM对话类模型选这个模型名称deepseek-chat以 TaoToken 模型广场当时列表的写法为准API KeyYOUR_API_KEY在 TaoToken 控制台创建只显示一次API Base URLhttps://taotoken.net/api末尾不要加 /v1也不要粘贴带参数的落地页地址重点说第四行。注册、建 Key、看模型广场、看用量这些动作走的是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 而填进 Dify 输入框的地址是 https://taotoken.net/api。这两个地址长得像作用完全不同把带参数的落地页地址粘进 Base URL保存的时候不一定报错但调用的时候一定会失败而且报错信息通常和网络、模型无关很难一眼看出问题。4.2 加模型之前先用 curl 打一发比在 Dify 里反复保存快得多与其在 Dify 里反复保存、删掉、再保存不如先在终端验一次把 Key、模型名、路径这三件事一次性确认掉curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer YOUR_API_KEY \ -H Content-Type: application/json \ -d { model: deepseek-chat, messages: [{role: user, content: 只回两个字通了}] }请求路径里的 /v1 是 OpenAI 兼容协议的固定部分不是 Base URL 的一部分所以配置文件和行为里要分清Base URL 是 https://taotoken.net/api实际请求落在 /v1/chat/completions 上。返回体里能看到 choices 字段和一段回答说明 Key 有效、模型名正确这时候再回 Dify 保存供应商成功率会高很多。模型下拉里出现 deepseek-chat第四步就算过了。5. 工作流三节点LLM 取 ID、工具干活、结束节点回话5.1 系统提示词要把「先查 ID 再授权」的顺序写死新建应用选「工作流」名字随你比如 JumpServer 运维助手。结构照着最简的那条来开始 → LLM → 工具 → 结束。LLM 节点里模型选刚刚接上的 deepseek-chat接下来这段提示词是这个应用成败的关键因为它决定了模型会不会老老实实先查 ID你是 JumpServer 运维助手只能通过已挂载的 JumpServer 工具完成任务不要凭记忆编造任何 ID。 工作规则 1. 用户提到人名时先调用用户查询类工具拿到 user_id拿不到就追问不要猜。 2. 用户提到 IP、主机名或资产名时先调用资产查询类工具拿到 asset_id。 3. 只有同时拿到 user_id 和 asset_id 之后才调用授权类工具完成授权。 4. 参数缺失或工具返回歧义结果时先向用户确认不要连续试错。 5. 每次操作结束后用一句话说明做了什么、结果如何不要输出工具原始 JSON。把第 1、2 条写死的意义在于授权工具的入参只认 ID模型如果不查就硬填「张三」接口只会回一个参数校验失败而你在对话界面看到的是一句含糊的报错排查方向全乱。5.2 工具节点勾哪些工具结束节点为什么必须选 tool.output工具节点里把三类工具勾上用户查询类、资产查询类以及真正干活的 users_users_create、jumpserver_create_asset_permission 等写操作工具。工具多的时候不建议一次全勾LLM 在几百个候选里挑工具命中率会下降可以按「用户相关」「资产相关」「权限相关」拆成几个工具节点前面用问题分类器分流——用户说的是「建人」还是「授权」分到不同分支每支只暴露少量工具模型判断起来轻松很多。结束节点这一步最容易被漏掉必须把输出变量指向工具节点的 tool.output否则工作流跑完了调用记录里能看到工具执行成功对话界面却什么都没有。这不是模型的问题是输出没接线。调试阶段可以先把结束节点的变量接成 tool.output跑通之后再考虑要不要统一改成 LLM 生成的自然语言摘要。6. 验证对 Dify 说「给张三授权 192.168.100.100」6.1 三个场景难度依次递增最简单的场景是查询问一句「列出所有用户」模型调一次用户查询工具就能答上来这一步主要验证工具连接是否正常。中档的是创建用户比如「创建一个新用户叫赵六用户名 zhaoliu」模型只要把参数拼对users_users_create 一次就能成。真正考验 LLM 的是第三个场景给张三授权让他能登录 192.168.100.100。这句话里没有任何一个 ID模型必须先调用户查询工具把「张三」换成 user_id再调资产查询工具把「192.168.100.100」换成 asset_id最后带着这两个 ID 去调 jumpserver_create_asset_permission。整个链条串起来大概三四次工具调用中间任何一次返回多条同名结果、或者资产匹配到多台机器都要模型自己判断要不要追问。如果这一步能稳定跑通说明你的提示词和模型选择都到位了。6.2 回 JumpServer 对账回 TaoToken 看这次调用记没记上对话界面说「已成功授权」只是模型转述的工具返回值最终以 JumpServer 里的记录为准打开对应的用户详情页看授权列表里有没有那条资产权限创建时间是不是刚刚。如果 JumpServer 里有、对话里也说了成功那这条链路就是真的通了。想更省事一点也可以直接在控制台里查这一次操作留下的记录比翻日志快。同时去 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 看一眼这次的用量记录。一次授权对话背后其实是好几轮模型调用每轮都算 token第一次看到数字可能会觉得比预期多这属于工具调用的正常开销——模型要把工具清单和返回结果都读一遍。后续如果你打算让这个助手常驻使用用量趋势比单次数字更值得关注。7. 排障供应商保存不了、工具节点空输出、授权被拒7.1 模型下拉是空的或者保存后调用失败先看 Base URL。填成带参数的落地页地址、末尾多贴了一个 /v1都会让调用走偏。正确写法只有一种https://taotoken.net/api。再确认模型名和模型广场当前列表里的一字不差Dify 不会帮你做模糊匹配。最后看 Key 有没有带多余空格从网页复制的时候末尾拖一个空格是常见事故肉眼很难发现建议粘到终端里用 curl 先打一发。7.2 工具节点没有任何输出分两种。一种是工具压根没被调用对话跑完只回了一段文字这通常是提示词太松模型觉得它能直接回答。把「必须先查 ID」「只能通过工具完成任务」这类约束写进系统提示词情况会明显改善。另一种是工具调了但结束节点没东西检查结束节点的输出变量是不是指向了 tool.output。还有一种少见但麻烦的情况模型本身对工具调用的支持不好换了模型之后工具节点开始不稳定这时候换回 DeepSeek-chat 或者列表里明确支持工具调用的型号试。7.3 授权接口返回权限类错误如果在 JumpServer 里确认用户和资产都存在但授权就是失败方向通常不在 Dify 这边。常见原因是发起调用的那个账号权限不够或者目标资产没有可用的账号。先看 MCP 服务日志里那条原始报错JumpServer 的报错信息写得还算清楚。另外再强调一次边界这套智能体能做的只有 JumpServer API 允许它做的事它不能绕过任何权限规则也不该拿一个有全部权限的账号去跑。给它一个权限收敛的专用账号出问题时损失可控审计记录也干净。8. 跑通之后把 Key 和额度固定下来配置保存好、三个测试场景都能跑通之后建议先用同一把 Key 在 模型对话 里发一条消息确认模型 ID 和 Base URL 没填错这一步比重新走一遍工作流快得多。如果这个运维助手要天天用甚至要接到钉钉、飞书那一侧就顺手看一下 Coding Plan确认额度模型能不能覆盖你预期的调用量别等跑着跑着突然断在授权那一步。需要多把 Key 分给不同环境时在 控制台 API Keys 里建测试和正式分开出问题好定位。如果你还想把同一个 Base URL 用在命令行工具上环境变量和模型对照可以翻一下 Claude Code 接入文档思路和 Dify 这边是一回事地址填 https://taotoken.net/apiKey 用你自己创建的那把模型名以模型广场为准。最后留一句实在话这套东西的价值不在于省几次鼠标点击而在于把「查 ID、核权限、建授权」这类有固定套路、又极容易抄错的活交给一个不会手抄错的执行者。前提是它的每一步都在 JumpServer 的权限框架里走留得下记录、查得到来源这样用起来才安心。