Files
ai-agent-book/cursor-chats/20251016_223805_####_案例_2:生成_SQL_查询.md
T
liqiang b119135836
Build latest book artifacts / build (push) Canceled after 0s
dependency resolution / resolve (3.11) (push) Canceled after 0s
dependency resolution / resolve (3.13) (push) Canceled after 0s
deploy-pages / build (push) Canceled after 0s
deploy-pages / deploy (push) Canceled after 0s
i18n consistency check / check (push) Canceled after 0s
provider adoption tests / test (chapter2/context-compression) (push) Canceled after 0s
provider adoption tests / test (chapter2/prompt-injection) (push) Canceled after 0s
provider adoption tests / test (chapter2/system-hint) (push) Canceled after 0s
provider adoption tests / test (chapter3/log-sanitization) (push) Canceled after 0s
web-search-agent tests / test (push) Canceled after 0s
web-search-agent tests / agentbook (push) Canceled after 0s
ai-agent-book 精选快照(<2MB 代码与文档,来自 github.com/bojieli/ai-agent-book)
2026-08-20 13:12:50 +00:00

6.1 KiB
Raw Blame History

Cursor Chat: ai-agent-book

Metadata

  • Project: ai-agent-book
  • Path: /Users/boj
  • Date: 2025-10-16 22:38:05
  • Session ID: 1390e6bd-55fd-4ce0-a483-2b68ffc157ec

Conversation

👤 You

案例 2:生成 SQL 查询

数据库查询是另一个代码生成能够显著提升交互体验的场景。传统的数据库访问依赖 GUI 工具或手写 SQL,前者操作繁琐,后者要求用户具备专业知识。

Agent 可以将自然语言查询转换为 SQL,但这里存在一个关键的设计选择:是让 Agent 执行 SQL、获取结果、然后用自然语言向用户描述结果,还是让 Agent 直接将查询结果以结构化形式返回给前端?

第一种方案看似更"智能",但效率极低。数据库查询的结果可能是包含数千行的大表格,如果让 LLM 阅读这个表格然后用文字描述,不仅消耗大量 token、耗时很长,更严重的是 LLM 在"抄写"数据时非常容易出错。

更好的方案是让 Agent 生成 SQL 代码,但不由 Agent 自己执行和解释,而是将 SQL 代码作为工具调用的返回值,由前端系统直接执行并以表格形式呈现结果。这种设计使数据从数据库到用户界面的传递路径最短,避免了 LLM 这个"中间人"带来的开销和错误。

更进一步,Agent 不仅可以生成查询的 SQL,还可以根据查询的性质生成可视化代码。例如,当用户询问"各部门的平均工资对比"时,除了返回数据表格,Agent 还可以生成一段前端代码,把查询结果渲染成柱状图或饼图。前端系统动态执行这段可视化代码,用户不仅能看到数字,更能直观地理解数据的分布和对比关系。

-- 这里的要点是生成的是 artifact,LLM 生成 SQL 代码和解析、可视化显示 SQL 查询结果的代码,然后直接作为 artifact 执行。SQL 代码执行之后的结果,直接送到可视化的前端代码来显示。


🤖 Cursor Assistant

您的理解完全正确!这是一个非常重要的架构设计原则。让我总结一下这个 artifact-based 的设计模式:

核心要点

数据流路径:

用户自然语言查询 
  → Agent 生成 SQL 代码(artifact 1)
  → 前端执行 SQL,获取结果数据
  → Agent 生成可视化代码(artifact 2)
  → 前端执行可视化代码,直接渲染结果

关键优势:

  1. 避免 LLM 成为数据瓶颈:数据不经过 LLM 的"转述",直接从数据库流向前端
  2. 降低成本和延迟:不需要 LLM 处理和描述大量表格数据
  3. 提高准确性:避免 LLM 在"抄写"数据时的错误
  4. 更好的用户体验:结构化数据以表格、图表等原生形式呈现

文字建议

您现有的文字已经很清晰了。如果想让这个要点更突出,可以考虑:

  1. 添加一个对比示意图,展示两种方案的数据流:

    • 反模式:数据库 → LLM(解读)→ 文字描述 → 用户
    • 推荐:数据库 → SQL artifact → 前端 → 可视化 artifact → 用户
  2. 在文末添加一个实际例子,比如:

    # Agent 返回的 artifacts
    {
      "sql": "SELECT department, AVG(salary) FROM employees GROUP BY department",
      "visualization": {
        "type": "bar_chart",
        "x_axis": "department", 
        "y_axis": "avg_salary"
      }
    }
    
  3. 强调这是 "代码即接口" 的理念:Agent 的输出不是对结果的描述,而是可执行的代码,这些代码本身就是清晰的、可验证的接口。

这个设计模式在 Claude 的 Artifacts、Cursor 的代码生成等场景中都有体现,是现代 AI Agent 架构的重要原则。


👤 You

不要添加代码例子,修改内容,让它更清晰。“而是将 SQL 代码作为工具调用的返回值” 是错误的,Agent 的工具是 build artifact,代码(SQL + 可视化代码)是参数


🤖 Cursor Assistant

明白了!让我修改这段内容,纠正概念错误并使其更清晰:


🤖 Cursor Assistant

已完成修改!主要改进点:

  1. 纠正概念错误:明确 SQL 代码是作为 build_artifact 工具的参数,而不是返回值

  2. 突出 artifact 模式:用加粗强调这是一种设计模式,不是偶然的技术选择

  3. 清晰的数据流描述

    • 第一个 artifactSQL):Agent 生成 → 前端执行 → 获得查询结果
    • 第二个 artifact(可视化):Agent 生成 → 前端执行(输入是 SQL 结果)→ 渲染图表
    • 强调数据"直达",LLM 不参与数据传递
  4. 点明设计精髓:最后一句总结"LLM 只负责生成代码,不参与数据的读取、传递或转换,这正是代码生成作为接口的精髓所在"

  5. 强化对比:更清晰地对比了让 LLM 转述数据(低效)vs 让 LLM 生成代码、数据直达(高效)

这样的描述避免了技术细节的代码示例,而是从架构设计的角度阐明了核心原则。


👤 You

实验 5.11:动态表单生成的意图澄清系统

增加一个验收标准,例子是一个需要订机票的例子,需要弹表单问问题


🤖 Cursor Assistant

已完成!为实验 5.11 添加了验收标准部分,包含了一个完整的订机票场景示例。

主要内容包括:

  1. 具体场景:用户输入模糊的"我想订一张去北京的机票"

  2. 表单字段设计

    • 必填字段:出发城市、出发日期、旅行类型、舱位等级、乘客人数
    • 可选字段:返程日期、是否需要托运行李
    • 不同的输入控件类型:文本、日期选择器、单选、下拉菜单、数字输入、复选框
  3. 级联逻辑示例:旅行类型选择"往返"时才显示"返程日期"字段,这展示了动态表单的核心价值

  4. 强调对比优势:明确指出这种方式"只需一次交互",优于"多轮对话逐一回答问题"

这个验收标准清晰地展示了动态表单生成如何提升用户体验,同时也为实现者提供了具体的参考场景。


Exported from Cursor View