数据清洗智能体怎么搭建?用白名单操作、预览和变更日志约束执行

数据清洗智能体可以提出操作,但执行端应限制允许动作、先生成预览,再由人工确认。示例用两种白名单操作处理空格和完全重复行,并演示拒绝未知动作。

搭建数据清洗智能体时,可以让模型理解用户提出的目标,但不能把模型生成的任意代码直接执行。更容易复核的结构是:模型只输出有限的“动作+列名”计划,确定性的执行器逐项验证,先返回预览与变更日志,最后由实际审批状态决定是否保存。

定义允许动作和拒绝条件

教学计划只允许 trim_whitespace 清理 city 列首尾空格,以及 drop_exact_duplicates 删除内容完全相同的行。输入计划多字段、未知动作或非白名单列都报错。这里的“智能体计划”由人写在脚本中模拟,没有调用线上模型。

数据清洗智能体怎么搭建?用白名单操作、预览和变更日志约束执行

删除重复行前要区分“完全相同”与“业务主键重复”:两个同编号订单可能有不同状态,绝不能只按一个 ID 自动删掉。这个例子里的两行 u2/上海 完全相同,才用整体行去重。

运行受控预览

安装 pandas,将代码存为 cleaning_agent.py 并运行。source 是人工构造表;preview 是执行后的候选结果,提交前仍保留原表。

import json
from pathlib import Path
import pandas as pd

# plans 可由模型提出;本例是人工编写的候选计划,没有调用模型。
source=pd.DataFrame({'id':['u1','u2','u2'],'city':['北京 ','上海','上海']})
agent_proposal={'source_id':'teaching-table-v1','plans':[{'action':'trim_whitespace','column':'city'}, {'action':'drop_exact_duplicates','column':None}]}
plans=agent_proposal['plans']
allowed={'trim_whitespace','drop_exact_duplicates'}
def execute(frame,plan):
    if set(plan)!={'action','column'} or plan['action'] not in allowed:raise ValueError('operation_not_allowed')
    result=frame.copy()
    if plan['action']=='trim_whitespace':
        if plan['column'] not in {'city'}:raise ValueError('column_not_allowed')
        result[plan['column']]=result[plan['column']].str.strip()
    else:result=result.drop_duplicates()
    return result
preview=source.copy();log=[]
for plan in plans:
    before=len(preview);preview=execute(preview,plan)
    log.append({'action':plan['action'],'column':plan['column'],'before':before,'after':len(preview)})
print('preview=\n'+preview.to_string(index=False))
print('change_log=',log)
approval_record={'source_id':'teaching-table-v1','approved':True,'reviewer':'demo-reviewer'}
if approval_record['source_id']!=agent_proposal['source_id']:raise ValueError('source_changed')
saved=preview.copy() if approval_record['approved'] else source.copy()
assert len(saved)==2 and saved['city'].str.startswith(' ').sum()==0
log.append({'action':'commit','approved':approval_record['approved'],'reviewer':approval_record['reviewer'],'after':len(saved)})
saved_path=Path(__file__).with_name('03_cleaned.csv')
log_path=Path(__file__).with_name('03_change_log.json')
if approval_record['approved']:
    saved.to_csv(saved_path,index=False,encoding='utf-8-sig')
    log_path.write_text(json.dumps(log,ensure_ascii=False,indent=2),encoding='utf8')
    reloaded=pd.read_csv(saved_path,encoding='utf-8-sig')
    result_checked=(len(reloaded)==2 and reloaded['city'].tolist()==['北京','上海'])
else:result_checked=False
print('saved_rows=',len(saved),'source_rows=',len(source),'result_checked=',result_checked)
print('saved_file=',saved_path.name,'log_file=',log_path.name)
print('final_log=',log)
try:execute(source,{'action':'delete_everything','column':None})
except ValueError as error:print('rejected=',error)

检查预览、日志与拒绝结果

预览中城市空格被去掉,三行变两行;日志逐步写明每个动作前后的行数。示例的审批记录与提案绑定同一个 source_id,确认后把结果写入 03_cleaned.csv、日志写入 03_change_log.json,再回读 CSV 核对行数和城市值。delete_everything 会触发 operation_not_allowed。脚本中的审批记录是教学样例,生产系统必须从真实审批服务读取,而非硬编码为真。

preview=
id city
u1   北京
u2   上海
change_log= [{'action': 'trim_whitespace', 'column': 'city', 'before': 3, 'after': 3}, {'action': 'drop_exact_duplicates', 'column': None, 'before': 3, 'after': 2}]
saved_rows= 2 source_rows= 3 result_checked= True
saved_file= 03_cleaned.csv log_file= 03_change_log.json
final_log= [{'action': 'trim_whitespace', 'column': 'city', 'before': 3, 'after': 3}, {'action': 'drop_exact_duplicates', 'column': None, 'before': 3, 'after': 2}, {'action': 'commit', 'approved': True, 'reviewer': 'demo-reviewer', 'after': 2}]
rejected= operation_not_allowed

pandas 的重复行判断文档解释了整行与指定列的区别;DataFrame 基础指南可用于核对复制、选择与字符串列操作。

实际接入模型时的边界

对真实工具调用,模型只负责生成符合预定 JSON 结构的 plans,工具负责校验与执行,审批系统负责给出 approved;此处没有接入真实 LLM 或审批服务,只把教学结果写到脚本同目录。上线还要限制文件路径、最大行数、可写目录和日志中的敏感数据。每次建议都应展示原值、候选值和受影响行数;没有可靠的去重依据就停在预览。

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

赞 (0)
AI小管家的头像AI小管家
智能体发现脏数据后怎么办?用问题台账追踪修复与回归复测
上一篇 2026年10月1日 下午9:23
智能体合并两张表怎么避免行数膨胀?检查连接键与未匹配记录
下一篇 2026年10月1日 下午9:24

相关推荐

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

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

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

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

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

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

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

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

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

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

    12小时前
    200
联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

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

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