fin-generate-idea · git:20260616.8eba436 · 2026-06-16 · sha256 ea3d5327c53003cd

fin-generate-idea git:20260616.8eba436A

Immutable. This exact content is served forever at /api/v1/blob/ea3d5327c53003cd.

---
name: fin-generate-idea
description: 针对经济金融研究方向的创意生成与评估。生成8-12个可发表的研究idea,过滤后在数据可行的情况下进行小规模实证验证,输出排序后的研究想法报告。
argument-hint: [research-field]
---

# 经济金融研究想法生成器

针对研究方向 `$ARGUMENTS` 生成 8-12 个排序研究想法,经过数据可行性筛选后输出推荐名单。

## 流程概览

```
研究方向输入
     ↓
阶段1: 研究领域解析 + 约束提取
     ↓
阶段2: 文献提取 — 使用 MCP 获取高影响力论文
     ↓
阶段3: 缺口分析 — 识别领域内"未完成"的工作
     ↓
阶段4: 想法生成 — 基于文献生成 8-12 个想法
     ↓
阶段5: 【强制】数据可行性筛选 — 对每个想法运行数据源检查
     ↓
阶段6: 过滤标记 — 无数据路径的想法标记"需授权模拟"
     ↓
阶段7: 综合排序 — noverlty × 0.4 + data × 0.3 + publish × 0.3
     ↓
输出: IDEA_REPORT.md
```

## 触发条件

当用户明确要求生成具体研究想法时触发,例如:

- "有什么关于[领域]的研究想法"
- "生成[领域]的研究idea"
- "帮我找[领域]的研究方向"
- "我想研究[主题],有什么新想法"

## 输出文件

```
output/fin-ideas/
├── IDEA_REPORT.md         ← 完整想法报告(8-12个想法,含评分)
├── IDEA_DATA_CHECK.md     ← 数据可行性检查结果
└── IDEA_CANDIDATES.md     ← 精简版(TOP 3-5)
```

## 阶段详解

### 阶段1: 研究领域解析

#### 1.1 解析研究领域

识别研究方向所属的宏观领域:

| 领域 | 核心关键词 | 典型研究问题 |
|------|----------|-------------|
| 绿色金融 | ESG、碳排放、绿色债券、气候风险、绿色信贷 | 绿色政策效果、环境信息披露 |
| 数字金融 | Fintech、数字支付、互联网金融、API银行 | 数字普惠、金融科技赋能 |
| 碳经济学 | 碳交易、碳配额、碳关税、减排激励 | 碳市场效率、政策有效性 |
| 宏观金融 | 货币政策传导、金融周期、系统性风险 | 政策传导机制、金融稳定 |
| 公司金融 | 融资约束、资本结构、公司治理、并购 | 融资决策优化、公司价值 |
| 资产定价 | 因子模型、异常收益、机构投资者 | 定价因子、收益预测 |
| 行为金融 | 投资者情绪、散户行为、羊群效应 | 行为偏差、市场效率 |
| 金融科技 | 区块链、数字货币、开放银行 | 新技术应用、模式创新 |

#### 1.2 提取约束

从用户输入中提取约束条件:

```python
constraints = {
    "target_journal": "JF/JFE/RFS/经济研究/金融研究/...",
    "method_preference": "DID/IV/RDD/机器学习/...",
    "data_preference": "A股/美股/宏观/...",
    "time_range": "2010-2024/特定事件窗口/...",
    "sample_restriction": "创业板/国有企业/...",
}
```

### 阶段2: 文献提取

#### 2.1 MCP 多源检索

**必须按以下顺序执行检索**:

```yaml
# 第1步:NBER 工作论文(优先)
CallMcpTool: user-nber-wp -> search_nber_papers
  query: "[研究领域] + China + empirical"
  year_from: 2023

# 第2步:OpenAlex(250M+论文)
CallMcpTool: user-openalex -> get_openalex_works
  query: "[研究领域] + [核心机制] + China"
  per_page: 30

# 第3步:中文顶刊(A股必查)
CallMcpTool: user-brave-search -> brave_web_search
  query: "经济研究 金融研究 管理世界 [核心关键词]"
  num_results: 15

# 第4步:ArXiv(方法论文)
CallMcpTool: user-arxiv -> semantic_search
  query: "[研究领域] + empirical methods China"
  max_results: 15
```

#### 2.2 高影响力论文筛选

从检索结果中筛选高影响力论文:

| 筛选标准 | 阈值 | 原因 |
|---------|------|------|
| 期刊层次 | JF/JFE/RFS/JME/QJE + 中文顶刊 | 质量保证 |
| 引用量 | 前 20% 或 >50 次引用 | 经时间检验 |
| 发表时间 | 近 5 年为主 | 前沿性 |
| 方法可靠性 | 识别策略清晰 | 可参照 |

#### 2.3 文献结构化提取

对每篇核心文献提取:

```markdown
## 文献卡片

- **标题**: [论文标题]
- **期刊**: [期刊名]
- **年份**: [发表年份]
- **作者**: [作者列表]
- **核心发现**: [1-2句话]
- **方法**: [DID/IV/RDD/...]
- **数据**: [数据集描述]
- **研究缺口**: [从该论文的 limitation 或 future work 中提取]
```

### 阶段3: 缺口分析

#### 3.1 缺口识别框架

使用以下框架系统识别研究缺口:

| 缺口类型 | 描述 | 识别方法 |
|---------|------|---------|
| 理论缺口 | 某理论预测在特定场景未被验证 | 文献中"我们尚不清楚..." |
| 方法缺口 | 某方法在特定场景未被使用 | 方法 vs 市场组合矩阵 |
| 数据缺口 | 某数据集未被用于某研究问题 | 新数据源 vs 研究问题 |
| 场景缺口 | 某发现未在特定市场验证 | 市场 vs 机制组合矩阵 |
| 机制缺口 | 某传导路径未被检验 | 机制链条中的空白 |

#### 3.2 缺口输出模板

```markdown
## 已识别研究缺口

### 缺口 1: [缺口名称]
- **类型**: [理论/方法/数据/场景/机制]
- **描述**: [具体描述]
- **为什么重要**: [理论和实践意义]
- **可行性**: [数据和方法是否可行]

### 缺口 2: [缺口名称]
...
```

### 阶段4: 想法生成

#### 4.1 生成提示词

使用 LLM 生成基于文献的研究想法:

```
你是一名经济金融领域顶级学者。请基于以下文献综述和研究缺口,
生成8-12个可发表的研究想法。

【研究领域】
[领域名称]

【核心文献】
[文献卡片列表]

【已识别的研究缺口】
1. [缺口1]
2. [缺口2]
...

【约束条件】
- 目标期刊: [期刊]
- 偏好方法: [方法]
- 数据偏好: [数据]

【生成要求】
1. 每个想法必须对应一个或多个研究缺口
2. 明确识别策略(DID/IV/RDD/面板/机器学习)
3. 明确所需核心数据
4. 指出边际贡献(理论/方法/数据)
5. 评估发表潜力
6. 基于文献给出"初步信号"(支持假设的已有证据)
```

#### 4.2 想法格式

每个想法必须按以下格式输出:

```markdown
## Idea N: [标题]

### 基本信息
- **研究缺口**: [对应缺口编号]
- **研究问题**: [一句话描述]
- **核心机制**: [因果传导路径]

### 方法设计
- **识别策略**: [方法]
- **关键识别假设**: [假设内容]
- **估计方法**: [模型]

### 数据需求
- **核心数据集**: [数据源]
- **时间范围**: [样本期]
- **关键变量**: [Y, X, 控制变量]

### 边际贡献
- **理论**: [理论贡献]
- **方法**: [方法贡献]
- **数据**: [数据贡献]

### 发表潜力
- **目标期刊**: [期刊]
- **新颖性**: [高/中/低]
- **可行性**: [高/中/低]

### 初步信号
- **文献支持**: [支持假设的已有文献]
- **机制合理性**: [1-5评分]
```

### 阶段5: 数据可行性筛选(强制)

**对每个想法执行数据源检查**

#### 5.1 调用 IdeaDataValidator

```python
from scripts.idea_data_checker import quick_check, IdeaDataValidator

# 准备想法列表
ideas = [
    {
        "id": f"idea_{i}",
        "title": "[想法标题]",
        "description": "[描述]",
        "keywords": "[关键词列表]",
    }
    for i in range(1, 13)
]

# 执行数据可行性检查
report = quick_check(ideas)
```

#### 5.2 筛选逻辑

```python
def filter_ideas_by_feasibility(report: ValidationReport) -> dict:
    """根据数据可行性筛选想法"""

    # 分类
    available = [r for r in report.idea_results
                 if r.feasibility == Feasibility.AVAILABLE]

    partial = [r for r in report.idea_results
               if r.feasibility == Feasibility.PARTIALLY_AVAILABLE]

    gap = [r for r in report.idea_results
           if r.feasibility == Feasibility.DATA_GAP]

    auth = [r for r in report.idea_results
            if r.feasibility == Feasibility.REQUIRES_AUTH]

    return {
        "green": available,      # 可立即推荐
        "yellow": partial,       # 可推进但需补充
        "red": gap,             # 需先补充数据
        "orange": auth,         # 需授权模拟
    }
```

### 阶段6: 用户授权决策

**橙色标签的想法需要用户明确授权才能进入推荐名单**

#### 6.1 展示授权请求

```
⚠️ 以下想法需要您授权使用模拟数据:

想法 9: [标题]
- 所需数据: [数据描述]
- 缺失原因: [原因]
- 授权后果: 研究结果不能用于正式发表

想法 10: [标题]
...

──────────────────────────────────────────────
请选择:
  (1) 授权模拟 — 使用模拟数据继续(结果不能发表)
  (2) 跳过模拟想法 — 仅推荐数据可行的想法
  (3) 补充数据 — 稍后补充真实数据后再评估
```

#### 6.2 标记处理

```python
# 用户授权后,标记为可推荐
authorized_ideas = [idea for idea in ideas if idea.get("authorized_synthetic")]

# 未授权的想法标记为"需授权"
for idea in ideas:
    if idea.get("feasibility") == Feasibility.REQUIRES_AUTH and not idea.get("authorized_synthetic"):
        idea["status"] = "REQUIRES_AUTH"
        idea["recommendation"] = "需用户授权使用模拟数据"
```

### 阶段7: 综合排序

#### 7.1 评分公式

```
综合评分 = 新颖性评分 × 0.4 + 数据可行性评分 × 0.3 + 发表潜力评分 × 0.3
```

| 维度 | 权重 | 评分标准 |
|-----|-----|---------|
| 新颖性 | 40% | 高=10, 中=7, 低=4 |
| 数据可行性 | 30% | 可行=10, 部分=6, 缺口=0, 模拟=3 |
| 发表潜力 | 30% | 顶刊=10, 一区=8, 二区=6 |

#### 7.2 排序输出

```python
def rank_ideas(ideas: list[dict], report: ValidationReport) -> list[dict]:
    """综合排序想法"""

    # 构建评分查找表
    score_map = {r.idea["id"]: r.feasibility_score for r in report.idea_results}

    ranked = []
    for idea in ideas:
        novelty = {"high": 10, "medium": 7, "low": 4}.get(idea.get("novelty"), 5)
        data_score = score_map.get(idea["id"], 0) * 10  # 转换为10分制
        publish = {"top": 10, "first": 8, "second": 6}.get(idea.get("journal_tier"), 5)

        composite = novelty * 0.4 + data_score * 0.3 + publish * 0.3

        idea["composite_score"] = round(composite, 1)
        ranked.append(idea)

    return sorted(ranked, key=lambda x: x["composite_score"], reverse=True)
```

## 输出格式

### IDEA_REPORT.md 模板

```markdown
# 研究想法报告

**研究方向**: [方向]
**生成日期**: [日期]
**想法总数**: N个

## 执行摘要

[3-5句话总结推荐想法]

## TOP 3 推荐想法

### 想法 1: [标题] ⭐⭐⭐
**综合评分**: X.X/10 | **数据可行性**: 🟢 可行

| 维度 | 评分 |
|------|------|
| 新颖性 | X/10 |
| 数据可行性 | X/10 |
| 发表潜力 | X/10 |
| **综合** | **X.X/10** |

- **研究问题**: [一句话]
- **研究缺口**: [对应缺口]
- **识别策略**: [方法]
- **核心数据**: [数据源]
- **边际贡献**: [创新点]
- **文献支持**: [支持假设的已有文献]
- **初步信号**: [支持/不支持/待验证]

---

### 想法 2: [标题] ⭐⭐
**综合评分**: X.X/10 | **数据可行性**: 🟡 部分可行

| 维度 | 评分 |
|------|------|
| 新颖性 | X/10 |
| 数据可行性 | X/10 |
| 发表潜力 | X/10 |
| **综合** | **X.X/10** |

- **研究问题**: [一句话]
- **研究缺口**: [对应缺口]
- **识别策略**: [方法]
- **核心数据**: [数据源]
- **边际贡献**: [创新点]
- **数据缺口**: [缺失的数据]
- **补充方案**: [如何获取]

---

### 想法 3: [标题] ⭐
**综合评分**: X.X/10 | **数据可行性**: 🟡 部分可行

[同上结构]

---

## 所有想法列表

| 排名 | 想法 | 综合评分 | 新颖性 | 数据可行 | 发表潜力 | 状态 |
|------|------|---------|--------|---------|---------|------|
| 1 | 想法1 | 9.2 | 高 | 🟢 可行 | 顶刊 | 推荐 |
| 2 | 想法2 | 8.5 | 高 | 🟡 部分 | 一区 | 推荐 |
| 3 | 想法3 | 8.1 | 中 | 🟢 可行 | 顶刊 | 推荐 |
| 4 | 想法4 | 7.2 | 中 | 🟡 部分 | 一区 | 待补充 |
| 5 | 想法5 | 6.8 | 高 | 🔴 缺口 | 一区 | 待数据 |
| 6 | 想法6 | 5.5 | 中 | 🟠 模拟 | 二区 | 需授权 |
| ... | ... | ... | ... | ... | ... | ... |

## 数据需求汇总

### 🟢 可直接使用
- [数据源]: [描述]

### 🟡 需补充
- [数据源]: [描述] → [如何获取]

### 🔴 需获取
- [数据源]: [描述] → [获取方式]

## 下一步

1. 选择一个想法进入新颖性验证(fin-novelty-check)
2. 或选择多个想法进入实验设计(fin-experiment-design)
3. 或返回补充数据后再评估

## 方法论提示

[针对本领域的常用识别策略建议]
```

## IdeaDataValidator 快速参考

### 一行调用

```python
from scripts.idea_data_checker import quick_check

ideas = [
    {"id": "1", "title": "想法1", "description": "描述", "keywords": ["关键词"]},
    # ...
]

report = quick_check(ideas)
```

### 逐个验证

```python
from scripts.idea_data_checker import IdeaDataValidator

validator = IdeaDataValidator(ideas)
report = validator.validate_all()
validator.print_report(report)

# 访问结果
for result in report.idea_results:
    print(f"{result.idea['title']}: {result.feasibility.value}")
    print(f"  Score: {result.feasibility_score:.1f}")
    print(f"  Recommendation: {result.recommendation}")
```

### 解读可行性状态

| Feasibility | 含义 | 颜色 | 建议操作 |
|-------------|-----|-----|---------|
| `AVAILABLE` | 数据完全可行 | 🟢 | 可立即推荐 |
| `PARTIALLY_AVAILABLE` | 部分数据缺失 | 🟡 | 可推进但需补充 |
| `DATA_GAP` | 数据缺口严重 | 🔴 | 需先获取数据 |
| `REQUIRES_AUTH` | 需授权模拟 | 🟠 | 需用户明确授权 |

## MCP 工具快速索引

| 需求 | MCP Server | 工具 | 优先级 |
|------|------------|------|--------|
| NBER 工作论文 | `user-nber-wp` | `search_nber_papers` | 高 |
| OpenAlex 论文 | `user-openalex` | `get_openalex_works` | 高 |
| ArXiv 论文 | `user-arxiv` | `semantic_search` | 中 |
| 中文文献 | `user-brave-search` | `brave_web_search` | 高 |
| 论文全文 | `user-context7` | `get_context7_by_query` | 中 |
| 研报 | `user-eastmoney-reports` | `get_research_report` | 低 |

## 关键约束

1. **每个想法必须基于文献**:不能凭空生成想法
2. **数据可行性是硬过滤**:无数据路径的想法不进推荐名单
3. **模拟数据需要授权**:未授权的模拟想法必须标记
4. **评分必须透明**:展示所有维度的评分和权重
5. **中文顶刊不可忽视**:A股研究中中文文献是重要先例来源
6. **新颖性评估必须具体**:不能只说"新颖",要指出具体增量贡献

## 快速命令

```bash
# 完整流程
python scripts/research_framework/pipeline.py \
    --topic "研究方向" \
    --mode generate_idea \
    --output output/fin-ideas/

# 仅想法生成
python scripts/research_framework/pipeline.py \
    --topic "研究方向" \
    --mode generate_idea \
    --skip_validation

# 仅数据验证
python scripts/idea_data_checker.py \
    --ideas-file output/fin-ideas/IDEA_REPORT.md
```