AI 样本复核看板怎么搭?用 Streamlit 筛选记录并下载 CSV

用 Streamlit 把 AI 样本做成本地复核看板,按状态查看数量、样本编号和输入内容,并下载与当前筛选一致的 CSV。

这个看板让你查看已经给定的人工复核状态、筛选样本并导出当前结果。适合先把 AI 训练数据或评测记录交给同事核查,避免每次在完整表格里手动找待复核行。

五条记录与复核状态均为人工构造;Streamlit 负责界面,没有调用模型自动判定“通过”或“退回”。本例只查看和导出,不能在页面里修改状态。示例实际使用 Windows、Python 3.11.15、Streamlit 1.64.0、pandas 2.3.3。

AI 样本复核看板怎么搭?用 Streamlit 筛选记录并下载 CSV

先跑通本地演示

在空的练习目录里创建独立环境。以下为 Windows PowerShell 命令;macOS/Linux 的激活命令用 source .venv/bin/activate。输出文件只用于本次演示,重复执行会更新这些演示文件。

python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install streamlit==1.64.0 pandas==2.3.3

把下面代码保存为 sample_dashboard.py,再执行 python -m streamlit run sample_dashboard.py –server.address=127.0.0.1。浏览器打开终端显示的本地网址,通常是 http://127.0.0.1:8501;若端口已占用,以终端实际给出的端口为准。

import pandas as pd
import streamlit as st

st.set_page_config(page_title='AI 样本复核', layout='wide')
st.title('AI 样本复核看板')
st.caption('人工构造的演示数据;状态由人工给定,筛选和下载不会修改原表。')
frame = pd.DataFrame({
    'sample_id': ['s01', 's02', 's03', 's04', 's05'],
    'input_text': ['识别猫的图片', '总结一段文章', '检索产品手册', '分类客户问题', '提取发票字段'],
    'review_status': ['待复核', '通过', '退回', '待复核', '通过'],
})
if frame['sample_id'].isna().any() or not frame['sample_id'].is_unique:
    st.error('样本编号为空或重复,请先检查数据源。')
    st.stop()
status = st.selectbox('复核状态', ['全部', '待复核', '通过', '退回'])
view = frame if status == '全部' else frame.loc[frame['review_status'].eq(status)]
st.metric('当前样本数', len(view))
st.dataframe(view, hide_index=True)
csv_bytes = view.to_csv(index=False).encode('utf-8-sig')
st.session_state['export_csv'] = csv_bytes
st.download_button(
    '下载当前筛选 CSV', data=csv_bytes, file_name='review_selection.csv',
    mime='text/csv', on_click='ignore',
)

按四个状态验收

选项 应显示编号 应显示数量
全部 s01、s02、s03、s04、s05 5
待复核 s01、s04 2
通过 s02、s05 2
退回 s03 1

选择“待复核”时,页面只显示 s01、s04,数量是 2;选择“通过”显示 s02、s05;选择“退回”只显示 s03。下载按钮拿到的是当前 view 生成的 CSV,显示表格和下载使用同一份筛选结果。

点“下载当前筛选 CSV”,打开文件,确认只有 sample_id、input_text、review_status 三列,行数和编号与表中一致,没有额外的 DataFrame 索引列。然后切换到另一个状态再下载,确认下载内容随筛选改变;不要仅凭文件能打开就认为范围正确。

utf-8-sig 是带 UTF-8 标记的编码,便于部分表格软件识别中文;真实文件若仍乱码,检查软件导入时的编码设置。文件名固定,所以再次下载时要留意浏览器是否加了编号后缀,不要误看上一次文件。

用 AppTest 核对页面状态

下面的短检查与 sample_dashboard.py 放在同一目录,保存为 check_dashboard.py 并执行 python check_dashboard.py。它模拟选择“待复核”,检查页面表格、数量与下载按钮输入的 CSV。

from io import BytesIO
import pandas as pd
from streamlit.testing.v1 import AppTest

app = AppTest.from_file("sample_dashboard.py").run()
app.selectbox[0].select("待复核").run()
assert len(app.exception) == 0
assert app.dataframe[0].value["sample_id"].tolist() == ["s01", "s04"]
assert int(app.metric[0].value) == 2
exported = pd.read_csv(BytesIO(app.session_state["export_csv"]))
assert exported["sample_id"].tolist() == ["s01", "s04"]
print("pending rows and export:", len(exported))

这份短检查应输出 pending rows and export: 2。本站使用 Streamlit AppTest 实际验证四种筛选状态、页面表格和下载输入字节的一致性;没有执行浏览器下载点击或多人部署测试。AppTest 是模拟应用的测试接口,浏览器保存文件和页面外观仍应按上一节操作检查。

换成你的 CSV 时先检查什么

将 frame = pd.DataFrame(…) 换成 pd.read_csv(“samples.csv”, dtype={“sample_id”: “string”}),并确认三列存在、编号非空且唯一、状态取值属于约定集合。不要把未知状态悄悄改成“通过”。CSV 里的状态应由你的真实复核流程产生,并保留审核人、时间和版本在源系统。

本例没有登录、角色权限、状态编辑和数据库写回,不应直接当作多人生产审核系统。保持绑定 127.0.0.1 可限制本地访问;需要远程共享时先补齐身份和数据访问规则。下载会生成新文件,不会更新源 CSV。

Streamlit 的交互会重跑脚本;这里重跑只创建演示表和筛选结果。接真实数据库时,不要把发布、扣费或覆盖写入放在每次重跑都会执行的位置。download_button 的数据在内存中,较大文件应按官方文档评估内存占用,不能承诺任意大小的样本表都能直接导出。

官方资料与版本范围

本文于 2026 年 10 月 1 日读取下列官方文档;示例的实际版本见正文。

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

赞 (0)
AI小管家的头像AI小管家
AI 训练数据缺失热力图用什么画?用 Seaborn 定位成片缺失
上一篇 1小时前
AI 训练表格怎样从宽表转成长表?用 pandas 保留样本编号和指标含义
下一篇 1小时前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

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

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