智能体提出“把 A、B 两条任务改成完成”之后,表格可能已经被其他人更新。如果提交时只按编号覆盖,就会把新的人工状态冲掉。可以让智能体只生成修改提案,提交端逐条核对“预期旧值”是否仍与当前表一致。
把修改提案变成可比较的记录
每条提案至少包含稳定编号、生成提案时看到的旧值、建议新值。预览要同时展示当前实际值。三者一致性明确后才决定是否更新:实际值等于预期旧值时可进入审批;若不同,就标记冲突并交人工检查。这里只演示状态列,实际系统还应做字段权限和新值枚举校验。

运行冲突检查
安装 pandas,将代码存为 update_table.py 执行。教学场景中 A 仍是 new,B 已被其他人改成 review,而提案仍认为 B 是 new。
import pandas as pd
# 模型提出修改候选;提案中的旧值需与当前表一致才能写入。
current=pd.DataFrame({'id':['A','B'],'status':['new','new']}).set_index('id')
proposals=pd.DataFrame({'id':['A','B'],'expected_old':['new','new'],'proposed':['done','done']})
current.loc['B','status']='review' # 模拟提案产生后另一人已修改 B。
accepted=[];conflicts=[];preview=[]
for row in proposals.itertuples(index=False):
actual=current.loc[row.id,'status']
record={'id':row.id,'actual':actual,'expected_old':row.expected_old,'proposed':row.proposed}
preview.append(record)
(accepted if actual==row.expected_old else conflicts).append(record)
print('preview=',preview)
print('conflicts=',conflicts)
updated=current.copy()
for row in accepted:updated.loc[row['id'],'status']=row['proposed']
print('after=\n'+updated.reset_index().to_string(index=False))
print('original_B=',current.loc['B','status'])
读懂预览和最终结果
输出会把 B 列为冲突行;只有 A 更新成 done,B 保持 review。original_B=review 也证明当前原表没有被预览过程修改。生产环境中应在数据库事务内重新核对旧值并写入,避免预览后到提交前又出现新竞争。
preview= [{'id': 'A', 'actual': 'new', 'expected_old': 'new', 'proposed': 'done'}, {'id': 'B', 'actual': 'review', 'expected_old': 'new', 'proposed': 'done'}]
conflicts= [{'id': 'B', 'actual': 'review', 'expected_old': 'new', 'proposed': 'done'}]
after=
id status
A done
B review
original_B= review
pandas 的DataFrame.compare 文档展示如何核对同形表格的差异;基础指南可用于核对索引与复制行为。本例逐行比较旧值,是为了让冲突条件更容易看清。
失败边界与真实系统
编号重复、目标行不存在、状态不允许跳转时也应拒绝提交;示例省略了权限和数据库事务,不能直接作为多人协作生产服务。凡涉及金额、权限或客户资料的字段,应再加人工审批和完整审计记录。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31697.html