数据库类型和版本
通用
当前痛点
AI Assistant 目前提供 Ask / Agent 两种模式,但两种模式展示的是同一组 SQL 动作,例如“生成 SQL”“解释 SQL”“优化 SQL”“修复 SQL”“转换 SQL”“生成样例数据”。
这会让 Agent 模式的产品语义不够清晰:
- Ask 模式更符合“只生成或处理 SQL 文本”的预期。
- Agent 模式的核心预期是使用工具读取 schema、执行只读查询,并基于真实结果回答。
- 用户在 Agent 模式下看到“生成 SQL”时,容易以为 Agent 也只是返回 SQL 文本。
- 用户表达“查一下 / 统计一下 / 看结果”时,Agent 可能自动调用
execute_query,但 UI 没有把“生成查询 / 风险检查 / 执行查询 / 总结结果”的过程讲清楚,容易造成“突然执行了 SQL 然后结束”的感觉。
后端已经有一定保护:SQL-producing action 会提示 Agent 只有在原始请求明确要求真实数据 / 结果时才执行查询。但 UI 仍把 Ask 风格动作原样暴露在 Agent 模式中,导致“Agent 到底是在生成 SQL,还是在执行任务”的心智混淆。
期望方案
根据当前模式展示不同的动作集合、默认动作和提示文案,让 Ask / Agent 的职责边界更明确。
期望行为:
- Ask 模式保留当前 SQL 生成类动作:
- 生成 SQL
- 解释 SQL
- 优化 SQL
- 修复 SQL
- 转换 SQL
- 生成样例数据
- Agent 模式改为任务型动作,强调“使用工具完成任务并给出结论”,例如:
- 查询数据
- 分析结果
- 检查 SQL
- 执行并解释
- 查看表结构
- Agent 模式下不应默认展示“生成 SQL”作为首要动作;如果仍保留,应改成“生成但不执行”等更明确的文案。
- 用户切换到 Agent 模式后,默认 action 应更贴近数据查询 / 分析,而不是
generate。
- 当 Agent 需要执行 SQL 时,步骤区应明确展示“生成查询 / 风险检查 / 执行查询 / 总结结果”等过程,降低自动执行带来的不确定感。
- 当用户只想要 SQL 文本时,应引导使用 Ask 模式,或在 Agent 模式下明确标注该动作不会自动执行。
建议验收:
- Ask 模式下仍能按现有方式生成 / 解释 / 优化 / 修复 / 转换 SQL,并生成样例数据。
- Agent 模式默认动作不是“生成 SQL”,而是更符合执行任务语义的查询或分析类动作。
- Agent 模式下用户请求“统计今天订单数”时,会清晰展示查询执行步骤,并基于真实结果回答。
- Agent 模式下用户请求“帮我生成 SQL”时,不会意外执行查询,或 UI 明确提示应使用 Ask / “生成但不执行”。
- 模式切换后,输入框 placeholder、动作菜单、步骤展示和最终回答语义保持一致。
优先级(是否紧急)
🟠 P1 重要 · 尽快处理
补充信息
相关现状:
- 前端
apps/desktop/src/components/editor/AiAssistant.vue 中 assistantMode 支持 ask / agent,但 actionButtons 是同一组动作。
- 前端
apps/desktop/src/lib/ai.ts 会把 mode 和 action 写入 AiTaskContract,并一起传给 aiAgentStream。
- 后端
crates/dbx-core/src/agent_loop.rs 中 Ask / Agent 都走 run_agent_loop,区别在于工具集:
- Ask 使用
agent_tools::read_only_tools(),主要是 list_tables / get_columns。
- Agent 使用
agent_tools::all_tools(),包含 execute_query / get_sample_data / explain_query 等。
- 后端 task contract 已经区分 SQL-producing action:
generate / optimize / fix / convert / sampleData 要求最终输出 fenced SQL,并提示 Agent 只有在用户明确要求真实数据 / 结果时才执行查询。
apps/desktop/src/lib/aiAgentPlan.ts 里已有旧的前端 fallback 计划概念,包括 generate_sql / risk_check / execute_sql,可作为 Agent 步骤展示语义的参考。
apps/desktop/src/lib/aiSkills.ts 目前的 skill 定义全部围绕 SQL 生成类动作组织,Agent 专属任务型动作可能需要新增单独的 action / skill 定义,而不是复用 Ask 的 generate。
可能的实现方向:
- 将 action 定义拆成 Ask action 和 Agent action,前端根据
assistantMode 展示不同菜单。
- 保留底层
AiTaskContract.action 的兼容性,但新增 Agent 专属 action,例如 query、analyze、inspect。
- 调整
buildModePromptLines() / buildActionPromptLines(),避免 Agent 模式下同时出现“必须执行数据查询”和“只生成 SQL”的冲突提示。
- Agent 模式默认 action 从
generate 改为查询 / 分析类动作。
- 对“生成 SQL”这类 Ask-only action,如果用户在 Agent 模式下选择,可自动切回 Ask,或展示明确的“不执行”提示。
数据库类型和版本
通用
当前痛点
AI Assistant 目前提供 Ask / Agent 两种模式,但两种模式展示的是同一组 SQL 动作,例如“生成 SQL”“解释 SQL”“优化 SQL”“修复 SQL”“转换 SQL”“生成样例数据”。
这会让 Agent 模式的产品语义不够清晰:
execute_query,但 UI 没有把“生成查询 / 风险检查 / 执行查询 / 总结结果”的过程讲清楚,容易造成“突然执行了 SQL 然后结束”的感觉。后端已经有一定保护:SQL-producing action 会提示 Agent 只有在原始请求明确要求真实数据 / 结果时才执行查询。但 UI 仍把 Ask 风格动作原样暴露在 Agent 模式中,导致“Agent 到底是在生成 SQL,还是在执行任务”的心智混淆。
期望方案
根据当前模式展示不同的动作集合、默认动作和提示文案,让 Ask / Agent 的职责边界更明确。
期望行为:
generate。建议验收:
优先级(是否紧急)
🟠 P1 重要 · 尽快处理
补充信息
相关现状:
apps/desktop/src/components/editor/AiAssistant.vue中assistantMode支持ask/agent,但actionButtons是同一组动作。apps/desktop/src/lib/ai.ts会把mode和action写入AiTaskContract,并一起传给aiAgentStream。crates/dbx-core/src/agent_loop.rs中 Ask / Agent 都走run_agent_loop,区别在于工具集:agent_tools::read_only_tools(),主要是list_tables/get_columns。agent_tools::all_tools(),包含execute_query/get_sample_data/explain_query等。generate/optimize/fix/convert/sampleData要求最终输出 fenced SQL,并提示 Agent 只有在用户明确要求真实数据 / 结果时才执行查询。apps/desktop/src/lib/aiAgentPlan.ts里已有旧的前端 fallback 计划概念,包括generate_sql/risk_check/execute_sql,可作为 Agent 步骤展示语义的参考。apps/desktop/src/lib/aiSkills.ts目前的 skill 定义全部围绕 SQL 生成类动作组织,Agent 专属任务型动作可能需要新增单独的 action / skill 定义,而不是复用 Ask 的generate。可能的实现方向:
assistantMode展示不同菜单。AiTaskContract.action的兼容性,但新增 Agent 专属 action,例如query、analyze、inspect。buildModePromptLines()/buildActionPromptLines(),避免 Agent 模式下同时出现“必须执行数据查询”和“只生成 SQL”的冲突提示。generate改为查询 / 分析类动作。