Resources
35Install
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/init、POST /sync/run |
| 自动同步 | 定时处理新增数据 | QA_SYNC_INTERVAL_MINUTES=30 |
| 多维表格单条 | 飞书自动化按钮 | POST /rec/<record_id>?url=<表格链接> |
| 电子表格点行 | 同事点一下质检当前行 | GET /check/sheet?spreadsheet_token=...&sheet_id=...&row=N |
| 批量调试 | 临时全表检查 | POST /test/check、POST /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=304. QA 表字段
源记录ID
题目
任务类型
附件内容
产物内容
checklist
质检状态
质检备注
质检时间源记录ID 必须等于飞书 API 的 record_id,不能用 UID。
5. 质检规则方向
用户明确要求:用大模型做语义质检,不要用正则/代码机械判断。
Prompt 在 qa_checker.py 的 QA_PROMPT。
核心规则:
- 场景真实性:不能要求后台数据、API、爬虫、黑入等普通用户无法获得的信息。
- 题目附件描述要精简:不能机械式逐个介绍附件、文件名、格式、时间、用途。
- 题目产物要求要精简:避免配色、字体、排版、字数等次级要求喧宾夺主。
- 附件内容列/产物内容列可以保留详细信息,不要误判。
- 模型自检不强制。
- checklist 必填,且必须客观可评判。
- 题目正文不要写 L1/L2/L3 层级。
- 检查附件真实性、题目与附件冲突、逻辑混乱、条件太宽、难度不合理、英文附件过多等二期底线问题。
输出只写不通过的问题,不展示通过规则。
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. 关键坑位
- 不要传 UID:飞书自动化按钮必须传「记录ID」。
- 不要用同步表做 QA 表:同步表 API 不能写入。
- 不要随便创建字段:先用
find_write_back_fields()查已有字段,创建字段可能 91403 Forbidden。 - Wiki URL 先 parse_wiki_url():Wiki 里可能是 bitable,也可能是 sheet。
- Wiki 内嵌表要单独授权:给应用/机器人可编辑权限。
- 不要把真实密钥提交 GitHub。
- LLM 超时用 60 秒:DeepSeek/MiMo 可能响应慢。
- Prompt 边界必须和文档一致:不能自行加严或放宽。
- 规则2/3只能看题目字段:附件内容列、附件原文摘录、产物内容列里的详细内容不能作为“附件描述过细/产物要求过细”的违规证据。
- 课程改造类交付物不要误判:16周课程安排、工具路线、期末项目设计、评分建议是课程设计题的核心交付物,不是次级格式要求。销售样本数据能支持字段理解、缺失值处理、描述统计、图表和结论表达时,不要因为数据规模小就判附件不足。
- LLM 结果需要证据校验:DeepSeek 可能把参考信息误说成题目字段,或把完整 checklist 挑成“不够完美”。
postprocess_result()只过滤这类串字段误报:规则2证据必须真实存在于题目字段;多条任务相关“是否...”checklist 不因缺少理想项而判不合格。 - 具体原型/素材评估要检查核心对象是否存在:如果任务要求判断 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