EdwardAiyw

phase2-data-qa

"二期数据质检:LLM 驱动质检,支持 QA 表中间层(原表只读→QA表质检→回写原表)和 Wiki/Sheet 点行质检,结果写回飞书表格。"

EdwardAiyw 0 Updated 1mo ago

Resources

35
GitHub

Install

npx skillscat add edwardaiyw/feishu-qa-bot

Install via the SkillsCat registry.

SKILL.md

二期数据质检项目说明

当前生产方向:原表只读 → QA 表质检 → DeepSeek 判断 → 回写原表

生产服务:https://qa.251104.xyz
GitHub:EdwardAiyw/feishu-qa-bot


1. 当前架构

飞书原表(只读)
  ↓ sync_source_to_qa()
QA 质检表(原生表,可写)
  ↓ run_qa_on_table()
DeepSeek / OpenAI-compatible LLM
  ↓ sync_qa_to_source()
原表质检字段回写

对应模块:

qa_table_sync.py  QA 表同步模块
qa_checker.py     LLM 质检 prompt / API 调用 / JSON 解析
server.py         Flask 接口、电子表格点行质检、自动同步线程
feishu_client.py  飞书 API 客户端,支持 bitable/sheet/wiki
attachment_utils.py 真实附件文本抽取

2. 启动质检方式

方式 适用场景 接口
QA 表同步 生产主流程 POST /sync/initPOST /sync/run
自动同步 定时处理新增数据 QA_SYNC_INTERVAL_MINUTES=30
多维表格单条 飞书自动化按钮 POST /rec/<record_id>?url=<表格链接>
电子表格点行 同事点一下质检当前行 GET /check/sheet?spreadsheet_token=...&sheet_id=...&row=N
批量调试 临时全表检查 POST /test/checkPOST /check/sheet

3. 必要环境变量

FEISHU_APP_ID=cli_xxxxxxxxxxxxxx
FEISHU_APP_SECRET=your_feishu_app_secret

LLM_API_URL=https://api.deepseek.com/v1/chat/completions
LLM_API_KEY=your_deepseek_api_key
LLM_MODEL=deepseek-chat

QA_SOURCE_APP_TOKEN=原表 app_token
QA_SOURCE_TABLE_ID=原表 table_id
QA_TABLE_APP_TOKEN=QA 表所在 app_token,可留空
QA_TABLE_ID=QA 表 table_id
QA_SYNC_INTERVAL_MINUTES=30

4. QA 表字段

源记录ID
题目
任务类型
附件内容
产物内容
checklist
质检状态
质检备注
质检时间

源记录ID 必须等于飞书 API 的 record_id,不能用 UID。


5. 质检规则方向

用户明确要求:用大模型做语义质检,不要用正则/代码机械判断

Prompt 在 qa_checker.pyQA_PROMPT

核心规则:

  1. 场景真实性:不能要求后台数据、API、爬虫、黑入等普通用户无法获得的信息。
  2. 题目附件描述要精简:不能机械式逐个介绍附件、文件名、格式、时间、用途。
  3. 题目产物要求要精简:避免配色、字体、排版、字数等次级要求喧宾夺主。
  4. 附件内容列/产物内容列可以保留详细信息,不要误判。
  5. 模型自检不强制。
  6. checklist 必填,且必须客观可评判。
  7. 题目正文不要写 L1/L2/L3 层级。
  8. 检查附件真实性、题目与附件冲突、逻辑混乱、条件太宽、难度不合理、英文附件过多等二期底线问题。

输出只写不通过的问题,不展示通过规则。


6. 电子表格点行质检

/check/sheet 支持 Wiki 中嵌入的飞书电子表格。

GET 链接:

https://qa.251104.xyz/check/sheet?spreadsheet_token=<spreadsheet_token>&sheet_id=<sheet_id>&row=<行号>

点行质检会读取:

题目
任务类型
附件内容列
相关附件列里的真实附件文件
公开来源链接
产物内容列
checklist

支持附件:PDF、DOCX、XLSX、CSV、TXT、Markdown、JSON、HTML。


7. 字段识别策略

不要硬编码字段名,使用模糊匹配。

状态字段优先级:

质检状态 > 内部质检 > 是否通过 > 质检结果

意见字段优先级:

质检意见 > 质检备注 > 质检原因 > 原因

字段名带括号也要支持,例如:质检状态(质检员填写)


8. 关键坑位

  1. 不要传 UID:飞书自动化按钮必须传「记录ID」。
  2. 不要用同步表做 QA 表:同步表 API 不能写入。
  3. 不要随便创建字段:先用 find_write_back_fields() 查已有字段,创建字段可能 91403 Forbidden。
  4. Wiki URL 先 parse_wiki_url():Wiki 里可能是 bitable,也可能是 sheet。
  5. Wiki 内嵌表要单独授权:给应用/机器人可编辑权限。
  6. 不要把真实密钥提交 GitHub
  7. LLM 超时用 60 秒:DeepSeek/MiMo 可能响应慢。
  8. Prompt 边界必须和文档一致:不能自行加严或放宽。
  9. 规则2/3只能看题目字段:附件内容列、附件原文摘录、产物内容列里的详细内容不能作为“附件描述过细/产物要求过细”的违规证据。
  10. 课程改造类交付物不要误判:16周课程安排、工具路线、期末项目设计、评分建议是课程设计题的核心交付物,不是次级格式要求。销售样本数据能支持字段理解、缺失值处理、描述统计、图表和结论表达时,不要因为数据规模小就判附件不足。
  11. LLM 结果需要证据校验:DeepSeek 可能把参考信息误说成题目字段,或把完整 checklist 挑成“不够完美”。postprocess_result() 只过滤这类串字段误报:规则2证据必须真实存在于题目字段;多条任务相关“是否...”checklist 不因缺少理想项而判不合格。
  12. 具体原型/素材评估要检查核心对象是否存在:如果任务要求判断 demo、H5页面、聊天记录+图片、宣传稿、录屏或代码包,但附件只提供论文/白皮书/规范,需报“核心素材缺失”;如果 checklist 引用附件2但附件列只有附件1,需报“附件编号不一致”。

9. 验证命令

python -m unittest test_qa_checker.py test_attachment_utils.py -v
curl -s https://qa.251104.xyz/health
curl -s https://qa.251104.xyz/sync/status

部署:

git add -A
git commit -m "docs: update current QA workflow"
git push origin master