跳转至

Agentic 工作流 · 自动化

How-to · 任务导向资深

机制深挖

AI 负载章 · Agents on Lakehouse(湖仓侧 Agent 机制)· MCP(Tool 协议标准)· Prompt 管理 · RAG

一句话理解

LLM + 工具 + 控制循环 自主完成多步任务——不是"问答一次",是"执行一段工作"。真正能用的 Agent 系统 = 强工具抽象 + 评估机制 + 成本控制 + 沙箱安全 四位一体。演示很酷,工业化落地非常难。

TL;DR

  • Agent ≠ LLM。Agent = LLM + tools + 控制循环 + 状态 / 记忆
  • 三种复杂度级别:assistant(单步工具调用)< workflow(多步编排)< agent(自主循环)
  • 企业场景典型:客服自动化 / 数据分析 / DevOps / 内部工单 / 代码助手
  • 关键工程点:tool 设计质量 > 模型选型评估最难成本可爆炸
  • Benchmark 活跃期:SWE-bench · τ-bench · WebArena · AgentBench · GAIA

概念梯度

不是所有"LLM + X"都叫 Agent。三个级别:

级别 定义 例子
L1 · Assistant LLM + 单次工具调用 "查下我订单" → 调一个 API → 回答
L2 · Workflow 人类定义的多步编排,LLM 填其中某些节点 "客户投诉 → LLM 识别类型 → 路由到对应部门"
L3 · Agent LLM 自主决定调用哪些工具、什么顺序、何时停止 "帮我搞定报税" → LLM 自己决定看文档 / 算数字 / 填表 / 提交

工业落地目前集中在 L2。L3 能跑 demo,但失败模式太多,难以可靠部署。

典型业务场景

场景 内容
客服自动化 用户问题 → 查 FAQ → 查订单 → 回答 + 工单记录
数据分析 (chat-to-insight) 用户自然语言 → Text-to-SQL → 查询 → 解释 → 图表
内部 DevOps 报警 → Agent 查日志 → 推测根因 → 调用工具修复 / 建议
代码助手 改需求 → 读代码 → 写/修改代码 → 跑测试 → 提 PR
工单处理 JIRA ticket → 分类 → 分流 → 跟进 → 关闭
研究 / 答疑 问题 → 检索多源资料 → 综合 → 引用 → 产出
浏览器自动化 填表 / 爬虫 / 对账 / 采购下单

核心架构

flowchart TB
  user[用户请求] --> controller[Agent Controller<br/>LLM]

  controller --> decide{决策}

  decide -->|调工具| tools[Tools]
  tools --> t1[Text-to-SQL]
  tools --> t2[向量检索]
  tools --> t3[外部 API]
  tools --> t4[代码执行 沙箱]
  tools --> t5[文件读写]

  t1 --> obs[Observation]
  t2 --> obs
  t3 --> obs
  t4 --> obs
  t5 --> obs

  obs --> controller

  decide -->|结束| answer[最终回答 + 引用]

  memory[(Memory<br/>conversation / state)] <--> controller
  audit[(Audit Log)] <--> controller

存储诉求

对话 / 任务状态表

CREATE TABLE agent_conversations (
  conv_id     STRING,
  user_id     STRING,
  turn_idx    INT,
  role        STRING,        -- user / assistant / tool
  content     STRING,
  tool_name   STRING,
  tool_args   STRING,        -- JSON
  tool_result STRING,
  tokens_in   INT,
  tokens_out  INT,
  latency_ms  INT,
  ts          TIMESTAMP
) USING iceberg
PARTITIONED BY (days(ts), bucket(16, conv_id));

为什么用湖表: - 审计合规(多轮推理过程要能复现) - 做离线评估 / 迭代 prompt 质量 - 分析失败模式

Tool Registry

Tool 定义本身是资产,应该纳入 Catalog

tools:
  - name: query_sales
    description: "查询销售数据"
    schema: { natural_question: str }
    returns: markdown table
    owner: data-platform
    scope: [finance, marketing]
    rate_limit: 10/min
    cost_tier: medium

知识库

Agent 的"长期记忆"常常是 RAG 库,见 RAG

计算诉求

控制循环

  • LLM 推理多次调用(每个决策一次)
  • 单次任务:5-20 次 LLM 调用不稀奇
  • 上下文每次都要重建(或用 KV cache)

Tool 执行

  • Text-to-SQL → 调 Trino / DuckDB
  • 向量检索 → LanceDB / Milvus
  • 代码执行 → 沙箱(Docker / gVisor / WebAssembly)
  • 外部 API → 规范化 wrapper

监控 / 审计

  • 每步都记 log
  • 成本 (tokens × 价格)
  • 延迟 / 失败率 / 重试
  • Tool 调用频率 / 分布

Tool 设计(做好 Agent 的关键)

80% 的 Agent 质量取决于 Tool 设计,20% 是模型。

好的 Tool 长什么样

@tool
def query_sales(natural_question: str) -> str:
    """
    用中文自然语言问销售数据。例如:
    - '上个月华北区 iPhone 销量'
    - '本周增长最快的类目'

    只能查询 sales 领域的表(orders, products, users)。
    不能做 DDL / DML。
    结果最多返回 100 行。
    """
    ...

要点

  • 狭窄范围:不给"万能 SQL 工具",给"只能查 sales 的工具"
  • 文档即契约:描述 = LLM 选择该工具的依据
  • 参数严格 schema:用 JSON Schema / Pydantic
  • 返回结构化:Markdown 表格或 JSON,让 LLM 能继续处理
  • 内置边界:rate limit / row limit / cost cap
  • 幂等:相同输入同输出(至少近似)

不好的 Tool

  • "execute_arbitrary_sql" —— 太广,LLM 乱用
  • 返回"自然语言描述"—— LLM 难接
  • 无错误处理 —— 失败消息也要设计
  • 不记日志 —— 出问题无法 debug

控制循环模式

ReAct (Reason + Act)

经典循环:

Thought: 我需要先查销售数据
Action: query_sales("上月销量")
Observation: <结果>
Thought: 数据有了,计算增长
Action: query_sales("前月销量")
Observation: <结果>
Thought: 可以算了
Final: 增长 23%

Plan-and-Execute

先让 LLM 列出完整计划,再逐步执行。适合任务复杂度高步骤可预测时。

Reflexion / Self-correction

失败后 LLM 反思 + 重试。

Function Calling(现代默认)

OpenAI / Claude / Gemini 的 structured tool use API。比纯文本解析稳。生产首选

评估(最难的一件事)

层级评估

  • 每步工具调用是否合理(Tool Call Accuracy)
  • 最终任务是否成功(Task Success Rate)— 常常需要人工
  • 平均步数(Step Efficiency)
  • 平均成本(Tokens per Task $)
  • 失败模式分布(卡死 / 重复 / 错误工具 / LLM 乱答)

Benchmark 参考

Benchmark 内容
SWE-bench 真实 GitHub issue → 修复代码
τ-bench (Tau-bench) 工具使用 + 多轮
WebArena 浏览器自动化
AgentBench 全面 Agent 能力测评
GAIA 研究助理能力
MMLU / HumanEval 模型本身(非 Agent 特化)

成本控制(被低估)

Agent 成本可能是普通 LLM 调用的 10–50 倍(多步 + 长上下文)。防爆招数:

  • 硬性 step cap(比如 20 步)
  • Budget guard(每个任务预算 token 上限)
  • 便宜模型先行(GPT-4o mini 做 routing,GPT-4o 做关键决策)
  • 缓存(相同 query + state → 复用)
  • 投机执行 / 并行 tool call

安全 / 权限

Agent 最大风险:自主执行错误动作

  • Tool 权限分级
  • 只读工具 → LLM 可自主调
  • 写工具 / 副作用工具 → 人工确认或低 throttle
  • 破坏性工具 → 禁止或明确授权
  • 沙箱执行:Agent 生成的代码 / SQL 必须在沙箱跑
  • Prompt injection 防御:工具返回数据不可信,不能直接影响 Agent 控制流
  • Audit 日志:每次 tool 调用都记
  • 权限穿透:Agent 代表用户执行,不能越权

和湖仓的接口

Agent 访问湖仓通常通过:

1. Text-to-SQL

自然语言 → SQL → 执行 → 返回。详见 Compute Pushdown

湖仓侧要配合: - Catalog 层提供表 schema + 业务描述给 LLM 做"schema retrieval" - 统一 SQL dialect(Trino SQL 是好选择) - 强权限下推(行列级 policy 自动生效)

2. 语义检索

  • 问题 → embed → LanceDB → 文档 chunks
  • 详见 RAG

3. 事件驱动

  • Agent 订阅湖表 changelog(Paimon 流读)
  • 触发式自动化(数据到达 → agent 分析 → 通知)

可部署参考

开发框架

代码 Agent

  • Cursor / Copilot — 商业
  • Aider — 开源代码 Agent
  • Claude Code — 官方代码 Agent

观测 / 评估

Demo 可跑

  • LangGraph 官方 example(客服 / 数据分析 agent)
  • AutoGen 官方 scenarios
  • SWE-bench 参考解(看顶级 agent 怎么做代码任务)

工业案例 · Agentic 场景切面

Note

Agentic 工作流是 2024-2026 新兴场景 · 公开工业案例集中在商业数据平台的 Agent 产品上。

Databricks · Genie Agents(BI + Agent 融合)

为什么值得学:Databricks Genie 是商业数据平台 Agent 化的代表。全栈视角见 cases/databricks

Agent 场景独特做法

  1. BI + Agent 深度融合
  2. 自然语言问 BI 问题 · 后端 Agent 规划 + 执行
  3. UC Schema + AI Functions + Vector Search 作 Agent Tool
  4. 数据不出平台 · 合规友好

  5. Agent Tool = UC Function

  6. AI Functions(ai_classify · ai_embed · ai_generate)可串
  7. Custom Function 注册 UC · Agent 自动发现
  8. 治理一致:Function 权限 · 审计 · 血缘都在 UC

  9. L2 → L3 渐进

  10. 早期 Genie 是 L2(受限流程 · 强约束 SQL)
  11. 2024-2026 逐步 L3(计划 · 反思 · 多步执行)
  12. 符合本章"L1/L2/L3 成熟度"推进路径

踩坑(来自 cases/databricks §9): - Genie 早期版本 SQL 生成准确率有限 · 需多轮优化 - UC 深度依赖 · 非 Databricks 客户无法用

Snowflake · Cortex Agents(SQL-first Agent 路线)

为什么值得学:Snowflake Cortex Agents 是 SQL 为中心的 Agent 产品全栈视角见 cases/snowflake

Agent 场景独特做法

  1. Cortex Analyst
  2. 自然语言 → SQL(结构化 BI 问题)
  3. Schema RAG + LLM + SQL 验证三段
  4. 类似 Databricks Genie · 但 SQL-first

  5. Cortex Search + Agent 融合

  6. Agent 可调 Cortex Search(向量 + Hybrid)作 Tool
  7. 文档问答 + 结构化 BI 融合

  8. "数据不出 Snowflake"的合规锚点在 Agent 场景尤重要

  9. 合规场景(金融 / 医疗)不能让 Agent 把客户数据发外部 LLM
  10. Cortex Agents 整栈在 Snowflake 内部 · 是合规客户首选

Snowflake vs Databricks Agent 路线对比: - Genie(Databricks):Notebook + SQL 融合 · 更灵活 - Cortex Analyst(Snowflake):SQL-first · 更聚焦结构化 BI

Anthropic Claude Code / OpenAI Operators · Agent 工具商业化

为什么值得学:不是数据平台案例 · 但是 Agent 产品本身的商业化代表

  • Claude Code(2024 公开):代码 Agent · 可读写文件 · 执行 shell · 是通用 Agent 商业化标杆
  • OpenAI Operators(2025):Browse / 点击 / 表单填充 · 浏览器 Agent
  • 对数据平台的启示:通用 Agent 框架可接入数据 Tool(Databricks MCP / Snowflake Cortex)

以下为事实观察 · 非产品推荐

通用 Agent 框架(Claude Code / Operators)和数据平台 Agent(Genie / Cortex)各有 niche: - 数据平台 Agent · 优势在数据治理 + 合规(UC / Cortex 内) - 通用 Agent · 优势在能力边界广(可跨系统 / 浏览器 / 代码 / 文件) - 2025+ 两者可能通过 MCP 协议互通(详见 ai-workloads/mcp

对中型团队的启示

  • L1 → L2 先落地 · 不追 L3(工业教训)· 本章 L1/L2/L3 成熟度路径和 Databricks Genie 演进一致
  • Tool 治理比 Tool 数量重要 · 和本章"Tool 设计"呼应
  • 合规场景选 Snowflake Cortex · 灵活需求选 Databricks Genie · 自建选开源(LangGraph / AutoGen)

陷阱

  • 上来就做 L3 Agent:失败率高,改 L2 workflow 落地快
  • Tool 太多:LLM 选不准(> 10 个就开始乱)
  • Tool 描述不精准:LLM 误用
  • 无沙箱运行代码 / SQL:一次坏决策毁库
  • 不限 step / budget:任务跑飞成本爆
  • 用户权限不透传:Agent 代用户 A 查 B 的数据 → 合规事故
  • 没评估集:以为效果好,上线全靠感觉
  • Tool 失败返回不优雅:LLM 看到 500 error 直接 panic

相关

延伸阅读

  • SWE-bench 论文 · Princeton
  • τ-bench (Tau-bench, Sierra AI) — tool use in realistic settings
  • Anthropic Building Effective Agents(2024 年指导博客)
  • OpenAI Practices for Agents
  • The Agent Stack 综述系列博客