feat(benchmark): add finance e2e case suite
This commit is contained in:
parent
faa54fc671
commit
edc55390cf
12 changed files with 326 additions and 0 deletions
104
docs/e2e-finance-benchmark.md
Normal file
104
docs/e2e-finance-benchmark.md
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
# Finance Agent-Driven E2E Benchmark
|
||||
|
||||
This benchmark suite is designed for complex financial analysis scenarios and follows the workflow in `docs/e2e-testing-guide.md`.
|
||||
|
||||
## Scope
|
||||
|
||||
- Domain: equity, macro, rates, credit, cross-asset allocation
|
||||
- Complexity: multi-step planning, data collection, analysis, local artifact generation
|
||||
- Providers: `kimi-coding` and `claude-code`
|
||||
- Cases: 10
|
||||
|
||||
Case prompts are stored in:
|
||||
- `scripts/e2e-finance-benchmark/cases/`
|
||||
|
||||
## Prerequisites
|
||||
|
||||
1. Credentials are configured (`pnpm multica credentials init` if needed)
|
||||
2. Dev auth exists for `web_search`/`data` tools (`~/.super-multica-dev/auth.json`)
|
||||
3. Required env:
|
||||
|
||||
```bash
|
||||
export SMC_DATA_DIR=~/.super-multica-e2e
|
||||
export MULTICA_API_URL=https://api-dev.copilothub.ai
|
||||
```
|
||||
|
||||
## Run All Cases (Both Providers)
|
||||
|
||||
```bash
|
||||
scripts/e2e-finance-benchmark/run.sh
|
||||
```
|
||||
|
||||
The script defaults:
|
||||
- Providers: `kimi-coding claude-code`
|
||||
- Case glob: `case-*.txt`
|
||||
- Output directory: `.context/finance-e2e-runs/<timestamp>/`
|
||||
|
||||
Generated artifact:
|
||||
- `manifest.tsv`: provider, case id, status, session id, session dir, raw log file
|
||||
|
||||
## Run a Subset
|
||||
|
||||
Run only one provider:
|
||||
|
||||
```bash
|
||||
PROVIDERS="kimi-coding" scripts/e2e-finance-benchmark/run.sh
|
||||
```
|
||||
|
||||
Run only specific cases by glob:
|
||||
|
||||
```bash
|
||||
CASE_GLOB="case-0[1-3]*.txt" scripts/e2e-finance-benchmark/run.sh
|
||||
```
|
||||
|
||||
## Case List
|
||||
|
||||
1. `case-01-top10-financial-reports.txt`
|
||||
- Top-10 US market cap 3-year filing analysis + workbook + 2026 allocation memo
|
||||
2. `case-02-ai-value-chain-scorecard.txt`
|
||||
- AI value-chain factor model and weighted ranking
|
||||
3. `case-03-us-bank-stress-test.txt`
|
||||
- US large-bank stress scenarios (mild/severe recession)
|
||||
4. `case-04-consumer-sector-macro-linkage.txt`
|
||||
- Consumer sector earnings elasticity vs macro variables
|
||||
5. `case-05-energy-transport-sensitivity.txt`
|
||||
- Energy/transport sensitivity and hedge ideas under oil scenarios
|
||||
6. `case-06-cross-asset-allocation.txt`
|
||||
- Cross-asset tactical portfolio design with scenario stress tests
|
||||
7. `case-07-reit-rate-risk.txt`
|
||||
- REIT screening under rate scenarios and debt maturity pressure
|
||||
8. `case-08-earnings-quality-forensics.txt`
|
||||
- Forensic accounting quality framework and red-flag scoring
|
||||
9. `case-09-post-earnings-drift-study.txt`
|
||||
- PEAD strategy feasibility study with risk controls
|
||||
10. `case-10-investment-committee-pack.txt`
|
||||
- Q2 2026 investment committee pack + devil's advocate memo
|
||||
|
||||
## Evaluation Checklist
|
||||
|
||||
For each run (`session-dir/run-log.jsonl`):
|
||||
|
||||
1. Event completeness
|
||||
- `run_start` appears before `run_end`
|
||||
2. Tool pairing
|
||||
- Every `tool_start` has matching `tool_end`
|
||||
3. Error handling
|
||||
- Check `tool_end.is_error`, `error_classify`, `auth_rotate`
|
||||
4. Compaction health
|
||||
- If compaction occurs: `compaction.tokens_removed > 0`
|
||||
5. Performance
|
||||
- Inspect `llm_result.duration_ms` and tool durations for outliers
|
||||
|
||||
For content quality (`session.jsonl` and output files on Desktop):
|
||||
|
||||
1. Required files are created in target output directory
|
||||
2. Assumptions are explicit and traceable
|
||||
3. Sources are listed (`sources.md` with links + dates)
|
||||
4. Output distinguishes facts vs inferences when requested
|
||||
5. Strategy conclusions include risk and invalidation conditions
|
||||
|
||||
## Notes
|
||||
|
||||
- Most cases intentionally require web + financial data gathering and local file generation.
|
||||
- Cases are designed to test planning quality, not only final answer quality.
|
||||
- You can analyze sessions after batch runs by opening the `session_dir` paths in `manifest.tsv`.
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
请完成一个高复杂度投研任务(中文输出):
|
||||
|
||||
目标:分析美股市值排名前十公司在最近三个完整财年的财报与经营质量,并给出 2026 年(2026-01-01 到 2026-12-31)的投资建议。
|
||||
|
||||
硬性要求:
|
||||
1. 以“截至 2026-02-01 的美股市值前十”为样本;如果个别公司数据窗口不完整,请注明并用“最近可得完整财年”替代。
|
||||
2. 每家公司生成 1 份详细分析,至少包含:收入与利润结构、毛利率/营业利润率趋势、现金流质量、资本开支与回购分红、估值区间、主要风险。
|
||||
3. 生成一个 Excel 文件(.xlsx),至少包含:`raw_data`、`company_scorecard`、`valuation`、`risk_matrix` 四个工作表。
|
||||
4. 生成一份综合报告,对十家公司做横向比较与分层(核心持仓/观察/回避),并给出 2026 年组合建议(含仓位区间和触发条件)。
|
||||
5. 单独输出 `sources.md`,列出关键数据来源链接与抓取时间。
|
||||
6. 所有结果统一放到新目录:`~/Desktop/multica-fin-bench/case-01/`。
|
||||
7. 如果无法直接生成 xlsx,请说明原因并提供结构等价的 CSV 文件集。
|
||||
|
||||
执行要求:先给出 8-12 步执行计划,再执行。最后做自检清单,确认文件齐全。
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
请构建“AI 产业链基本面与估值评分”项目(中文输出)。
|
||||
|
||||
股票池:NVDA、AMD、AVGO、MSFT、GOOGL、AMZN、META、TSM、ASML、ANET。
|
||||
时间范围:2023-01-01 到 2025-12-31(不足处用最近可得数据补齐并标记)。
|
||||
|
||||
任务要求:
|
||||
1. 构建一个 100 分制评分模型,至少包含 6 个维度:增长、盈利能力、资本效率、研发强度、现金流质量、估值安全边际。
|
||||
2. 给出每个维度的权重与打分逻辑,必须可复现。
|
||||
3. 生成 Excel(.xlsx):`input_data`、`factor_scores`、`weighted_rank`、`scenario_2026`。
|
||||
4. 在 `scenario_2026` 中给出三种情景(乐观/基准/保守)下的目标区间与触发信号。
|
||||
5. 产出 `investment_memo.md`(含前 3 名的建仓逻辑和后 3 名的回避逻辑)。
|
||||
6. 产出 `sources.md`(来源链接 + 日期)。
|
||||
7. 输出目录:`~/Desktop/multica-fin-bench/case-02/`。
|
||||
|
||||
执行要求:先计划后执行;最后输出“可复现性检查”(别人按你的步骤是否能复现)。
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
请做“美国大型银行 2026 压力测试”任务(中文输出)。
|
||||
|
||||
样本:JPM、BAC、C、WFC、GS、MS。
|
||||
|
||||
任务要求:
|
||||
1. 基于最近三个完整财年(优先 2023-2025)整理关键指标:净息差(NIM)、CET1、贷款损失准备、商业地产敞口、存款成本变化、未实现损失等。
|
||||
2. 构建两套压力情景:
|
||||
- Mild Recession:失业率上行 +150bp,联邦基金利率下行 100bp
|
||||
- Severe Recession:失业率上行 +300bp,联邦基金利率下行 200bp,CRE 违约率显著上行
|
||||
3. 估算各银行在两种情景下的利润与资本充足率变化方向,并给出脆弱点排序。
|
||||
4. 生成 Excel(.xlsx):`bank_raw`、`stress_assumptions`、`impact_estimate`、`ranking`。
|
||||
5. 生成 `risk_brief.md`,包含“最需要警惕的 5 个风险信号”。
|
||||
6. 生成 `sources.md`。
|
||||
7. 输出到:`~/Desktop/multica-fin-bench/case-03/`。
|
||||
|
||||
执行要求:先给方法论,再给结果;最后列出你最不确定的 3 个假设。
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
请做“美国消费板块与宏观变量联动分析”(中文输出)。
|
||||
|
||||
样本公司:WMT、COST、TGT、HD、LOW、MCD、SBUX、NKE、DIS、AMZN。
|
||||
时间范围:2023-01-01 到 2025-12-31。
|
||||
|
||||
任务要求:
|
||||
1. 将公司分为“必需消费/可选消费”两组,比较收入增速、利润率、库存变化、同店销售(如可得)与现金流质量。
|
||||
2. 结合宏观变量(CPI、实际工资、失业率、利率)分析各组盈利弹性。
|
||||
3. 构建“2026 三情景”盈利弹性矩阵:软着陆/再通胀/衰退。
|
||||
4. 生成 Excel(.xlsx):`company_metrics`、`macro_series`、`elasticity_matrix`、`portfolio_actions`。
|
||||
5. 生成 `strategy_note.md`,给出 2026 年行业配置建议与再平衡触发条件。
|
||||
6. 生成 `sources.md`。
|
||||
7. 输出目录:`~/Desktop/multica-fin-bench/case-04/`。
|
||||
|
||||
执行要求:必须明确写出每个配置建议背后的可验证指标。
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
请完成“能源价格冲击下的能源与运输行业敏感性分析”(中文输出)。
|
||||
|
||||
样本:XOM、CVX、COP、SLB、DAL、UAL、FDX、UPS。
|
||||
时间范围:2023-01-01 到 2025-12-31。
|
||||
|
||||
任务要求:
|
||||
1. 归纳各公司对油价/燃料成本的敏感方向与经营杠杆来源。
|
||||
2. 构建三种油价路径(2026 年):
|
||||
- 情景A:WTI 均价 60 美元
|
||||
- 情景B:WTI 均价 80 美元
|
||||
- 情景C:WTI 均价 100 美元
|
||||
3. 估计不同情景下各公司盈利和估值的相对变化方向(可用区间而非点估计,但要说明依据)。
|
||||
4. 生成 Excel(.xlsx):`raw_financials`、`oil_scenarios`、`sensitivity_map`、`trade_ideas`。
|
||||
5. 生成 `hedge_plan.md`,提出至少 2 套对冲或配对交易思路,并说明失效条件。
|
||||
6. 生成 `sources.md`。
|
||||
7. 输出到:`~/Desktop/multica-fin-bench/case-05/`。
|
||||
|
||||
执行要求:结论必须包含“基准仓位 + 对冲仓位 + 触发阈值”。
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
请做“跨资产战术配置(2026)”项目(中文输出)。
|
||||
|
||||
资产池:SPY、QQQ、IWM、TLT、IEF、HYG、GLD、DBC、BTC-USD。
|
||||
历史区间:2021-01-01 到 2025-12-31(月频即可)。
|
||||
|
||||
任务要求:
|
||||
1. 计算并比较关键指标:年化收益、波动率、最大回撤、Sharpe、相关性矩阵。
|
||||
2. 设计两种组合:
|
||||
- 防守型(目标最大回撤尽量低)
|
||||
- 进攻型(目标风险调整后收益更高)
|
||||
3. 对两种组合做 2026 三情景压力测试(增长放缓/通胀反复/流动性宽松),给出调仓规则。
|
||||
4. 生成 Excel(.xlsx):`price_returns`、`risk_metrics`、`corr_matrix`、`portfolio_defensive`、`portfolio_offensive`、`scenario_test`。
|
||||
5. 生成 `allocation_memo.md`,说明为什么这两种组合在 2026 年有可执行性。
|
||||
6. 生成 `sources.md`。
|
||||
7. 输出目录:`~/Desktop/multica-fin-bench/case-06/`。
|
||||
|
||||
执行要求:明确列出每个组合的再平衡频率、止损规则和再入场条件。
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
请做“高利率环境下 REIT 投资筛选”任务(中文输出)。
|
||||
|
||||
样本:VNQ、PLD、AMT、EQIX、O、SPG、PSA、DLR。
|
||||
|
||||
任务要求:
|
||||
1. 整理最近三个完整财年的关键指标:FFO/AFFO 增速、杠杆、利息覆盖、债务到期结构、分红覆盖。
|
||||
2. 设计 2026 年三种利率情景(10Y 美债收益率 3.5% / 4.5% / 5.5%),分析估值压力与分红可持续性。
|
||||
3. 给出“持有/观察/回避”分类,并解释最关键的 2-3 个驱动因子。
|
||||
4. 生成 Excel(.xlsx):`reit_raw`、`debt_profile`、`rate_scenarios`、`selection_result`。
|
||||
5. 生成 `reit_investment_note.md`。
|
||||
6. 生成 `sources.md`。
|
||||
7. 输出到:`~/Desktop/multica-fin-bench/case-07/`。
|
||||
|
||||
执行要求:如果数据缺失,必须在表中显式标注 NA,不允许静默跳过。
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
请做“财报质量法证分析”(中文输出)。
|
||||
|
||||
样本:AAPL、MSFT、GOOGL、AMZN、META、NVDA、TSLA、BRK.B、UNH、JPM。
|
||||
时间范围:2023-01-01 到 2025-12-31。
|
||||
|
||||
任务要求:
|
||||
1. 建立财报质量检查框架,至少包含:应计项目质量、经营现金流与净利润匹配度、股权激励稀释、回购与债务关系、一次性项目影响。
|
||||
2. 对每家公司给出 Red/Yellow/Green 评级,并给出可追踪的证据。
|
||||
3. 生成 Excel(.xlsx):`quality_raw`、`forensic_flags`、`rating_summary`、`watchlist_2026`。
|
||||
4. 生成 `forensic_report.md`,总结最值得警惕的 5 个红旗。
|
||||
5. 生成 `sources.md`。
|
||||
6. 输出目录:`~/Desktop/multica-fin-bench/case-08/`。
|
||||
|
||||
执行要求:必须在报告中明确“哪些结论是事实、哪些是推断”。
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
请做“财报后漂移(PEAD)策略可行性研究”(中文输出)。
|
||||
|
||||
研究区间:2023-01-01 到 2025-12-31。
|
||||
样本:请选取至少 30 只美股大中盘(给出选择标准)。
|
||||
|
||||
任务要求:
|
||||
1. 定义一个可执行的 PEAD 信号(例如财报后 1-3 天信息、盈利超预期代理变量或公告后动量代理变量),并说明局限性。
|
||||
2. 对样本进行分组比较(高信号/低信号),分析随后 1 个月与 3 个月表现差异。
|
||||
3. 加入基础风控规则(仓位上限、止损、行业暴露限制),评估策略在 2026 年是否值得小规模试运行。
|
||||
4. 生成 Excel(.xlsx):`universe`、`signal_definition`、`group_performance`、`risk_controls`、`pilot_plan_2026`。
|
||||
5. 生成 `pead_study.md`(包含方法、结果、偏差来源、落地建议)。
|
||||
6. 生成 `sources.md`。
|
||||
7. 输出到:`~/Desktop/multica-fin-bench/case-09/`。
|
||||
|
||||
执行要求:必须给出“失败场景”与“停止试运行”的客观条件。
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
请制作“2026 年 Q2 投资委员会材料包”(中文输出)。
|
||||
|
||||
目标:面向一个美元多资产组合,形成可直接开会使用的投委会文件。
|
||||
|
||||
任务要求:
|
||||
1. 输出一个总览文件 `committee_pack.md`,结构至少包括:宏观判断、权益、利率、信用、商品、组合风险、执行清单。
|
||||
2. 输出一个 Excel(.xlsx)工作簿,至少包含:`macro_dashboard`、`equity_watchlist`、`rates_credit`、`commodity_view`、`portfolio_risk`、`action_tracker`。
|
||||
3. 在 `action_tracker` 中给出 2026 年 Q2 可执行动作,每条动作要有:触发条件、目标仓位变化、风控阈值、复盘时间点。
|
||||
4. 额外输出 `devil_advocate.md`,专门反驳你自己的核心投资观点,至少给 5 条反方论据。
|
||||
5. 额外输出 `sources.md`,列明关键数据来源与日期。
|
||||
6. 所有文件放到新目录:`~/Desktop/multica-fin-bench/case-10/`。
|
||||
|
||||
执行要求:先列计划再执行;最后给“投委会 10 分钟口头汇报提纲”。
|
||||
71
scripts/e2e-finance-benchmark/run.sh
Executable file
71
scripts/e2e-finance-benchmark/run.sh
Executable file
|
|
@ -0,0 +1,71 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
ROOT_DIR="$(cd "${SCRIPT_DIR}/../.." && pwd)"
|
||||
CASES_DIR="${SCRIPT_DIR}/cases"
|
||||
TIMESTAMP="$(date +%Y%m%d-%H%M%S)"
|
||||
OUT_DIR="${ROOT_DIR}/.context/finance-e2e-runs/${TIMESTAMP}"
|
||||
|
||||
# Required environment for agent-driven E2E with web_search/data tools.
|
||||
SMC_DATA_DIR="${SMC_DATA_DIR:-$HOME/.super-multica-e2e}"
|
||||
MULTICA_API_URL="${MULTICA_API_URL:-https://api-dev.copilothub.ai}"
|
||||
PROVIDERS_RAW="${PROVIDERS:-kimi-coding claude-code}"
|
||||
CASE_GLOB="${CASE_GLOB:-case-*.txt}"
|
||||
|
||||
read -r -a PROVIDERS <<< "${PROVIDERS_RAW}"
|
||||
|
||||
mkdir -p "${OUT_DIR}"
|
||||
MANIFEST="${OUT_DIR}/manifest.tsv"
|
||||
printf "timestamp\tprovider\tcase_id\tstatus\tsession_id\tsession_dir\tlog_file\n" > "${MANIFEST}"
|
||||
|
||||
mapfile -t CASE_FILES < <(find "${CASES_DIR}" -maxdepth 1 -type f -name "${CASE_GLOB}" | sort)
|
||||
if [[ ${#CASE_FILES[@]} -eq 0 ]]; then
|
||||
echo "No case files matched ${CASE_GLOB} in ${CASES_DIR}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Output directory: ${OUT_DIR}"
|
||||
echo "Using SMC_DATA_DIR=${SMC_DATA_DIR}"
|
||||
echo "Using MULTICA_API_URL=${MULTICA_API_URL}"
|
||||
echo "Providers: ${PROVIDERS[*]}"
|
||||
echo "Cases: ${#CASE_FILES[@]}"
|
||||
|
||||
total=0
|
||||
for provider in "${PROVIDERS[@]}"; do
|
||||
for case_file in "${CASE_FILES[@]}"; do
|
||||
total=$((total + 1))
|
||||
case_base="$(basename "${case_file}")"
|
||||
case_id="${case_base%.txt}"
|
||||
log_file="${OUT_DIR}/${provider}-${case_id}.log"
|
||||
|
||||
prompt="$(cat "${case_file}")"
|
||||
|
||||
echo
|
||||
echo "[${total}] Running ${case_id} with provider=${provider}"
|
||||
|
||||
status="success"
|
||||
if ! SMC_DATA_DIR="${SMC_DATA_DIR}" \
|
||||
MULTICA_API_URL="${MULTICA_API_URL}" \
|
||||
pnpm multica run --run-log --provider "${provider}" "${prompt}" > "${log_file}" 2>&1; then
|
||||
status="failed"
|
||||
fi
|
||||
|
||||
session_id="$(rg -o "\[session: [^]]+\]" "${log_file}" | tail -n 1 | sed -E 's/\[session: ([^]]+)\]/\1/' || true)"
|
||||
session_dir="$(rg -o "\[session-dir: [^]]+\]" "${log_file}" | tail -n 1 | sed -E 's/\[session-dir: ([^]]+)\]/\1/' || true)"
|
||||
|
||||
printf "%s\t%s\t%s\t%s\t%s\t%s\t%s\n" \
|
||||
"${TIMESTAMP}" \
|
||||
"${provider}" \
|
||||
"${case_id}" \
|
||||
"${status}" \
|
||||
"${session_id}" \
|
||||
"${session_dir}" \
|
||||
"${log_file}" >> "${MANIFEST}"
|
||||
|
||||
echo "status=${status} session=${session_id:-N/A}"
|
||||
done
|
||||
done
|
||||
|
||||
echo
|
||||
echo "Completed. Manifest: ${MANIFEST}"
|
||||
Loading…
Add table
Add a link
Reference in a new issue