在多数企业的生成式 AI 落地初期,AI 助手的定位普遍停留在“企业知识库问答”。数字化运营团队将 Notion、Google Drive 或内部 Wiki 接入系统,通过检索增强生成(RAG)技术回答员工的日常提问。然而,当业务流程涉及真正的业务系统流转时,纯被动的检索问答很快就会遇到瓶颈:一个只能“告知如何修改客户状态”或“解释如何提交 Jira 工单”的助手,依然将所有实际操作留给了人工。
Dust 通过原生的工具执行(Tools & Actions)机制与模型上下文协议(Model Context Protocol,MCP),打破了这一界限。运营与工程团队能够将基于 OpenAPI 规范定义的内部接口以及商业 SaaS 系统封装为可执行的工具,使对话助手直接具备跨系统读取与写入能力。本文将详细拆解如何在 Dust 中导入并配置自定义 Actions 与 OpenAPI 工具、权衡凭据认证机制、设定高风险操作防护网,并打通自然语言问答与业务系统的双向自动化闭环。
架构演进:从被动检索到主动执行
要让对话助手承担工作流执行者的角色,首先需要理解 Dust 在底层如何协调大语言模型(LLM)与外部系统的交互链路:
+-----------------------------------------------------------------------------------+
| Dust Workspace |
| |
| +-----------------------+ +------------------------------------+ |
| | 用户提问 / Webhook | | 助手编排核心 | |
| | 事件触发 | ----------> | (LLM + 系统指令 Instructions) | |
| +-----------------------+ +-----------------+------------------+ |
| | |
| | 意图识别与工具决策 |
| v |
| +------------------------------------+ |
| | 工具调用与受保护参数注入 | |
| +-----------------+------------------+ |
+------------------------------------------------------------|----------------------+
|
+---------------------------------------+---------------------------------------+
| |
v v
+---------------------------------+ +---------------------------------+
| 原生集成工具 (Built-in Tools) | | 自定义 Remote MCP / OpenAPI 服务|
| (HubSpot, Jira, GitHub, Slack) | | (内部微服务、自动化网关中间件) |
+----------------+----------------+ +----------------+----------------+
| |
| OAuth (个人凭据或工作区共享凭据) | Bearer Token / 静态 OAuth / mTLS
v v
+---------------------------------+ +---------------------------------+
| 商业 SaaS 业务系统 | | 企业内部核心业务系统 |
| (CRM 商机、工单流转、协作通讯) | | (ERP、计费系统、私有数据库代理) |
+---------------------------------+ +---------------------------------+
在传统 RAG 架构中,LLM 仅对索引文档进行语义相似度匹配并归纳输出。而在工具执行链路中:
- Schema 暴露:Dust 将已配置工具的输入输出结构(基于 OpenAPI 或 MCP 派生的 JSON Schema)作为元数据暴露给底层模型。
- 意图解析与参数提取:模型从对话上下文中识别用户操作意图,自动抽取结构化参数(如工单描述、商机 ID、优先级标签)。
- 参数注入与屏蔽:Dust 将预设的环境变量、服务基地址或租户标识(隐藏于 LLM 视线之外)与模型生成的参数拼装在一起,杜绝模型幻觉导致的参数篡改。
- 高风险人机协同审核(Human-in-the-Loop):关键写操作触发安全确认模态框,经人工核准后方可真正向外部系统发起写请求。
- 状态反馈与闭环:外部系统执行结果返回对话上下文,助手根据返回的状态码与数据生成执行报告。
第一步:将 OpenAPI 规范封装为自定义 MCP 服务
Dust 深度拥抱开放的模型上下文协议(MCP)。对于企业现有的 OpenAPI 3.0 REST 接口(如内部 CRM 适配层、工单系统中间件或账号开通服务),最高效的接入方式是构建轻量级 MCP Server 包装层,对外暴露结构化工具。
使用 TypeScript SDK 定义标准工具
通过官方 TypeScript MCP SDK,运营开发人员可以利用 Zod 库对入参进行强类型校验:
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
const server = new McpServer({
name: "ops-workflow-engine",
version: "1.0.0",
});
// 暴露一个更新 CRM 商机阶段的 OpenAPI PATCH 接口
server.tool(
"update_crm_deal_stage",
"更新企业 CRM 销售管线中的商机所处阶段与赢单概率",
{
dealId: z.string().describe("商机的唯一数字或字符串标识符"),
newStage: z.enum(["Qualified", "Proposal", "Contract_Sent", "Closed_Won", "Closed_Lost"]).describe("目标阶段"),
closeNotes: z.string().optional().describe("阶段变更的原因说明与备注"),
},
async ({ dealId, newStage, closeNotes }) => {
const response = await fetch(`https://api.internal.company.com/v1/deals/${dealId}/stage`, {
method: "PATCH",
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${process.env.INTERNAL_OPS_API_KEY}`,
},
body: JSON.stringify({ stage: newStage, notes: closeNotes }),
});
if (!response.ok) {
return {
content: [{ type: "text", text: `更新商机失败:${response.statusText}` }],
isError: true,
};
}
const data = await response.json();
return {
content: [{ type: "text", text: `商机 ${dealId} 已成功推进至 ${newStage}。记录更新标识:${data.id}` }],
};
}
);
使用 Dust 输入架构预配置静态参数
在很多企业场景中,诸如服务域名、环境切换(Staging/Production)或项目键名(Project Key)不应交由模型自由猜测,否则可能引发幻觉或环境污染。
Dust 提供了 @dust-tt/client 库,支持在 MCP 定义中引入预配置参数。这些字段将在 Dust 助手编辑面板中由管理员静态填写,对模型完全不可见:
import { ConfigurableToolInputSchemas, INTERNAL_MIME_TYPES } from "@dust-tt/client";
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
const server = new McpServer({
name: "jira-dispatch-helper",
version: "1.0.0",
});
server.tool(
"create_ops_incident_ticket",
"在指定的工程队列中创建高优先级故障排查工单",
{
// 模型根据自然语言对话动态提取
summary: z.string().describe("故障简要标题"),
description: z.string().describe("故障详细描述与重现步骤"),
priority: z.enum(["P1", "P2", "P3"]).describe("故障严重度评级"),
// 在 Dust 助手配置面板中静态绑定,模型不会感知此字段的存在
projectKey: ConfigurableToolInputSchemas[INTERNAL_MIME_TYPES.TOOL_INPUT.STRING],
environment: ConfigurableToolInputSchemas[INTERNAL_MIME_TYPES.TOOL_INPUT.STRING],
},
async ({ summary, description, priority, projectKey, environment }) => {
return callJiraBackend({ summary, description, priority, projectKey, environment });
}
);
第二步:在 Dust 工作区配置工具与凭据体系
在 MCP 服务部署并提供公网 HTTPS 地址后,工作区管理员需要将其添加至 Dust。
注册工具路径
- 登录 Dust,进入目标工作区,点击 Spaces > Tools。
- 点击右上角 Add Tool。
- 若接入 Jira、HubSpot、Salesforce 等常见系统,可直接选用 Dust 内置集成;若接入自定义 OpenAPI 服务,点击 Add MCP Server。
- 填写自定义 MCP 服务的公网 URL。
身份认证模式权衡:个人凭据 vs 共享凭据
凭据选型直接决定了执行记录的审计合规性与权限范围:
| 认证类型 | 认证机制 | 适用业务场景 | 安全合规与审计影响 |
|---|---|---|---|
| 个人凭据 (Personal Credentials)(强烈推荐) | 每位操作者首次调用工具时绑定自己的 OAuth 账户;管理员仅负责首次连通性校验与元数据抓取。 | 交互式日常运营、需要严格隔离数据可见范围的场景(如销售更新个人商机、研发认领工单)。 | 所有业务系统的变更操作均与实际调用员工绑定,保留完整审计日志,杜绝越权行为。 |
| 工作区共享凭据 (Shared Credentials) | 管理员在后台绑定统一的系统服务账号(Service Account),供全员或所有助手共用。 | 自动化工单流转、客户咨询分类机器人、团队统一消息广播管道。 | 便于集中管理与免登录体验,但无法区分具体操作人员;要求对服务账号配置严格最小权限。 |
| Bearer Token / 自定义请求头 | 管理员直接提供静态 API 密钥,Dust 每次发起 HTTP 请求时附加在 Authorization 标头中。 | 企业私有基础设施托管的内部微服务、API 网关代理。 | 依靠网络层保护,可在防火墙处绑定 Dust 静态出口 IP 白名单。 |
| 静态 OAuth (Static OAuth) | 在目标企业平台预先注册 Dust 回调地址,并在 Dust 中填入 Client ID 与 Client Secret。 | 具备严格企业安全策略的第三方平台(如私有部署 GitHub Enterprise、定制版 CRM)。 | 支持严格的 Token 刷新机制、租户隔离与指定 Scope 限制。 |
网络与防火墙配置
若自定义 MCP 服务架设于企业内网或设有访问控制的云环境中:
- 静态出口 IP (Static Egress IPs):在 Dust 管理中心完成工作区域名验证后,可向企业防火墙开放 Dust 的静态出口 IP 地址段,限制仅允许 Dust 流量入站。
- OAuth 回调地址配置:若采用静态 OAuth,需在认证服务商后台配置对应的回调 URL:
- 美区工作区:
https://dust.tt/oauth/mcp_static/finalize - 欧区工作区:
https://eu.dust.tt/oauth/mcp_static/finalize - 全局网关:
https://app.dust.tt/oauth/mcp_static/finalize
- 美区工作区:
第三步:构建安全防线与人机协同机制(Human-in-the-Loop)
赋予对话助手直接对生产业务系统进行增删改(Create/Update/Delete)的权限,必然带来误操作或 Prompt 注入的安全隐患。Dust 在系统级提供了多维防线。
1. 高风险工具标识(High Stake)
在连接任何能够修改外部系统数据的工具时(例如 HubSpot 更新交易、Jira 修改工单状态),管理员可以将其设置为 HIGH STAKE。
- 拦截机制:当助手决定调用高风险工具时,对话不会自动静默完成,而是在界面中弹出一个确认卡片,展示即将提交给 API 的具体参数键值。
- 人工核准:只有当具备权限的用户点击“确认”(Approve)后,请求才会真正发送至外部系统。
- API 级确认:若通过 Dust Conversation API 进行程序化调用,可通过
POST /api/v1/w/{wId}/assistant/conversations/{cId}/messages/{mId}/validate-action接口完成操作的批准或拒绝。
2. 将工具限制至技能(Restrict to Skills)
在 Spaces > Tools 页面中,勾选 Restrict this tool to skills。
- 该工具将被移出全局 Agent Builder 的常规选择列表,普通员工在闲聊或自建普通助手时无法随意调用。
- 工具仅能在指定的技能(Skills)中被引用,确保只有符合严格合规提示词与知识边界的助手才能执行特定动作。
3. 基于空间(Spaces)的权限物理隔离
将具有写权限的敏感工具放置在特定的受限空间(Restricted Space)内。仅有被授权加入该空间的核心运营成员,才能与具备相应工具能力的助手对话。
第四步:在 Agent Builder 中设计高可靠的执行提示词
完成工具挂载后,助手能否稳定识别意图、准确解析参数并正确处理异常,核心取决于系统指令(Instructions)的设计。
生产级指令结构四要素
- 身份定位与明确边界:说明助手的业务职责,声明不可越权的范围。
- 前置核验协议:强制要求在执行写操作前,必须先调用读工具进行状态校验。
- 入参提取规则:严格限定各个参数的提取逻辑与必填检查。
- 异常恢复与用户提示:遇到接口报错或字段不完整时,给出清晰、可排查的反馈。
运维排障与 CRM 联动助手配置示例
# 角色与职责
你是企业的技术运营工单协同助手。你的任务是协助排障人员将客服与监控中反馈的技术故障,与 CRM 中的客户合同信息进行关联,并在 Jira 中创建符合工程规范的技术工单。
# 工具调用规范
## 1. 客户身份与等级核验 (HubSpot)
- 在创建任何技术工单前,必须先调用 `Get Object By Email` 或 `Search Crm Objects` 查询客户信息。
- 获取客户当前的签约版本(Tier)与活跃交易状态。
- 若客户属于“Enterprise”等级,将故障评级自动提升为 P1。
## 2. 工程工单创建 (Jira)
- 工具:`create_issue`
- 标题(summary)必须简洁明了,限制在 50 字以内,采用格式:`[模块名] 故障核心现象`。
- 描述(description)必须包含以下三个结构化章节:
1. 影响客户(公司名称、对接人、服务等级)
2. 故障现象与报错信息
3. 初始重现步骤与监控日志链接
- 工单类型固定为 "Bug",组件模块填写为 "Production-Ops"。
## 3. 安全确认与错误处理
- 涉及修改现有商机状态或关闭工单的动作,在调用工具前必须在回答中完整列出参数,请求人工核实。
- 若工具调用返回 401 或认证错误,明确告知用户:“请前往个人头像菜单中的 Tools & Triggers 重新连接你的 Jira/HubSpot 个人凭据”。
第五步:利用 Webhooks 实现无需人工打字的全自动闭环
对话助手不仅可以由人工在聊天框中触发,还能由外部系统的事件主动激活。将自定义 Actions 与 Dust 的 Webhook Triggers 结合,即可构建完全无人值守的自动化流程。
+--------------------------+ HTTP POST 事件 +-----------------------------+
| 外部业务系统 | ---------------------------------> | Dust Webhook Source |
| (Jira、GitHub、Zendesk、 | | (Spaces > Triggers) |
| 企业内部报警网关) | +--------------+--------------+
+--------------------------+ |
| 载荷解析与签名校验通过
v
+--------------------------+ 执行工具 Actions +-----------------------------+
| 目标落地系统 | <--------------------------------- | Dust 助手自主运行 |
| (HubSpot 状态自动更新 / | | (执行提示词指令、提取参数、 |
| Slack 实时发布简报) | | 触发外部工具完成闭环) |
+--------------------------+ +-----------------------------+
配置 Webhook 触发链路
- 创建 Webhook 源(管理员操作):
- 进入 Spaces > Triggers,点击 Add source。
- 可选系统预置源(Jira、GitHub、Linear、Zendesk 等)或 Custom webhook。
- 自定义源支持高级安全防护:开启 Signature header 与 sha256 签名算法,Dust 将自动生成签名密钥并拦截未经验证的仿冒请求。
- 在助手面板挂载触发器:
- 在 Agent Builder 中进入 Triggers > Add triggers,关联创建好的 Webhook 源。
- 设定自然语言过滤规则(如:“仅在工单优先级为 High 且状态变更为 Escalated 时运行”)。
- 勾选 Include webhook payload,将原始事件 JSON 完整送入助手上下文。
- 设置运行提示词(例如:“从 Payload 中提取报错日志,检索知识库中的解决方案,调用 Jira 工具向对应工单添加处理建议评论”)。
- 设置 24 小时最大调用额度(Rate Limiting),防止事件风暴导致额度耗尽。
落地架构方案对比与选型指南
在设计自动化工作流助手时,运营团队通常在以下三种集成形态之间进行权衡:
| 评估维度 | 原生 Dust 集成工具 (如 Jira, HubSpot) | 自定义 Remote MCP 服务 (包装 OpenAPI) | 外部 Webhook 触发 + Dust API 协同 |
|---|---|---|---|
| 核心适用场景 | 主流标准化 SaaS 平台的日常增删改查。 | 企业内部私有系统、定制微服务、复杂多步骤原子接口。 | 业务系统状态变更引发的异步、全自动无人值守闭环。 |
| 开发与维护成本 | 零代码,纯界面 OAuth 授权即可启用。 | 中等,需编写 MCP 包装层代码并维护服务托管。 | 中等,需配置外部事件发射器与签名验证。 |
| 凭据管理机制 | 原生支持 Personal(个人账号)与 Shared(服务账号)。 | 支持 Bearer 密钥、静态 OAuth、自定义请求头与静态 IP。 | 工作区 API Key 或 Webhook HMAC 密钥。 |
| 触发形态 | 用户主动在对话框中沟通或由其他 Agent 委派。 | 用户主动在对话框中沟通或由其他 Agent 委派。 | 外部系统 HTTP POST 推送事件或定时调度。 |
| 安全与风控机制 | High Stake 弹窗审核、空间权限隔离。 | 代码级逻辑校验、参数屏蔽隐藏、High Stake 拦截。 | 频次流控(Rate Limit)、事件过滤表达式。 |
生产部署前检查清单
在将工作流执行助手正式开放给一线业务团队使用前,建议逐一核对以下检查项:
- 凭据模式合规性:对涉及数据写操作的工具,是否优先采用了 Personal 凭据以确保审计追踪;若采用 Shared 凭据,服务账号权限是否遵循最小化原则?
- 高风险标记落实:所有能够删除记录、更新核心客户状态或对外发送信息的工具,是否均已开启 High Stake 保护?
- 静态参数屏蔽:接口基地址、数据库租户 ID、测试环境开关等敏感字段,是否已通过
ConfigurableToolInputSchemas静态注入,杜绝模型幻觉猜测? - 提示词容错完备性:Prompt 中是否明确了工具调用失败(如 Token 过期、网络超时、校验不通过)时的降级说明与排查指引?
- 网络白名单配置:针对内部网络环境中的 MCP 服务,是否已在企业网关将 Dust 的静态出口 IP 设入白名单?
- 触发器限流保护:挂载了 Webhook 的全自动助手,是否已设置合理的 24 小时频次上限以抵御突发流量?
通过将 OpenAPI 接口通过 MCP 标准接入 Dust,并辅以完善的凭据模型与人机协同审核,数字化运营团队能够真正打破传统知识库“动口不动手”的局限,让 AI 对话助手成为驱动业务高效流转的核心执行器。