Skip to content

Repository files navigation

金融文件取证与 GDPval 题目构建

本项目处理金融类 PDF、Word、Excel 和 CSV:先抽取通用 query 并检索 Top 20, 再由 Pi CLI 通过自定义工具和 Skill 选择最终附件、生成辅助文件并反向构建题目, 最后生成并验收 Golden Solution。

三人协作结构

代码按负责人拆成三个可独立运行的阶段:

workflows/
├── stage1_query_retrieval/       # 负责人 A:query + Top 20
│   ├── run.py
│   ├── rename_attachments.py
│   └── README.md
├── stage2_task_builder/          # 负责人 B:Pi CLI 选附件和反向出题
│   ├── run.py
│   ├── prepare_workspace.py
│   ├── run_pi_task.sh
│   ├── pi_tool_backend.py
│   ├── pi-agent/                # 自定义模型、Extension 和 Skill
│   ├── validate_task_output.py
│   └── README.md
└── stage3_golden_solution/       # 负责人 C:Golden Solution
    ├── run.py
    ├── run_pi_golden_solution.sh
    ├── validate_golden_solution.py
    └── README.md

阶段之间只通过文件交接,不导入其他阶段的实现:

  1. Stage 1 输出 queries.jsonretrieval/manifest.json
  2. Stage 2 读取检索清单,输出 task_NNN/final/
  3. Stage 3 读取最终题目与附件,输出 task_NNN/golden solution/

详细输入输出契约见 workflows/README.md 和各阶段 README。 scripts/run_end_to_end.py 仅负责依次调用三个公共入口,不放阶段业务逻辑。

项目目录

腾讯_GDPval金法医/
├── data/
│   └── source_documents/        # 本地原始文件,不上传 Git
├── financial-analysis/          # 六个真实 Word/Excel 结构模板
├── financial-analysis-report-skill/ # 自然财务写作与 Word 生成 Skill
├── prompts/                     # Stage 1/3 中文提示词
├── src/finance_forensics/       # 文档抽取、编目、query 和检索核心库
├── workflows/                   # 三个隔离工作流
├── scripts/
│   └── run_end_to_end.py        # 跨阶段总编排器
├── tests/
├── docs/
└── output/                      # 全部业务输出

data/source_documents/ 用于在本地存放原始文件。Git 仓库只提交该 目录的 .gitkeep 占位文件,不上传原始文档。

现有 output/tasks/task_001task_002 及其最终产物保持原位置不变。

环境

cd /home/ghpan/project/腾讯_GDPval金法医
source .venv/bin/activate

Inferera Base URL、模型和 API 密钥从权限为 600.env 读取。Stage 2 和 Stage 3 的 Pi CLI 均使用 .env 中配置的模型;密钥不写入 Skill、 提示词、代码或输出。

粗 query 生成会读取对应源文件的正文抽样,默认使用独立的 QUERY_LLM_TEMPERATURE=0.7 增加题目方向差异;LLM_TEMPERATURE 仍用于 文档编目,二者互不影响。检索前由同一 Inferera 模型为每条 query 动态提取 关键词,默认使用 KEYWORD_LLM_TEMPERATURE=0.1

Stage 1 和 Stage 3 的提示词集中在 prompts/

  • 文档编目.md
  • 文档编目输入模板.md
  • 通用查询生成.md
  • 通用查询输入模板.md
  • 检索关键词提取.md
  • 检索关键词输入模板.md
  • Claude黄金答案生成.md

Stage 2 的规则已经迁入 workflows/stage2_task_builder/pi-agent/skills/gdpval-task-builder/SKILL.md

文档编目

# 查看输入,不调用模型
finance-forensics inventory

# 本地抽取单个文件,不调用模型
finance-forensics inspect data/source_documents/0001_20220309110518725.pdf

# 显式执行全量编目
finance-forensics run --workers 4

编目输出位于 output/catalog/document_catalog.json.jsonl

Stage 1:Query 与 Top 20

从一个或多个已编目文件生成通用 query,再进行检索:

.venv/bin/python workflows/stage1_query_retrieval/run.py \
  --source-file 0050_54e6ee7d4a7c74b71d8ea7502bfc5416.pdf \
  --output-dir output/stage1_query_retrieval

使用已有 query JSON:

.venv/bin/python workflows/stage1_query_retrieval/run.py \
  --queries output/queries/query_test.json \
  --output-dir output/stage1_query_retrieval

使用本地完整编目检索:

.venv/bin/python workflows/stage1_query_retrieval/run.py \
  --queries output/queries/query_test.json \
  --catalog output/catalog/catalog/document_catalog.json \
  --input-dir data/unzip_202607282110_source_documents/source_documents \
  --output-dir output/stage1_query_retrieval_full

从全量 query 中按语义多样性随机抽样,再为每条检索 Top 20:

.venv/bin/python workflows/stage1_query_retrieval/select_diverse_queries.py \
  --input output/queries_satge1/full_corpus/queries.json \
  --output output/stage1_query_retrieval_200/queries.json \
  --manifest output/stage1_query_retrieval_200/selection_manifest.json \
  --count 200 \
  --seed 20260729

.venv/bin/python workflows/stage1_query_retrieval/run.py \
  --queries output/stage1_query_retrieval_200/queries.json \
  --catalog output/catalog/catalog/document_catalog.json \
  --input-dir data/unzip_202607282110_source_documents/source_documents \
  --output-dir output/stage1_query_retrieval_200 \
  --workers 100 \
  --resume

抽样使用固定随机种子和随机化最远点算法,在保留随机性的同时降低所选 query 之间的语义相似度。检索结果会按内容 document_id 去重,保证每组 包含 20 份不同文档。

输出:

output/stage1_query_retrieval/
├── queries.json
└── retrieval/
    ├── query_keywords.json
    ├── manifest.json
    └── query_NNN/files/         # 每条 query 恰好 20 个候选

检索只使用两类信号:完整 query 与 catalog summary 的中文向量相似度,以及 大模型动态提取关键词与文档摘要、业务主题和编目关键词的字符短语匹配。默认 权重分别为 0.750.25;不使用固定题型词表、文档类型加权或生成式 大模型逐个阅读候选文件。

Stage 2:Pi 题目构建

首次运行安装固定版本的 Pi CLI:

npm ci --ignore-scripts
.venv/bin/python workflows/stage2_task_builder/run.py \
  --manifest output/stage1_query_retrieval/retrieval/manifest.json \
  --tasks-dir output/tasks

只准备工作区、暂不调用 Pi:

.venv/bin/python workflows/stage2_task_builder/run.py \
  --manifest output/stage1_query_retrieval/retrieval/manifest.json \
  --tasks-dir output/tasks \
  --task-index 2 \
  --stop-after prepare

每题只访问自己的20个候选文件。Pi 先比较并保存题目方向,再选择候选,并生成 且实际选用1至3个辅助附件;最终固化10至17个 attachments 后,按最终顺序 重新编号, 再分别反向编写 workflow.md 和 query。Pi 禁用通用 shell/write/edit,只能 调用 Stage 2 的受控工具。workflow 至少包含12个工作步骤;query 固定为 “任务背景、具体任务、交付要求”三段,其中“具体任务”只能用一个整体叙述 段落,不列步骤或具体分析方法,交付文件不超过5个。

合成附件生成前,Pi 必须读取财务报告 Skill 和真实模板资源清单。每个合成文件 记录模板 ID 与适配理由;工具只借鉴结构、版式、sheet 分层和职业文档习惯, 不复制模板中的主体、数据或结论。

验收已有题目:

.venv/bin/python workflows/stage2_task_builder/validate_task_output.py \
  --workspace output/tasks \
  --task 002

Stage 3:Golden Solution

.venv/bin/python workflows/stage3_golden_solution/run.py \
  --tasks-dir output/tasks \
  --task-index 2

Stage 3 同时加载 Golden Solution Skill 与财务分析报告 Skill,按真实模板组织 Word/Excel 文件,并实际创建 query 指定的交付物。校验覆盖文件可打开性、内容 完整性、Excel 公式、来源追踪、模板使用记录和哈希。验收已有结果:

.venv/bin/python workflows/stage3_golden_solution/validate_golden_solution.py \
  --workspace output/tasks \
  --task 002

端到端编排

总编排器只是依次运行三个阶段:

.venv/bin/python scripts/run_end_to_end.py \
  --queries output/queries/query_test.json \
  --run-id finance_batch_001

也可以从单条 query 或源文件开始:

.venv/bin/python scripts/run_end_to_end.py \
  --query "需要分析的初始金融工作任务" \
  --run-id finance_single_001

.venv/bin/python scripts/run_end_to_end.py \
  --source-file 0050_54e6ee7d4a7c74b71d8ea7502bfc5416.pdf \
  --run-id finance_source_001

新运行目录:

output/pipeline_runs/<run_id>/
├── stage1/
│   ├── queries.json
│   └── retrieval/
├── stage2/
│   └── tasks/
└── pipeline_manifest.json

Stage 3 的结果写在 stage2/tasks/task_NNN/golden solution/,与对应题目保持 在同一个任务目录。中断后使用相同参数并增加 --resume。可用 --stop-after stage1|stage2|stage3--dry-run 控制执行。

测试

.venv/bin/pytest -q

About

Tencent GDPval finance document retrieval, task construction and golden solution workflow

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages