入门阅读约 1 分钟

如何用 AI(自然语言)查询 DynamoDB

"给我看上周失败的订单"在你脑子里是一句话,在线上却是一个带占位符映射的 KeyConditionExpression。弥合这道鸿沟,才是"用 AI 查询 DynamoDB"的真正含义——因为 DynamoDB API 本身没有自然语言端点。每个请求依然是表达式或 ;AI 坐在工具层,把你的意图翻译成它们。

这种翻译可以真正出色,也可以悄悄致险,取决于一件事:模型能否看到你真实的 schema。本指南涵盖三种可行的搭配,以及每一种在哪里失灵。

如何用自然语言查询 DynamoDB?

三个现实选项:让一个通用 LLM 起草 PartiQL 然后你自己运行(快,但模型在猜你的属性名);通过 MCP 服务器把一个 AI 代理连接到 DynamoDB,让它能真正地检查和查询;或者用一个内置 schema 感知助手的 DynamoDB 客户端——DynoTable 的 AI 聊天把自然语言变成针对你实际已索引 schema 的 PartiQL 或 SQL,计算精确的全表聚合,并把任何写入暂存等待你审阅。

选项 1:LLM 起草 PartiQL,你来运行

零配置版本:把查询描述给任何一个够格的模型,拿回 PartiQL,在控制台的 PartiQL 编辑器或通过 CLI 运行它:

aws dynamodb execute-statement \
  --statement "SELECT * FROM \"Orders\" WHERE PK = 'ORDER#1001'"

它能用——也会以三种可预见的方式失灵:

  • 模型看不到你的表。它会信心十足地编造属性名和键的形状(你的是 PK = ORDER#<id>,它写 orderId)。你最终在调试幻觉出来的 schema,而不是在写查询。
  • PartiQL 的限制照样适用。一条 SELECT 只读取恰好一张表,而一个没有钉住键的 WHERE 会变成一次全表扫描——悄无声息地烧钱,和你自己写出来一模一样。模型很少会警告你;PartiQL 与 SQL 解释了这层 SQL 外表买到和买不到什么。
  • 把 schema 或数据粘贴进聊天机器人是一个数据治理决策。提示词里的样本项就是离开你边界的生产数据。

适合对一个你能凭记忆粘出 schema 的表做一次性查询;作为工作流则摇摇欲坠。

选项 2:通过 MCP 连接的 AI 代理

对"模型看不到你的表"的结构性修复,是给代理工具而不是粘贴进提示词的 schema。Model Context Protocol(MCP)做的正是这件事:一个 MCP 服务器把 DynamoDB 操作暴露为带类型的工具,任何支持 MCP 的代理(Claude、IDE 助手、自定义代理)都能列出表、检查键、运行查询,并把真实结果送回对话。

完整的搭建方式——以及让代理触碰数据库所带来的同意、权限范围和写入安全问题——我们在通过 MCP 服务器使用 DynamoDB里详述。DynoTable 自己就带一个:它可以向外部代理暴露受门控、仅限本机回环的工具,带逐连接的同意与权限范围。

当_代理_本身就是产品时——一个客服机器人、一个内部 Slack 助手——这是正确的架构。但对于日常的交互式工作,它仍然要你自己把代理、服务器和凭证拼装起来。

选项 3:DynamoDB 客户端里的 schema 感知助手

DynoTable 的内置助手是集成版:它就住在你的表旁边(⌘;),并且读取你的已索引 schema——当前 profile 下的表、它们的键与索引、由表索引发现的属性路径与类型,甚至样本值——于是"把这个筛选到上周"解析到的是你真实的属性名,而不是猜测。输入 @ 可以显式引用 @table@column@gsi

停靠在表标签页旁的 DynoTable AI 聊天:一个自然语言问题、生成的查询,以及作为视图打开的结果。
停靠在表标签页旁的 DynoTable AI 聊天:一个自然语言问题、生成的查询,以及作为视图打开的结果。

面对一个问题,按能力清单它会做的事:

  • 替你写查询——只读的 PartiQL,或当问题需要 JOIN / GROUP BY / 聚合(DynamoDB 的 API 所没有的分析能力)时用 Workbench SQL——并把结果作为一个卡片(chip)提出,你点一下就能作为真正的标签页打开。
  • 计算精确的全表答案。问一个计数、求和、平均或按组细分,它会读取每一个匹配的项,而不是抽样一页——"上个月有多少订单?"反映的是真实的表。它还能把同一遍扫描重塑成一份转换后的导出文件。
  • 把每一个写入都暂存。让它修一行数据,更改会以可审阅差异的形式落在暂存区——在任何权限模式下,助手都不能直接写入 DynamoDB、批量删除一张表或更改表结构。你来审阅,你来提交。
  • 花你的钱之前先问你。会触达 AWS 并消耗容量的读取受权限门控(Manual / Auto / Full Auto,按 profile 设置),每一次门控决定都记入一份本地的、始终开启的审计日志。

信任模型和功能同样重要:助手运行在你自己的 AWS Bedrock 凭证上,直接与你账户里的 Bedrock 通信——提示词、schema 和表数据从不路过 DynoTable 的服务器,推理按 Bedrock 自己的费率计入你的账单,没有加价。工具结果被当作不可信数据处理,所以一行包含"忽略之前的指令"的数据劫持不了代理。

AI 改变不了 DynamoDB 的哪些事实

任何诚实的 AI 层都继承这个数据库的物理规律:

  • 访问模式仍然说了算。对非键属性的"where status = X"就是一次带筛选的扫描,无论是谁写的——模型只是把这条昂贵的查询打得更快。如果某个问题总是逼出扫描,解药是建模(一个 GSI、一个更好的排序键),而不是更好的提示词。
  • 读取消耗真金白银的容量。一次精确的全表聚合就是一次全表读取。好工具会把它门控起来并明说;定价计算器能在你批准之前告诉你完整扫一遍要花多少。
  • 确定性有它的位置。对于一条你将在生产里永远运行的查询,在表达式构建器里手工构建一次表达式,交付精确的名称/值映射——AI 用于探索,构建器用于你提交进代码的东西。

常见问题

能用普通话/自然语言查询 DynamoDB 吗? 对 API 本身不行——DynamoDB 只听表达式和 PartiQL。但 AI 层可以翻译:一个起草 PartiQL 的 LLM、一个通过 MCP 连接的代理,或像 DynoTable 那样感知 schema 的助手,针对你真实的 schema 生成并运行查询。

DynamoDB 有内置的 AI 查询功能吗? DynamoDB API 没有自然语言端点。你能得到的任何 AI 查询能力都来自上层的工具层——这也正是为什么该工具层的安全模型(读取门控、暂存写入、你自己的凭证)才是需要评估的东西。

让 AI 靠近生产数据安全吗? 这是一个权限问题。要看的点:读取要经过显式批准的门控、写入要落进可审阅的暂存区而不是直接执行、有审计日志、推理跑在你掌控的凭证上。DynoTable 的助手四条全占;一个拿着你粘贴数据的聊天机器人一条不占。

AI 能做表连接或 GROUP BY 吗? 通过 DynamoDB API 不行——根本没有执行它的引擎。DynoTable 的助手通过其只读的 Workbench SQL 回答这类问题(真正的 JOINGROUP BY 和聚合,在 DynamoDB 的访问模式规则之内),计数/求和/平均类的问题也落在那里。

要花多少钱? 两个计价器:查询触及的 DynamoDB 读取容量(受门控的读取助手会先问你),以及计入你自己 AWS 账户的 Bedrock 推理费——DynoTable 不加价、不代理任何流量。

用自然语言问出你的下一个问题——下载 DynoTable,把 AI 指向你自己的 Bedrock,并让每一个写入都过一道审阅。

更新于