JieGou 提供 260+ MCP 集成、9 个 LLM 供应商和可视化工作流构建器。但每个组织都有通用平台无法预见的独特工具、内部 API 和流程。
今天我们推出三个可扩展性功能,让您将自己的能力引入 JieGou——无需 fork 代码库或等待我们构建集成。
自定义 Webhook 工具
定义由任何 HTTP 端点支持的工具。您的工具在配方、工作流和对话 agent 中可用——就像内置工具一样。
工作方式
- 定义工具:名称、描述、JSON 输入模式和端点 URL
- 配置请求:方法(GET/POST)、自定义头(加密的)、可选的 Handlebars 请求模板
- 映射响应:JSONPath 表达式提取相关输出
- 限定范围:分配给特定部门或设为账户范围
示例:库存检查工具
{
"name": "check_inventory",
"description": "Check current inventory levels for a product SKU",
"inputSchema": {
"type": "object",
"properties": {
"sku": { "type": "string", "description": "Product SKU" }
},
"required": ["sku"]
},
"endpoint": {
"url": "https://api.internal.example.com/inventory/{{sku}}",
"method": "GET",
"headers": { "Authorization": "Bearer {{env.INVENTORY_API_KEY}}" },
"timeoutMs": 10000
},
"responseMapping": "$.data.quantity"
}
现在任何配方或工作流步骤都可以使用 check_inventory 作为工具。LLM 与内置工具一起看到它,并在相关时调用它。
安全
- 生产环境中要求 HTTPS
- 自定义头静态加密(与 BYOK 密钥相同的 AES-256-GCM)
- 所有出站请求通过平台的超时、重试和速率限制基础设施
- 响应大小限制为 100KB
- 工具执行计入您账户的速率限制
自定义 webhook 工具在 Team 计划及以上可用。
自定义工作流步骤类型
对于超出 webhook 调用的逻辑,将自定义步骤类型定义为在 V8 隔离环境中运行的 TypeScript 模块——完全沙盒化,无法访问文件系统、网络或宿主进程。
沙盒
自定义步骤在 isolated-vm V8 隔离环境中执行,具有严格约束:
- 内存限制:每次执行 128MB
- CPU 时间限制:按步骤可配置
- 无
require()或import:依赖被显式注入 - 无文件系统或网络:仅可使用平台提供的 API
注入的 API
自定义步骤可以使用在定义时声明的平台能力子集:
| API | 提供什么 |
|---|---|
http | 代理 HTTP fetch(遵循速率限制) |
llm | LLM 调用(使用账户的 BYOK 配置,跟踪计费) |
firestore_read | 只读 Firestore 访问(限定到账户) |
示例:情感聚合步骤
// Custom step: aggregate-sentiment
// Allowed APIs: llm
export async function execute(input: { reviews: string[] }, context: any) {
const results = await Promise.all(
input.reviews.map(review =>
context.llm.invoke(`Rate this review's sentiment from 1-5: "${review}". Reply with just the number.`, { model: 'haiku' })
)
);
const scores = results.map(r => parseInt(r.trim())).filter(n => !isNaN(n));
const average = scores.reduce((a, b) => a + b, 0) / scores.length;
return {
averageSentiment: Math.round(average * 10) / 10,
totalReviews: scores.length,
distribution: {
positive: scores.filter(s => s >= 4).length,
neutral: scores.filter(s => s === 3).length,
negative: scores.filter(s => s <= 2).length,
},
};
}
在内置的 Monaco 编辑器中编辑代码,定义输入/输出模式,并在部署前使用示例数据测试。
自定义步骤类型在企业计划上可用。
生命周期钩子
注册在工作流和配方执行事件上触发的 webhook 端点。用它们与 Slack、PagerDuty、自定义仪表板或任何 HTTP 服务集成。
支持的事件
| 事件 | 何时触发 |
|---|---|
workflow:start | 工作流执行开始 |
workflow:complete | 工作流成功完成 |
workflow:error | 工作流失败 |
step:start | 单个步骤开始 |
step:complete | 单个步骤完成 |
step:error | 单个步骤失败 |
recipe:start | 配方执行开始 |
recipe:complete | 配方完成 |
approval:requested | 审批门触发 |
approval:granted | 审批通过 |
approval:rejected | 审批拒绝 |
非阻塞 vs. 阻塞
非阻塞钩子(默认)是即发即忘的。平台发送 webhook 并继续执行而不等待响应。用这些进行通知和日志。
阻塞钩子暂停执行直到 webhook 响应(10 秒超时)。响应可以修改执行上下文。用这些进行预检查或动态配置注入。阻塞钩子有断路器——如果它们反复失败,会自动禁用。
示例:工作流完成时 Slack 通知
{
"name": "Slack notify on completion",
"events": ["workflow:complete", "workflow:error"],
"webhookUrl": "https://hooks.slack.com/services/T.../B.../xxx",
"blocking": false
}
生命周期钩子在 Team 计划及以上可用。
它们如何协同工作
三个可扩展性功能自然组合:
- 自定义工具检查您的内部库存 API
- 自定义步骤在 V8 沙盒中运行专门的业务逻辑
- 生命周期钩子在工作流完成时通知您的 Slack 渠道
三者都遵循平台现有的安全模型——RBAC、审计日志、速率限制和部门范围统一适用。
在您的账户设置中探索可扩展性功能。