Datasette Agent:从聊天到受控数据应用

Datasette Agent 把聊天放在数据页面旁,Apps 把生成的界面留在 Datasette 内。拆解页面同屏、存储查询授权与写入审批,并给出可复核的团队试用步骤。

saint

2026-11-05

Datasette Agent:从聊天到受控数据应用

聊天窗口能回答问题,不等于看懂当前数据页;Agent 能生成界面,也不等于能替用户改数据。Datasette Agent 0.5a0 与 Apps 0.3a0 把聊天、数据页面和生成的应用放在同一处,并用查询权限限制应用的数据入口。

已有 Datasette 数据、想试做内部查询界面的团队可以先用它做原型。这组插件仍处于 alpha 阶段,试用重点是核对页面、查询权限和写入批准。

聊天离开数据页,问题容易变成猜测

聊天入口若要人复制表名、字段或 SQL,再回到页面核对,Agent 可能引用同名表,用户也难辨它回答的是哪次查询。Datasette Agent 0.5a0 的 panel 把对话和 Datasette 页面放在一起:Agent 可用 show_in_panel 打开表、查询结果或行页面;对话中指向同一 Datasette 实例的链接也会在侧边页面打开。用户继续在 panel 内点选页面,下一条消息会把页面变化告知 Agent,于是“这张表”有了页面指向。

这里的“同屏”有边界。show_in_panel 只接受当前 Datasette 实例的路径,并检查页面对当前用户是否可呈现;窄屏会在 Chat 与 Panel 间切换,拒绝被嵌入的页面会显示错误并提供新标签页链接。它方便核对页面,但不会验证 SQL 的业务口径。Datasette Agent 0.5a0 发布说明与项目文档分别说明了交互和限制。

应用生成之后,还要划清数据入口

Datasette Apps 可在 Datasette 内托管 HTML 与 JavaScript 应用。与 Agent 合用时,可以在对话里提出页面需求,让 Agent 创建应用,再把应用放进 panel 查看和修改。Simon Willison 的演示展示了这个组合的用法,但生成应用仍需验收。

Apps 0.3a0 增加了三层衔接。输入 # 可以引用当前用户有权查看的应用;app_add_stored_queries() 和 app_remove_stored_queries() 可以调整应用获准调用的存储查询;app_create() 在创建时会检查请求的查询是否存在、用户是否有权查看。工具结果还返回应用的相对路径,Agent 可以使用真实路径给出链接。这样“改这个应用”有了具体对象,数据入口也成了可检查的清单。Apps 0.3a0 发布说明列出了这些行为。

但 # 引用只帮助定位和提供上下文。项目文档明确说,引用应用时不会把 HTML 源码直接塞进模型上下文;Agent 要读源码还需通过要求 edit-app 权限的 app_view。引用成功不代表已获准改应用或调用查询。Datasette Apps 文档给出了这条界线。

写查询的批准发生在哪一步

存储查询是应用访问数据的受控入口。Apps 文档说明,托管的 HTML 应用通过 datasette.query() 或 datasette.storedQuery() 请求数据;应用有数据库和存储查询允许清单,请求随后仍以当前用户身份经过 Datasette 自身的查询权限检查。应用被允许调用某条查询,并不等于所有打开应用的人都能执行它。

0.3a0 对写查询加了显式批准:Agent 给应用新增写入型存储查询时,先请用户批准;创建应用时若请求的查询属于写查询,也会先询问。另一条路径是 Datasette Agent 自带的 execute_write_sql,它会展示 SQL、参数和所需权限,获得聊天中的明确批准后才通过 Datasette 写入接口执行。前者批准应用取得写查询入口,后者批准 Agent 当下执行写 SQL;两者仍受数据库写权限约束。Agent 写入文档和Apps 发布说明可对照阅读。

还要注意批准的后果。Agent 文档指出,多条写 SQL 按顺序执行,某条失败后会跳过后续语句,先前成功的语句不会自动回滚。审批前核对 SQL、参数和目标库,执行后核对实际数据。

团队怎样做一次可复核的试用

先选一份可替换的测试数据,给试用账号配置 datasette-agent,只开放需要查看的数据库、表和查询。按两个插件的安装说明装入同一个 Datasette 环境,并为 Agent 配置可用模型。版本应对照各自发布说明核对:Agent 0.5a0 和 Apps 0.3a0 都要求 Datasette 至少为 1.0a41。

接着在表或查询页面提出一个窄需求,例如“基于当前订单查询做一个按状态筛选的页面”。让 Agent 在 panel 展示它选用的表、SQL 结果与生成的应用,核对字段、筛选条件和空值处理。再用 # 引用刚生成的应用,要求增加一个只读的存储查询,查看应用获准调用的清单,并用无权访问该查询的账号验证拒绝行为。

最后才测试写入:用隔离数据和最小权限账号,请 Agent 为应用请求一条写查询,检查批准提示里的目标、SQL 与参数,拒绝一次,确认应用未获得该入口;重新发起并批准后,检查实际数据及应用访问记录。无需写入时,不开放相关权限。Apps 的沙箱还限制外部网络访问;若确需外联,应单独核查允许的来源,避免查询结果从应用流出。Apps 数据访问与沙箱文档说明了这些控制点。

真正的坑是把界面顺畅当作权限正确

同屏容易让人信任“这就是当前数据”,但页面指向正确,不保证字段口径、联接方式和聚合结果正确。表多且业务定义复杂时,还要先解决Agent 对字段与指标口径的理解。生成前保留已认可的查询和样本;生成后用同一输入核对结果。涉及金额、权限或状态变更时,审查 SQL 比审查聊天措辞更重要。

另一个坑是把应用的沙箱当成完整隔离。Apps 文档区分插件托管的沙箱 HTML 应用与其他插件提供的外部应用;两者运行限制不同。试用时要记录应用类型、可访问的数据库和查询、外联来源,以及查看者和编辑者的身份。

结论:把 Agent 的产物当成待验收的应用

Datasette 的这次组合解决了一个具体问题:Agent 生成数据应用时,使用者能同时看着数据页面和应用,并在查询授权、写入执行处停下来判断。它缩短了从问题到原型的距离,也把权限边界放在可见位置。

团队试用时,先从只读、可复算的查询开始;确认页面结果和权限清单,再考虑写入。真正可控的标准不是应用能被聊天生成,而是每个数据入口都能说清来源、权限和复核方法。

Explore more

AI Agent 交接:Agent 对 Agent 与对人

AI Agent 交接:Agent 对 Agent 与对人

多 Agent 工作流多半死在交接:产物交出去了,上下文和「轮到谁」没交。把 Agent 对 Agent 设成自动流动,Agent 对人设成停在审阅门,用状态而不是终端消息承接。

2026-11-05

Mozilla Otari:Agent 权限、预算与审计

Mozilla Otari:Agent 权限、预算与审计

Otari 把模型与工具授权、预算预留和仓库 hook 检查放到执行链路。本文拆解拦截时点、审计证据与已知边界,给部署团队一套验证步骤。

2026-11-05

打开 Postman 之后,它往你的 Codex 里装了什么

打开 Postman 之后,它往你的 Codex 里装了什么

Postman 桌面版被指在既有用户升级时自动安装 Codex/Claude 插件、写 hooks.state 并尝试批准自己的 SessionStart hook。本文拆解改了哪些文件、hook 信任边界、10 分钟审计回滚和团队准入规则。

2026-11-04