learn-claude-code: https://github.com/shareAI-lab/learn-claude-code
(SIGMOD 2025) AgentTune: An Agent-Based Large Language Model Framework for Database Knob Tuning
最近在学习Learn-claude-code过程中看到这篇文章 AgentTune,越发感觉Agent的定义在Claude这里更加革新,而且超越了我对以前编程范式的认知。
AgentTune
如果按照我之前的认知,AgentTune这个Agent使用时完全没问题的. 在这篇文章里面, 他提出了可以作为一个DBA的专家智能体 (agent). 工作流被固定为 Workload Analyzer / Knob Selector / Range Pruner/ Configuration Recommender.
- Workload Analyzer 用于收集整理 Workload的特征和画像(profile). 很多都是rule-based去执行并获取信息。
- Knob Selector 选择参数
- Range Pruner 修建取值空间
- Configuration Recommender 推荐选择Knob的配置。
这里每一步都是由LLM来产出结果。你能说它不智能吗?明显不是。但看了 Claude Code 的拆解后,我产生了一种“代差感”:AgentTune 更有序、更稳重,但它更像是一个被固定在流水线上的 Prompt Chain。真正的“灵活”不应该是预设好的 1-2-3-4,而应该是像 Claude Code 定义的那样:整个输入就是一个 Prompt,Agent 守着一个 Tool Dispatch Map(工具调度表)。它自己决定什么时候该去调工具,拿到结果后再自己分析下一步该干嘛。这种完全由 LLM 主导的自主循环,才是我心中更高级的智能形态。
Claude Code 定义的Agent
来让我们看一下 claude code 怎么定义agent
其实我一直想写一下 看了learn-claude-code 之后的感受,他让我真正感觉到了编程方法的革新。
Claude Code 展现了另一种完全不同的思维方式:Agent 的本质是一个无限循环(Infinite Loop)
在 Claude 的最基本最基本的架构中 (lesson 01):
- 核心内核:仅仅是一个
while循环加上一组结构化的 Tools(工具)。 - 驱动力:系统不定义任何顺序(Workflow),而是给 LLM 一个初始 Prompt 和一个 Tool Dispatch Map(工具调度表)。
- 自演进:LLM 决定下一步该调用哪个工具、分析反馈结果,然后再决定下一步。
在这里,自然语言变成了“汇编语言”,而 LLM 成了执行逻辑的“机器”。所有的工具输入输出都被序列化为文本,让整个流程完全由 LLM 自主主导。
例如这篇文章target的topic: database tuning.
我们不需要定义 Workflow,而应该去开发 Harness(基础设施),准备好 Skills 和 Tools
一点想法
那么回到这个问题,如何在这个agentTuning的基础上去真正开发这样一个agent,这就是一个新的research idea了。 实际上我觉得数据库调优(DB Tuning)简直是这种自主 Agent 的绝佳战场!DB 需要持续的交互反馈才能达到最佳状态。我想基于这个灵感做一个 Toy Project,去真正开发一个DB Tuning Agent. 下面是一些想法记录下来:
-
动态规划工作流 (TodoWrite):不再硬写死调优步骤。我们要把 Knob Selector 这种专业模块重构成 Tool。Agent 可以根据中间反馈动态调整计划。如果目标是 TiDB,它就去读取 TiDB 的 Skill;如果是 PG,就加载 PG 的知识库,这种按需加载(On-demand)的方式比堆砌 Prompt 聪明得多。
-
异步“思考”机制 (Background Tasks):数据库重现(Workload Replay)非常耗时。我们可以利用 Background Tasks,让 Agent 触发测试后转入后台执行,主逻辑继续同步分析日志或预研其它指标,思考不被阻塞。
-
分布式调优与协作 (Subagents & Task Graph)
-
针对 TiDB 这种复杂的分布式架构,单一 Agent 的上下文容易过载。我们可以仿照 Claude Code 的设计:
-
Task Graph:定义组件(TiKV, TiFlash)之间的调优依赖图。Subagents:主 Agent 负责全局目标,并派生子代理专门负责单一组件或指标,保持每个代理的上下文环境整洁。