12|离开画布,用自己的程序调用工作流
在 Dify 的测试面板里跑通,只是第一步。如果想让自己的网站、企业内部页面或一个 Python 小程序使用这条流程,就需要从外部发起调用。这一节会带你准备一个最小的已发布流程,找到应用 API 入口,在终端发送一条问题,再把返回……
展开当前模块目录
如果想获取全套课程资料,请关注微信公众号 「AI面包君」,回复 「课程资料」 即可领取。
在 Dify 的测试面板里跑通,只是第一步。如果想让自己的网站、企业内部页面或一个 Python 小程序使用这条流程,就需要从外部发起调用。这一节会带你准备一个最小的已发布流程,找到应用 API 入口,在终端发送一条问题,再把返回结果取出来。
我们先用“输入 → 模板转换 → 结果”的回显流程练习。它不消耗聊天模型调用,也不依赖知识库和订单服务,遇到错误更容易定位。跑通后,你再把同一种调用方式接到毕业项目。文中的响应样例用于解释字段;是否实际调用成功,要以你自己工作区的运行记录为准。
1. API 到底在做什么
可以把 API 理解为给程序使用的服务窗口。人在网页里填写表单、点运行;程序则把同样的数据按约定格式发到接口地址,再读取结构化结果。工作流依然由 Dify 执行,你的程序负责收集输入和展示输出。
沿图看一遍:用户在你的页面里提问,页面把问题交给你的后端,后端携带应用密钥调用 Dify,再把需要展示的 answer 返回给页面。API Key 像服务凭证,应留在后端或你自己的本地练习环境中。上传到网站的 Markdown、HTML、前端 JavaScript 和截图都不应包含它。
| 名称 | 可以怎样理解 | 本节对应值 |
|---|---|---|
| API Base URL | 服务窗口所在的大楼 | Cloud 通常是 https://api.dify.ai/v1 |
| Endpoint | 大楼里的具体窗口 | /workflows/run |
| Header | 请求附带的身份和格式说明 | Authorization、Content-Type |
| Body | 这一单要处理的数据 | inputs、response_mode、user |
| Response | 服务返回的执行结果 | 运行编号、状态、outputs |
应用 API Key 对应具体应用;知识库 API Key 用于知识库接口,不能混用。地址与密钥范围以当前应用的访问页面为准。参见官方 API 入门说明。
2. 先准备一个值得拿来测试的流程
在工作室里打开自己的练习应用。只有一个应用名额时,先保存现有配置;不要覆盖正在被别人使用的业务应用。新建 Workflow 后完成下面三个节点即可,不必导入课程模板。
第一步,输入节点添加短文本变量,变量名为 query,显示名称可以写“问题”,设为必填。显示名称给人看,变量名给程序用,后面请求里必须写 query。
第二步,添加模板转换节点,命名“回显问题”。在该节点的输入变量中添加 query,来源选择 输入 → query,模板填写:
已收到:{{ query }}
第三步,添加结果节点,输出字段命名为 answer,类型为 String,来源选择 回显问题 → output。连成“输入 → 回显问题 → 结果”,在测试面板输入“你好,API”。先确认结果是“已收到:你好,API”。
这时还没有进行外部 API 调用。它只是帮你证明流程内部能够正常传数据。若模板节点里只有字面量 query,或结果节点仍指向旧 LLM 的 text,先在画布里修好。
3. 发布后,找到当前应用的调用入口
测试通过后,点击画布右上角“发布”,按界面提示发布当前版本。API 执行的是已发布版本;草稿里改了字段但没有再次发布,外部程序可能还在调用上一版。
接着看应用左侧导航。本次 Cloud 界面使用“访问点”,有些版本直接显示“访问 API”。进入当前应用对应的 API 说明,核对三件事:应用类型为 Workflow、服务地址、应用密钥入口。不要误进入知识库的“访问 API”。
上图故意保留“尚未发布任何版本”的真实状态,方便你辨认为什么 API 按钮是灰色。它说明入口位置,不表示已经完成 API 调用。先发布练习版本,再回到这里核对“后端服务 API”,不要拿 Web 应用的网页地址当请求地址。
在自己的工作区内按需创建应用密钥,保存到本地临时环境或后端的密钥管理配置中。密钥只属于你的练习环境,不要填进课程文章或提交到代码仓库。如果页面已存在其他业务的凭证,不要拿来试错;先确认它是否属于当前练习应用。
发布版本、服务地址、应用密钥是三个不同对象。发布解决“哪份流程可以被执行”,地址解决“请求发到哪里”,密钥解决“以哪个应用的权限调用”。三项都对,才适合继续。
4. 先读懂将要发送的 JSON
我们这次只发一条问题,请求体如下:
{
"inputs": {"query": "你好,API"},
"response_mode": "blocking",
"user": "course-student-001"
}
inputs 是画布输入字段的集合。这里只有 query;若你的流程还要求 order_id,就要增加同名字段。不要把界面上的中文显示名称“问题”当成请求键,也不要把 query 放在 inputs 外面。
blocking 表示等流程完成后一次性拿结果,适合这条很短的回显流程。user 是你为应用终端用户提供的标识,例如课程学员编号;它不是 API Key,也不是 Dify 登录邮箱。在同一应用内,同一位用户应使用一致的标识。
业务身份还需要你的后端验证。比如毕业项目里的 customer_id 不能因为出现在请求里就被默认信任。真实业务应由后端根据登录身份确定客户范围,而不是允许网页随意传别人的编号。
5. 在 PowerShell 里完成第一次请求
打开 PowerShell。下面的代码会提示粘贴应用密钥,输入时不回显;密钥只用于本次会话内存,不会被写进命令文本或课程文件。Cloud 用户使用下方地址;自部署用户填写自己的服务地址并保留正确的 /v1 前缀。
试读到这里 · 后续内容已封存
关注公众号,继续把这章学完
在「AI面包君」发送关键词「学习AI」拿到口令。验证一次,这个浏览器就能继续阅读全部课程。

