返回博客

知识库不止能问答,还能按流程自动跑

新文档进库自动归类、定时汇总、Webhook 触发通知——有谷工作流用 FlowExecutor 编排 action 与 tool,支持延迟、审批和断点续跑。

销售把合同 PDF 丢进「待整理」文件夹,希望系统自动:识别类型 → 分到「合同」目录 → 通知法务群 → 三天后提醒归档。

这件事用 Agent 问答也能「聊出来」,但步骤固定、要可审计、要失败重试、要人工在某一环点批准——更适合工作流,而不是每次靠 prompt 碰运气。

有谷大脑内置工作流引擎:可视化(或 JSON)编排 Flow map,由 FlowExecutor 驱动;触发器(Webhook、Cron、内部事件)启动一次 run,节点分 Action(对外部系统做事)和 Tool(流程控制),运行历史持久化,支持挂起后续跑。

工作流:触发器 → FlowExecutor → Action/Tool → 挂起恢复。

工作流和 Agent 怎么分工

Agent工作流
决策非确定性,模型规划确定性,人画好图
适合开放问答、起草、多工具探索固定 SOP、合规、集成
失败重试整轮对话节点级日志、从断点续跑
人工对话中确认审批节点显式挂起

两者共用知识库:工作流里的「查询知识库」「文档自动归类」调同一套 RAG 和文档 API;Agent 里的 query_knowledge_base 和 workflow action 不重复造轮子。

FlowExecutor 核心语义

一次 flow run 大致是:

  1. 加载 FlowBlueprint 的 map_json(节点树 + 连线)
  2. 创建或恢复 flow_history(运行实例)
  3. 从触发节点或挂起恢复点 _run_nodes
  4. 每个节点:Action(HTTP、邮件、有谷内置)或 Tool(条件、延迟、循环、JSON 解析…)
  5. 写节点级 log;失败按策略 abort / continue
  6. 遇到 delay / 审批 → 持久化 pending,Celery 延迟任务或人工操作后 execute(..., history_uuid, next_node_id) 续跑

与「单次 HTTP 请求里跑完」不同,跨时间的暂停是 first-class:delay 节点 schedule 未来唤醒;approval 节点等人点通过再继续——语义对齐常见 iPaaS,但跑在有谷自己的 Celery + Postgres 栈上。

内置 Action 示例:文档自动归类

yoguBrain action 的 assignDocumentFolder:对新入库文档,用文件夹匹配服务(embedding + 规则)建议目标目录,置信度超过阈值则移动,否则留待人工或走审批分支。

这依赖前面 入库 已完成、文档有 Markdown 摘要和 metadata——工作流是入库链的下游消费者,不是替代解析。

其它常见 Action:

  • HTTP — 调外部 CRM、工单系统
  • Mail — 发通知邮件
  • Webhook 响应 — 对外部触发器返回结构化结果

Tool 节点:流程里的控制流

  • condition — 按表达式走不同分支(类似 n8n 的 IF)
  • delay — 挂起 N 分钟/小时/天
  • approval — 人工闸门
  • iterator / repeater — 对列表逐条处理(批量文档、批量通知)
  • json_parser / markdown — 把上一步输出结构化,供下游用

容器节点(iterator 子树)递归执行:对每个元素重放子 map,RunContext 里隔离变量,避免并行污染。

触发器从哪来

  • Webhook — 外部系统 POST,payload 进 trigger_data
  • Cron — 定时(日报、过期提醒)
  • 内部 bus — 如「文档入库完成」事件,和 SSE 进度 同源不同消费者:进度给 UI,事件给 workflow

文档入库完成 → 触发「自动打标签 + 通知 owner」;比轮询 API 更省、也更实时。

可观测与失败

每个节点一条 log:开始时间、结束时间、输入输出摘要、status(success / error / pending)。运维可以定位「卡在 approval 还是 HTTP 超时」,业务可以审计「谁在何时把合同移到了哪个文件夹」。

失败策略 OnNodeFail:整条 run abort,或记录错误走错误分支(发告警、建工单)。不会像 Agent 那样 silently 换说法——流程要么走到成功终点,要么显式失败。

和开放能力的边界

  • Open API / MCP — 给外部系统「查库、写入」的能力
  • 工作流 — 在有谷内部或 Webhook 边界上「编排多步」
  • Agent — 给人用的对话面

企业版常见组合:Webhook 收 OA 审批结果 → 工作流更新文档状态 → Agent 答「这份合同现在什么状态」——三者各管一层,数据都在同一知识库。

什么时候该上工作流而不是 Agent

  • 步骤和 IF 分支在上线前就能画完
  • 需要法定保留执行日志
  • 某步必须人工签字(approval)
  • 要等现实世界的时间(delay 三天再提醒)
  • 同一逻辑要对 100 个文档重复(iterator)

什么时候仍用 Agent:问题开放、需要综合多源、引用和解释比固定步骤更重要。

有谷大脑的定位是「知识工作与学习」——问答让人即时弄懂,工作流让组织规则 7×24 执行。FlowExecutor 把后者做成和 RAG、Agent 同级的 first-class 能力,而不是 Zapier 外挂:文档、权限、审计、触发器都在一个 tenant 里闭环。