数据系统
PostgreSQL 事务与 AI 任务状态
用事务、唯一约束和状态机保证会话、任务与工具副作用的一致性。
必须掌握PostgreSQL事务
Agent 会同时写会话、运行记录、工具结果和计费数据。任何一步失败都可能留下半完成状态,因此必须先掌握事务。
核心模型
PostgreSQL 事务把多个步骤组合成全有或全无的操作。未提交的中间状态对其他事务不可见;失败时可以 ROLLBACK。
推荐表结构
- conversations:稳定的会话身份。
- runs:一次 Agent 运行,状态为 queued、running、succeeded、failed、cancelled。
- messages:输入输出消息,带 sequence 唯一约束。
- tool_calls:工具参数、结果、耗时与错误。
- outbox:需要异步投递的事件。
工程要点
使用数据库唯一约束实现最终幂等,避免只在应用内判断。状态更新带旧状态条件,例如只允许 running 转为 succeeded。跨服务事件使用 transactional outbox,先和业务数据一起提交,再由后台任务投递。
练习
模拟同一幂等键并发提交两次,证明只产生一条 run。随后在消息写入后故意抛错,检查整个事务是否回滚。
官方资料
PostgreSQL Transactions 解释 BEGIN、COMMIT、ROLLBACK 与 SAVEPOINT。