智能体合并两张表怎么避免行数膨胀?检查连接键与未匹配记录

智能体合并两张表时,先声明左右表的预期粒度,再用 pandas merge 的 validate 参数阻止多对多行数膨胀,并单独查看未匹配记录。

“把订单表和客户表合并”听起来是一步操作,却可能因为客户表一人多行,让同一订单重复出现。智能体执行合并前,应先说明两张表各自一行代表什么,并把预计的连接关系写进程序。

先声明连接键的粒度

本例订单表是一单一行,可以有同一客户的多笔订单;客户表应是一客户一行。因此连接关系是 many_to_one。如果客户表中 c2 有两行,即使内容暂时相同,直接左连接也会让订单 o2 变两行,汇总金额可能被重复计算。

智能体合并两张表怎么避免行数膨胀?检查连接键与未匹配记录

例子里的客户重复记录完全一样,假定人工核查后可以删掉一行;真实系统若两行会员等级不同,必须回到来源确定版本或生效时间,不能随便保留第一条。

让程序挡住错误合并

安装 pandas,复制代码存为 join_tables.py 并运行。教学里的 tool_request 是智能体应提交给受限合并工具的输入,指定左右表、键和预期关系;示例没有调用真实 LLM。工具先用 duplicated 列出右表重复键;merge(validate='many_to_one') 在粒度不符时抛出异常。完成核实后再合并,indicator=True 标出没找到客户资料的订单,并返回 tool_result 供智能体解释。

import pandas as pd

# 左表是一条订单一行;右表应是一位客户一行。数据为人工构造。
orders=pd.DataFrame({'order_id':['o1','o2','o3'],'customer_id':['c1','c2','c3']})
customers=pd.DataFrame({'customer_id':['c1','c2','c2'],'tier':['A','B','B']})
tool_request={'operation':'join','left_table':'orders','right_table':'customers','on':'customer_id','expected_cardinality':'many_to_one'}
print('tool_request=',tool_request)
join_key=tool_request['on'];cardinality=tool_request['expected_cardinality']
print('right_duplicate_keys=',customers.loc[customers.duplicated(join_key,keep=False),join_key].tolist())
try:
    orders.merge(customers,on=join_key,how='left',validate=cardinality)
except pd.errors.MergeError as error:print('blocked=',type(error).__name__)
# 此处仅演示完全相同的重复行在人工核实后去除;信息冲突时不能自动去重。
verified_customers=customers.drop_duplicates()
merged=orders.merge(verified_customers,on=join_key,how='left',validate=cardinality,indicator=True)
print('input_rows=',len(orders),'output_rows=',len(merged))
print('unmatched_order_ids=',merged.loc[merged['_merge'].eq('left_only'),'order_id'].tolist())
tool_result={'status':'needs_review','rows_before':len(orders),'rows_after':len(merged),
             'unmatched_order_ids':merged.loc[merged['_merge'].eq('left_only'),'order_id'].tolist()}
print('tool_result=',tool_result)

结果要核对行数和未匹配项

第一次合并被阻止;去除已核实的完全重复行后,输入与输出都是 3 行,o3 出现在未匹配清单。工具返回 status=needs_review 和未匹配 ID;智能体应把 o3 交给数据负责人确认:是客户资料漏导入、连接键格式不同,还是允许的访客订单。不能自动把会员等级填成默认值并当作真实匹配。

tool_request= {'operation': 'join', 'left_table': 'orders', 'right_table': 'customers', 'on': 'customer_id', 'expected_cardinality': 'many_to_one'}
right_duplicate_keys= ['c2', 'c2']
blocked= MergeError
input_rows= 3 output_rows= 3
unmatched_order_ids= ['o3']
tool_result= {'status': 'needs_review', 'rows_before': 3, 'rows_after': 3, 'unmatched_order_ids': ['o3']}

pandas merge 官方文档说明 validate 与 indicator;duplicated 文档说明重复键的检测方法。

什么时候不能套用这个关系

订单明细与商品明细可能本来是一对多,不能强行设为 many_to_one。先以业务主键写清预期关系,再检查行数、唯一键和空匹配。若连接结果用于模型训练,还应确认同一实体没有因错误合并而在训练和验证中重复出现。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31694.html

赞 (0)
AI小管家的头像AI小管家
数据清洗智能体怎么搭建?用白名单操作、预览和变更日志约束执行
上一篇 2026年10月1日 下午9:23
智能体更新表格前怎么防止误覆盖?比较旧值、提案值与冲突行
下一篇 2026年10月1日 下午9:24

相关推荐

  • Claude数学建模如何从问题拆解到模型构建

    Claude数学建模的价值,不是直接生成一组看似完整的公式,而是帮助使用者把自然语言问题转换成可分析、可计算、可验证的结构。面对“如何提高效率”“如何合理分配资源”这类表述,第一步应先明确研究对象、决策目标、可用数据、限制条件和最终评价标准。

    11小时前
    200
  • claude教学:从提问到整理资料的AI使用步骤

    Claude更适合承担需要阅读、比较、归纳和改写的工作。面对一份较长的会议记录、调研材料、项目文档或多轮沟通内容,它可以帮助你提炼主题、识别章节结构、抽取关键事实,并将零散信息重新组织成摘要、提纲、表格或行动清单。它也适合用于邮件改写、报告初稿、问答整理和不同语气之间的转换。

    11小时前
    300
  • claude数学能解决哪些题型?从提问到验算的使用指南

    claude数学更适合被当作一个会解释、会追问、能协助检查的数学助手,而不是只负责吐出最终数字的计算器。它可以帮助用户读懂题意、整理已知条件、选择公式、展示推导步骤,也能根据用户提供的解答寻找计算或逻辑上的漏洞。

    11小时前
    200
  • claude教科书中的AI对话使用场景与操作步骤

    本文把“claude教科书”作为学习AI对话方法的主题表达,不把未提供的书籍章节、作者观点、官方功能或具体版本当作已知事实。真正值得掌握的,不是背下一句所谓万能提示词,而是建立一套可重复的对话流程:先明确目标,再补充背景,随后规定输出方式,最后检查结果。

    11小时前
    200
  • claude数学公式怎么用 从文字描述到规范公式的操作步骤

    使用Claude处理数学公式,关键不是直接输入“帮我写公式”,而是把题意中的变量、条件、运算关系和输出格式交代清楚。自然语言往往省略主语、范围或单位,如果这些信息没有说明,生成结果就可能在符号定义、括号范围或等号两侧的逻辑上出现偏差。

    11小时前
    200
联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部