deepresearch-flow 0.4.1__py3-none-any.whl → 0.5.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- deepresearch_flow/paper/db.py +34 -0
- deepresearch_flow/paper/db_ops.py +21 -7
- deepresearch_flow/paper/prompt_templates/deep_read_phi_system.j2 +6 -0
- deepresearch_flow/paper/prompt_templates/deep_read_phi_user.j2 +391 -0
- deepresearch_flow/paper/prompt_templates/eight_questions_phi_system.j2 +6 -0
- deepresearch_flow/paper/prompt_templates/eight_questions_phi_user.j2 +133 -0
- deepresearch_flow/paper/prompt_templates/simple_phi_system.j2 +6 -0
- deepresearch_flow/paper/prompt_templates/simple_phi_user.j2 +31 -0
- deepresearch_flow/paper/schemas/deep_read_phi_schema.json +30 -0
- deepresearch_flow/paper/template_registry.py +39 -0
- deepresearch_flow/paper/templates/deep_read_phi.md.j2 +40 -0
- deepresearch_flow/paper/web/app.py +106 -1
- deepresearch_flow/paper/web/constants.py +1 -0
- deepresearch_flow/paper/web/handlers/__init__.py +2 -1
- deepresearch_flow/paper/web/handlers/api.py +55 -0
- deepresearch_flow/paper/web/handlers/pages.py +105 -25
- deepresearch_flow/paper/web/markdown.py +230 -4
- deepresearch_flow/paper/web/pdfjs/web/viewer.html +57 -5
- deepresearch_flow/paper/web/pdfjs/web/viewer.js +5 -1
- deepresearch_flow/paper/web/static/css/main.css +8 -1
- deepresearch_flow/paper/web/static/js/detail.js +527 -124
- deepresearch_flow/paper/web/static/js/outline.js +48 -34
- deepresearch_flow/paper/web/static_assets.py +289 -0
- deepresearch_flow/paper/web/templates/detail.html +52 -66
- deepresearch_flow/paper/web/templates.py +7 -4
- deepresearch_flow/paper/web/text.py +8 -4
- deepresearch_flow/recognize/organize.py +9 -12
- deepresearch_flow/translator/fixers.py +15 -0
- {deepresearch_flow-0.4.1.dist-info → deepresearch_flow-0.5.1.dist-info}/METADATA +62 -2
- {deepresearch_flow-0.4.1.dist-info → deepresearch_flow-0.5.1.dist-info}/RECORD +34 -25
- {deepresearch_flow-0.4.1.dist-info → deepresearch_flow-0.5.1.dist-info}/WHEEL +0 -0
- {deepresearch_flow-0.4.1.dist-info → deepresearch_flow-0.5.1.dist-info}/entry_points.txt +0 -0
- {deepresearch_flow-0.4.1.dist-info → deepresearch_flow-0.5.1.dist-info}/licenses/LICENSE +0 -0
- {deepresearch_flow-0.4.1.dist-info → deepresearch_flow-0.5.1.dist-info}/top_level.txt +0 -0
deepresearch_flow/paper/db.py
CHANGED
|
@@ -600,6 +600,32 @@ def register_db_commands(db_group: click.Group) -> None:
|
|
|
600
600
|
)
|
|
601
601
|
@click.option("--cache-dir", "cache_dir", default=None, help="Cache directory for merged inputs")
|
|
602
602
|
@click.option("--no-cache", "no_cache", is_flag=True, help="Disable cache for db serve")
|
|
603
|
+
@click.option(
|
|
604
|
+
"--static-base-url",
|
|
605
|
+
"static_base_url",
|
|
606
|
+
default=None,
|
|
607
|
+
help="Static asset base URL (e.g. https://static.example.com)",
|
|
608
|
+
)
|
|
609
|
+
@click.option(
|
|
610
|
+
"--static-mode",
|
|
611
|
+
"static_mode",
|
|
612
|
+
type=click.Choice(["auto", "dev", "prod"]),
|
|
613
|
+
default="auto",
|
|
614
|
+
show_default=True,
|
|
615
|
+
help="Static asset mode (dev uses local assets, prod uses static base URL)",
|
|
616
|
+
)
|
|
617
|
+
@click.option(
|
|
618
|
+
"--static-export-dir",
|
|
619
|
+
"static_export_dir",
|
|
620
|
+
default=None,
|
|
621
|
+
help="Optional export directory for hashed static assets",
|
|
622
|
+
)
|
|
623
|
+
@click.option(
|
|
624
|
+
"--pdfjs-cdn-base-url",
|
|
625
|
+
"pdfjs_cdn_base_url",
|
|
626
|
+
default=None,
|
|
627
|
+
help="PDF.js CDN base URL (defaults to jsDelivr)",
|
|
628
|
+
)
|
|
603
629
|
@click.option("--host", default="127.0.0.1", show_default=True, help="Bind host")
|
|
604
630
|
@click.option("--port", default=8000, type=int, show_default=True, help="Bind port")
|
|
605
631
|
@click.option(
|
|
@@ -617,6 +643,10 @@ def register_db_commands(db_group: click.Group) -> None:
|
|
|
617
643
|
pdf_roots: tuple[str, ...],
|
|
618
644
|
cache_dir: str | None,
|
|
619
645
|
no_cache: bool,
|
|
646
|
+
static_base_url: str | None,
|
|
647
|
+
static_mode: str,
|
|
648
|
+
static_export_dir: str | None,
|
|
649
|
+
pdfjs_cdn_base_url: str | None,
|
|
620
650
|
host: str,
|
|
621
651
|
port: int,
|
|
622
652
|
fallback_language: str,
|
|
@@ -635,6 +665,10 @@ def register_db_commands(db_group: click.Group) -> None:
|
|
|
635
665
|
pdf_roots=[Path(root) for root in pdf_roots],
|
|
636
666
|
cache_dir=Path(cache_dir) if cache_dir else None,
|
|
637
667
|
use_cache=not no_cache,
|
|
668
|
+
static_base_url=static_base_url,
|
|
669
|
+
static_mode=static_mode,
|
|
670
|
+
static_export_dir=Path(static_export_dir) if static_export_dir else None,
|
|
671
|
+
pdfjs_cdn_base_url=pdfjs_cdn_base_url,
|
|
638
672
|
)
|
|
639
673
|
except Exception as exc:
|
|
640
674
|
raise click.ClickException(str(exc)) from exc
|
|
@@ -1193,6 +1193,7 @@ def _merge_paper_inputs(inputs: list[dict[str, Any]]) -> list[dict[str, Any]]:
|
|
|
1193
1193
|
merged: list[dict[str, Any]] = []
|
|
1194
1194
|
threshold = 0.95
|
|
1195
1195
|
prefix_len = 5
|
|
1196
|
+
source_hash_index: dict[str, int] = {}
|
|
1196
1197
|
bibtex_exact: dict[str, set[int]] = {}
|
|
1197
1198
|
bibtex_prefix: dict[str, set[int]] = {}
|
|
1198
1199
|
paper_exact: dict[str, set[int]] = {}
|
|
@@ -1226,16 +1227,22 @@ def _merge_paper_inputs(inputs: list[dict[str, Any]]) -> list[dict[str, Any]]:
|
|
|
1226
1227
|
for paper in papers:
|
|
1227
1228
|
if not isinstance(paper, dict):
|
|
1228
1229
|
raise ValueError("Input papers must be objects")
|
|
1230
|
+
source_hash = paper.get("source_hash")
|
|
1231
|
+
source_hash_key = str(source_hash) if source_hash else None
|
|
1229
1232
|
bib_title = _extract_bibtex_title(paper)
|
|
1230
1233
|
paper_title = _extract_paper_title(paper)
|
|
1231
1234
|
match = None
|
|
1232
1235
|
match_idx = None
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1236
|
+
if source_hash_key and source_hash_key in source_hash_index:
|
|
1237
|
+
match_idx = source_hash_index[source_hash_key]
|
|
1238
|
+
match = merged[match_idx]
|
|
1239
|
+
else:
|
|
1240
|
+
for idx in candidate_ids(bib_title, paper_title):
|
|
1241
|
+
candidate = merged[idx]
|
|
1242
|
+
if _titles_match(candidate, paper, threshold=threshold):
|
|
1243
|
+
match = candidate
|
|
1244
|
+
match_idx = idx
|
|
1245
|
+
break
|
|
1239
1246
|
if match is None:
|
|
1240
1247
|
group = {
|
|
1241
1248
|
"templates": {template_tag: paper},
|
|
@@ -1244,6 +1251,8 @@ def _merge_paper_inputs(inputs: list[dict[str, Any]]) -> list[dict[str, Any]]:
|
|
|
1244
1251
|
_add_merge_titles(group, paper)
|
|
1245
1252
|
merged.append(group)
|
|
1246
1253
|
group_idx = len(merged) - 1
|
|
1254
|
+
if source_hash_key:
|
|
1255
|
+
source_hash_index[source_hash_key] = group_idx
|
|
1247
1256
|
if bib_title:
|
|
1248
1257
|
add_index(bib_title, bibtex_exact, bibtex_prefix, group_idx)
|
|
1249
1258
|
if paper_title:
|
|
@@ -1256,15 +1265,20 @@ def _merge_paper_inputs(inputs: list[dict[str, Any]]) -> list[dict[str, Any]]:
|
|
|
1256
1265
|
order.append(template_tag)
|
|
1257
1266
|
_add_merge_titles(match, paper)
|
|
1258
1267
|
if match_idx is not None:
|
|
1268
|
+
if source_hash_key:
|
|
1269
|
+
source_hash_index[source_hash_key] = match_idx
|
|
1259
1270
|
if bib_title:
|
|
1260
1271
|
add_index(bib_title, bibtex_exact, bibtex_prefix, match_idx)
|
|
1261
1272
|
if paper_title:
|
|
1262
1273
|
add_index(paper_title, paper_exact, paper_prefix, match_idx)
|
|
1263
1274
|
|
|
1275
|
+
preferred_defaults = ("simple", "simple_phi")
|
|
1264
1276
|
for group in merged:
|
|
1265
1277
|
templates = group.get("templates") or {}
|
|
1266
1278
|
order = group.get("template_order") or list(templates.keys())
|
|
1267
|
-
default_tag =
|
|
1279
|
+
default_tag = next((tag for tag in preferred_defaults if tag in order), None)
|
|
1280
|
+
if default_tag is None:
|
|
1281
|
+
default_tag = order[0] if order else None
|
|
1268
1282
|
group["default_template"] = default_tag
|
|
1269
1283
|
if default_tag and default_tag in templates:
|
|
1270
1284
|
base = templates[default_tag]
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
You are an information extraction assistant.
|
|
2
|
+
Output language: {{ output_language }}.
|
|
3
|
+
Extract structured data from the provided markdown document.
|
|
4
|
+
Return ONLY valid JSON that conforms to the given JSON Schema.
|
|
5
|
+
The field "paper_authors" MUST be an array of strings (each author name as one item).
|
|
6
|
+
If a field is unknown, use an empty string or empty list per schema.
|
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
Template: deep_read_phi
|
|
2
|
+
|
|
3
|
+
{% if stage_name %}
|
|
4
|
+
当前阶段:{{ stage_name }}。
|
|
5
|
+
请仅输出 JSON,包含字段:{{ stage_fields | join(", ") }}。
|
|
6
|
+
输出语言:{{ output_language }}。请使用该语言输出(zh 时使用中文,保留必要英文术语)。
|
|
7
|
+
如需引用此前结果,可参考以下已完成模块(JSON):{{ previous_outputs }}
|
|
8
|
+
{% else %}
|
|
9
|
+
注意:本工具是单次输出。请一次性完成 M1..M6,并填入 JSON 字段 module_m1..module_m6。
|
|
10
|
+
每个模块字段内部使用 Markdown 编排(标题、列表等)。
|
|
11
|
+
禁止第一人称(不出现“我/我们/本人”)。
|
|
12
|
+
关键结论需要注明来自论文的定位(章节/图/表/公式编号)。
|
|
13
|
+
每轮末尾要求输出的三行仍需保留,但不要中途停止输出。
|
|
14
|
+
输出语言:{{ output_language }}。请使用该语言输出(zh 时使用中文,保留必要英文术语)。
|
|
15
|
+
{% endif %}
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# 通用哲学论文阅读器 Prompt(6轮|Three-Pass融合|C1~C7融合|审稿式Checklist|Exhibit Mining|Mermaid避坑|M1产出markmap)
|
|
20
|
+
|
|
21
|
+
你是一个用于“精读哲学/伦理学论文”的高级语言模型。目标是把一篇论文变成可复现、可检查、可引用的结构化成果:争点 → 概念 → 论题 → 论证链 → 反对意见 → 回应 → 评价 → 可直接写作输出。
|
|
22
|
+
外层严格 6 轮输出;每轮只输出该轮模块内容。
|
|
23
|
+
|
|
24
|
+
========================
|
|
25
|
+
0) 会话配置(用户可填;缺失则用默认)
|
|
26
|
+
========================
|
|
27
|
+
【论文材料】
|
|
28
|
+
- PDF或正文:{已提供/未提供}
|
|
29
|
+
- 是否有页码/小节编号:{有/无}
|
|
30
|
+
- 论文题目/作者/年份/出处(若已知):
|
|
31
|
+
|
|
32
|
+
【用户目标】
|
|
33
|
+
- 目标(多选):快速理解 / 写综述 / 写书评 / 课堂讨论 / 写 rebuttal / 做研究延伸 / 考试
|
|
34
|
+
- 用户背景:对该领域熟悉度(0-5);熟悉的传统(功利/康德/德性/契约/建构/实在论/诠释学等)
|
|
35
|
+
|
|
36
|
+
【输出偏好】
|
|
37
|
+
- 输出语言:中文(保留必要英文术语)
|
|
38
|
+
- 禁止第一人称:是(默认)
|
|
39
|
+
- 引用定位粒度:至少到小节(例如 Sect. 5.2);若能给页码则给页码
|
|
40
|
+
- 是否需要联网核验:默认关闭;仅在用户明确要求“核对出版信息/引文/对手观点转述”等时开启
|
|
41
|
+
- MERMAID_MODE:safe(默认)/ full
|
|
42
|
+
- safe:优先稳定不报错(牺牲花哨)
|
|
43
|
+
- full:允许边标签/更复杂形状(但更可能报错)
|
|
44
|
+
|
|
45
|
+
========================
|
|
46
|
+
1) 总体硬约束(必须遵守)
|
|
47
|
+
========================
|
|
48
|
+
(1) 全程中文;必要英文术语/短引除外。
|
|
49
|
+
(2) 禁止第一人称:不出现“我/我们/本人”。
|
|
50
|
+
(3) 作者-评估分离:所有关键点都必须拆成两块:
|
|
51
|
+
- 【作者文本】只写作者明确承诺的内容(允许短引,但每段≤25词/句)。
|
|
52
|
+
- 【分析与评估】才允许补隐含前提、提出反例、比较流派、给批判与建议。
|
|
53
|
+
(4) 证据定位:每条关键定义/关键主张/关键论证节点都必须给定位(小节+页码若可得)。
|
|
54
|
+
- 若无页码/小节编号:用“段落锚点”定位(摘取该段开头8-12个词作为锚点)并标【锚点定位】。
|
|
55
|
+
- 若无法定位:标【未定位】并说明原因(材料缺失/无目录/扫描质量等)。
|
|
56
|
+
(5) 不确定性标注:凡是原文未明说、只能合理推断的内容必须标【推测】;无法核验标【证据不足】。
|
|
57
|
+
(6) 每轮末尾必须输出三行:
|
|
58
|
+
【已完成模块】…
|
|
59
|
+
【下一轮将输出】…
|
|
60
|
+
【需要用户提供/确认的输入(如有)】…
|
|
61
|
+
(7) 每轮必须至少输出 1 张图:
|
|
62
|
+
- M1 必须输出 1 个 markmap(论文大纲脑图),且建议再输出 1 个 Mermaid(结构或证据流)。
|
|
63
|
+
- M2~M6 必须输出 Mermaid(按 MERMAID_MODE 规则)。
|
|
64
|
+
|
|
65
|
+
========================
|
|
66
|
+
2) Mermaid 中文易报错避坑规范(强制)
|
|
67
|
+
========================
|
|
68
|
+
默认使用 MERMAID_MODE=safe。除非用户明确要求 full,否则一律按 safe 输出。
|
|
69
|
+
|
|
70
|
+
【共同规则(safe与full都必须)】
|
|
71
|
+
- 节点 ID 必须只用 ASCII:A1, N2, P3, O4, R5…(禁止中文/空格/连字符-)
|
|
72
|
+
- 节点文字放在 [] 中:A1[这里写中文标签](不要把中文写进ID)
|
|
73
|
+
- 标签里避免以下字符(常见导致解析失败或跨渲染器不兼容):
|
|
74
|
+
- 英文双引号 " 、单引号 ' 、反引号 ` 、竖线 | 、花括号 {} 、尖括号 <> 、方括号嵌套 [[]]
|
|
75
|
+
- 过长的括号对 ()()以及在标签里出现未配对符号
|
|
76
|
+
- safe 模式下:默认不写“边上的文字标签”,即不使用 A -- 文本 --> B(兼容性最好)
|
|
77
|
+
- 若必须表达关系类型:优先用“节点标签短词”而不是“边标签”
|
|
78
|
+
- 每张 Mermaid 图必须附“图例 + 至少3个节点定位”(定位写在图外的普通文本中)
|
|
79
|
+
|
|
80
|
+
【safe 模式模板(推荐)】
|
|
81
|
+
- 只用 flowchart TB/LR/TD
|
|
82
|
+
- 只用 --> 和 -.-> 和 ==> 三种边
|
|
83
|
+
- 不用边标签,不用引号,不用特殊形状
|
|
84
|
+
|
|
85
|
+
【full 模式(用户显式要求才用)】
|
|
86
|
+
- 可以用边标签,但边标签建议用英文或简短拼音,避免中文导致渲染器报错
|
|
87
|
+
- 可以用更多形状,但仍禁止把中文塞进节点ID
|
|
88
|
+
|
|
89
|
+
========================
|
|
90
|
+
3) “证据载体”抽取:Exhibit Mining(哲学版图表挖掘)
|
|
91
|
+
========================
|
|
92
|
+
由于哲学论文往往没有图表,证据主要在文本里。定义 Exhibit(证据载体)如下:
|
|
93
|
+
- 定义句/工作定义/必要充分条件
|
|
94
|
+
- 核心主张(thesis / sub-thesis)
|
|
95
|
+
- 关键论证步骤(前提、桥接原则、推理跳步)
|
|
96
|
+
- 思想实验/反例/案例判断
|
|
97
|
+
- 对手观点的转述段(尤其是被批评者)
|
|
98
|
+
- 反对意见(objection)与作者回应(reply)
|
|
99
|
+
每个 Exhibit 都必须有:ID、类型、位置定位、原文短引(可选但推荐)、它支撑/攻击的主张节点。
|
|
100
|
+
|
|
101
|
+
========================
|
|
102
|
+
4) 六轮模块(每轮只做一轮;但每轮内部很“厚”)
|
|
103
|
+
========================
|
|
104
|
+
|
|
105
|
+
------------------------------------------------------------
|
|
106
|
+
M1:对齐目标 + 输入校验 + 论文地图 + Exhibit全量索引 + markmap大纲脑图
|
|
107
|
+
------------------------------------------------------------
|
|
108
|
+
【本轮目的】
|
|
109
|
+
- 对齐:读这篇论文要达成什么(理解/综述/书评/课堂讨论/研究延伸)
|
|
110
|
+
- 校验:材料是否足够支撑“可定位引用”
|
|
111
|
+
- 建图:先把论文结构与证据载体全量索引出来(不评价先索引)
|
|
112
|
+
- 产出:markmap 大纲脑图(强制)
|
|
113
|
+
|
|
114
|
+
【必须执行步骤(按顺序)】
|
|
115
|
+
Step 1:从摘要/引言开头与结论段提取:
|
|
116
|
+
- 争点问题(debate question)一句话
|
|
117
|
+
- 主论题(thesis)一句话【暂定】
|
|
118
|
+
- 论文类型初判(规范伦理/元伦理/认识论/方法论/概念工程/历史诠释等)+ 依据定位
|
|
119
|
+
Step 2:输出“材料可复现性检查”:
|
|
120
|
+
- 是否有页码/小节编号;若无,声明将使用【锚点定位】
|
|
121
|
+
Step 3:全量索引论文结构(章节→子章节→该节任务):
|
|
122
|
+
- 只写该节做什么:提出定义/推进论证/处理反驳/比较对手/收束结论
|
|
123
|
+
Step 4:Exhibit 全量索引:
|
|
124
|
+
- 扫全文列出 E1..En
|
|
125
|
+
- 每条包含:ID、类型、位置定位、绑定主张(写成可检验句)
|
|
126
|
+
Step 5:输出阅读路线:
|
|
127
|
+
- 哪些小节最关键(Top 5),哪些可略读(并说明理由)
|
|
128
|
+
|
|
129
|
+
【本轮输出结构(强制三层)】
|
|
130
|
+
- 浅层:
|
|
131
|
+
- 【作者文本】争点与主论题【暂定】(带定位)
|
|
132
|
+
- 【分析与评估】这篇属于哪类哲学写作、读它的正确姿势(不下结论)
|
|
133
|
+
- 中层:
|
|
134
|
+
- 论文结构索引表(全量)
|
|
135
|
+
- Exhibit 全量索引表(全量)
|
|
136
|
+
- 深层:
|
|
137
|
+
- 阅读陷阱预警(至少3条:概念多义/推理跳步/稻草人风险/关键前提争议等)
|
|
138
|
+
- 需要用户确认的目标/输出偏好(若配置缺失)
|
|
139
|
+
|
|
140
|
+
【必须输出:markmap 论文大纲脑图(强制)】
|
|
141
|
+
```markmap
|
|
142
|
+
# 论文标题(若未知则写“未提供标题”)
|
|
143
|
+
## 争点(Debate Question)
|
|
144
|
+
## 主论题(Thesis,暂定)
|
|
145
|
+
## 结构(按章节/小节)
|
|
146
|
+
### Sect. 1:……
|
|
147
|
+
### Sect. 2:……
|
|
148
|
+
## 关键证据载体(Exhibits)
|
|
149
|
+
### E1(定义/主张/思想实验…)
|
|
150
|
+
### E2 …
|
|
151
|
+
## 读法路线
|
|
152
|
+
### 必读(Top 5小节)
|
|
153
|
+
### 可略读
|
|
154
|
+
## 风险提示
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
【建议再输出 1 张 Mermaid(safe)用于结构树(可选但推荐)】
|
|
158
|
+
|
|
159
|
+
```mermaid
|
|
160
|
+
flowchart TB
|
|
161
|
+
A1[引言 争点与主论题] --> A2[核心区 定义与论证]
|
|
162
|
+
A2 --> A3[反对意见与回应]
|
|
163
|
+
A3 --> A4[结论 贡献与局限]
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
图例 + 至少3个节点定位
|
|
167
|
+
|
|
168
|
+
轮末尾三行并停止:
|
|
169
|
+
【已完成模块】M1
|
|
170
|
+
【下一轮将输出】M2 第一遍鸟瞰 + Exhibit客观打分排序
|
|
171
|
+
【需要用户提供/确认的输入(如有)】(无则写“无”)
|
|
172
|
+
|
|
173
|
+
M2:第一遍鸟瞰(Three-Pass第1遍)+ C1/C6/C7折叠 + Exhibit打分(H2精神)
|
|
174
|
+
|
|
175
|
+
【本轮目的】
|
|
176
|
+
用“5-10分钟风格”回答:这篇在争什么、贡献是什么、清晰度怎样、值不值得深读。
|
|
177
|
+
同时把 Exhibit 做客观重要性打分并排序,确定后续深读焦点。
|
|
178
|
+
|
|
179
|
+
【必须产出五件套(哲学版)】
|
|
180
|
+
类别(论文类型)+ 依据定位。
|
|
181
|
+
上下文:在回应哪类批评/争论(只基于文中线索;超出则【推测】)。
|
|
182
|
+
正确性直觉检查:关键前提是否看起来站得住(只初筛)。
|
|
183
|
+
贡献:3-5条(可检验表达,每条定位)。
|
|
184
|
+
清晰度:定义是否清楚、论证是否线性、对手是否被公平呈现。
|
|
185
|
+
|
|
186
|
+
【必须回答(融合C1/C6/C7)】
|
|
187
|
+
争点问题句式化。
|
|
188
|
+
忠实摘要(150-200字)+ 5条要点(每条定位)。
|
|
189
|
+
阅读建议:新手/写综述/写书评各应读哪些小节。
|
|
190
|
+
|
|
191
|
+
【必须完成 Exhibit 客观打分(H2精神)并排序】
|
|
192
|
+
对每个 Exhibit 按同一规则打分 0-10:
|
|
193
|
+
- 贡献中心度(0-3)
|
|
194
|
+
- 支撑力度(0-3)
|
|
195
|
+
- 写作复用价值(0-2)
|
|
196
|
+
- 信息密度(0-1)
|
|
197
|
+
- 误读风险(-0-1)
|
|
198
|
+
输出:排序清单 + Top 5。
|
|
199
|
+
|
|
200
|
+
【必须输出 Mermaid:争点→论题→贡献/风险(safe)】
|
|
201
|
+
|
|
202
|
+
```mermaid
|
|
203
|
+
flowchart LR
|
|
204
|
+
Q1[争点问题] --> T1[主论题]
|
|
205
|
+
T1 --> K1[贡献1]
|
|
206
|
+
T1 --> K2[贡献2]
|
|
207
|
+
T1 -.-> R1[风险1]
|
|
208
|
+
T1 -.-> R2[风险2]
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
图例 + 至少3个节点定位(Q1/T1/K1)。
|
|
212
|
+
|
|
213
|
+
轮末尾:
|
|
214
|
+
【已完成模块】M2
|
|
215
|
+
【下一轮将输出】M3 概念与术语工程 + 辩论谱系(相关工作哲学版)
|
|
216
|
+
【需要用户提供/确认的输入(如有)】(无则写“无”)
|
|
217
|
+
|
|
218
|
+
M3:概念与术语工程 + 辩论谱系(融合术语表F + 相关工作C2哲学版)
|
|
219
|
+
|
|
220
|
+
【本轮目的】
|
|
221
|
+
把概念钉死:术语表、概念依赖、概念滑移风险。
|
|
222
|
+
在“辩论地图”里定位作者:最强对手/最相近路线/正交路线(只基于论文明确提及;缺失标【证据不足】)。
|
|
223
|
+
|
|
224
|
+
【必须执行步骤】
|
|
225
|
+
Step 1:抽取 12-25 个关键术语(按重要性排序)。
|
|
226
|
+
Step 2:每个术语输出四件套:
|
|
227
|
+
- 定义(原文转述+定位)
|
|
228
|
+
- 功能(它在论证里连接哪些节点)
|
|
229
|
+
- 混淆项(作者是否区分)
|
|
230
|
+
- 稳定性:稳定/【滑移风险】(给证据定位)
|
|
231
|
+
Step 3:输出“概念依赖图”(哪些概念依赖哪些定义/区分)。
|
|
232
|
+
Step 4:输出“辩论谱系三分法”(哲学版相关工作):
|
|
233
|
+
- 最强对手观点(steelman;若论文没展开则标【推测】)
|
|
234
|
+
- 最相近路线(方法或目标相近)
|
|
235
|
+
- 正交路线(换框架解决同争点)
|
|
236
|
+
注意:只能基于论文明确提到的人名/学派/文献;超出标【证据不足】。
|
|
237
|
+
|
|
238
|
+
【必须输出 Mermaid:概念依赖图(safe)】
|
|
239
|
+
|
|
240
|
+
```mermaid
|
|
241
|
+
flowchart LR
|
|
242
|
+
C1[核心概念1] ==> C3[核心概念3]
|
|
243
|
+
C2[核心概念2] ==> C3
|
|
244
|
+
C3 ==> T1[主论题相关]
|
|
245
|
+
C4[滑移风险概念] -.-> T1
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
图例 + 至少3个依赖关系定位。
|
|
249
|
+
|
|
250
|
+
轮末尾:
|
|
251
|
+
【已完成模块】M3
|
|
252
|
+
【下一轮将输出】M4 论证重建(Argument Map)+ Top Exhibits 深读(上半)
|
|
253
|
+
【需要用户提供/确认的输入(如有)】(无则写“无”)
|
|
254
|
+
|
|
255
|
+
M4:论证重建(Three-Pass第2遍核心)+ Argument Map + Top Exhibits 深读(上半)
|
|
256
|
+
|
|
257
|
+
【本轮目的】
|
|
258
|
+
把论文从线性叙述变成“可检查的论证结构”:主结论→子结论→前提→桥接原则→推理类型。
|
|
259
|
+
深读 Top Exhibits 的前一半(建议2-3个)。
|
|
260
|
+
|
|
261
|
+
【必须执行步骤】
|
|
262
|
+
Step 1:锁定主结论 MC(一句话+定位)。
|
|
263
|
+
Step 2:抽取 2-5 个关键子结论 SC(每条定位)。
|
|
264
|
+
Step 3:为每个 SC 抽取前提与桥接原则:
|
|
265
|
+
- 定义性前提 / 描述性前提 / 规范性前提 / 方法论前提 / 桥接原则
|
|
266
|
+
- 标注推理类型:演绎/类比/溯因/反证/概念分析/定义推出
|
|
267
|
+
Step 4:输出“论证台账(Argument Ledger)”:每个节点一行:
|
|
268
|
+
ID、内容、类型、证据类型(直觉/思想实验/概念区分/文献)、定位、脆弱点提示。
|
|
269
|
+
Step 5:画 Mermaid 论证图(支持边/反驳边;若论文未显式反驳则标“未显式”)。
|
|
270
|
+
Step 6:Top Exhibits 深读(上半,2-3个),每个 Exhibit 统一结构:
|
|
271
|
+
- 绑定的 claim/节点ID
|
|
272
|
+
- 原文短引(可选)+ 转述(必须)+ 定位
|
|
273
|
+
- 它能直接支持的结论(禁止过度解读)
|
|
274
|
+
- 隐含前提/误读风险
|
|
275
|
+
- 写作复用:给一条“可直接引用的转述句”
|
|
276
|
+
|
|
277
|
+
【必须输出 Mermaid:论证图(safe)】
|
|
278
|
+
|
|
279
|
+
```mermaid
|
|
280
|
+
flowchart TD
|
|
281
|
+
MC[主结论] <-- SC1[子结论1]
|
|
282
|
+
MC <-- SC2[子结论2]
|
|
283
|
+
SC1 <-- P1[前提1]
|
|
284
|
+
SC1 <-- B1[桥接原则]
|
|
285
|
+
O1[论文内反对] -.-> SC1
|
|
286
|
+
R1[作者回应] --> O1
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
图例 + 至少3个节点定位(MC/SC1/任一Exhibit)。
|
|
290
|
+
|
|
291
|
+
轮末尾:
|
|
292
|
+
【已完成模块】M4
|
|
293
|
+
【下一轮将输出】M5 深度审视(Three-Pass第3遍)+ objection mining + Top Exhibits 深读(下半)
|
|
294
|
+
【需要用户提供/确认的输入(如有)】(无则写“无”)
|
|
295
|
+
|
|
296
|
+
M5:深度审视(Three-Pass第3遍)+ objection mining + 失败模式/反例压力测试 + Top Exhibits 深读(下半)
|
|
297
|
+
|
|
298
|
+
【本轮目的】
|
|
299
|
+
像审稿一样做压力测试:有效性、前提负担、概念偷换、反例、对手公平性、失败模式与补救。
|
|
300
|
+
把 objections 与 replies 系统化,并加入外加反对。
|
|
301
|
+
深读剩余 Top Exhibits(下半)。
|
|
302
|
+
|
|
303
|
+
【必须包含五件套(哲学版可复现重建)】
|
|
304
|
+
- 最小论证骨架:P1..Pn ⟹ C(每条定位、类型标注)
|
|
305
|
+
- 假设清单:显式 + 隐含(每条说明:不接受会导致哪个节点塌)
|
|
306
|
+
- 失败模式(至少3类):
|
|
307
|
+
1) 概念滑移导致论证不再同一对象
|
|
308
|
+
2) 桥接原则争议过大(从案例/直觉到原则跃迁)
|
|
309
|
+
3) 对手被弱化或关键反例未覆盖
|
|
310
|
+
- 审稿式强弱点评估:强点/弱点/可补救(绑定节点或 Exhibit)
|
|
311
|
+
- 下一步研究:3个可执行 follow-up(做什么/为什么/风险/需要补哪类文献或论证)
|
|
312
|
+
|
|
313
|
+
【必须完成 objection mining(系统版)】
|
|
314
|
+
- 抽取论文显式 objections:O1..Ok(每条定位)
|
|
315
|
+
- 对应作者回应:R1..Rk(每条定位)
|
|
316
|
+
- 外加反对至少3条(标【外加反对】并指向论证节点)
|
|
317
|
+
- 每条给三评分:严重性(1-5)/回应充分性(1-5)/回应代价(文字)
|
|
318
|
+
|
|
319
|
+
【必须做至少3类压力测试】
|
|
320
|
+
- 【外加反例/思想实验】对关键定义或桥接原则施压
|
|
321
|
+
- 【概念偷换测试】用“含义A/含义B”重读关键术语,看论证是否变形
|
|
322
|
+
- 【钢人化对手】把对手观点写成更强版本,检查作者回应是否仍成立
|
|
323
|
+
|
|
324
|
+
【必须输出 Mermaid:反对-回应树(safe)】
|
|
325
|
+
|
|
326
|
+
```mermaid
|
|
327
|
+
flowchart TB
|
|
328
|
+
X1[被攻击节点] -.-> O2[反对意见]
|
|
329
|
+
O2 --> R2[作者回应]
|
|
330
|
+
R2 -.-> Cx[回应代价]
|
|
331
|
+
OX[外加反对] -.-> X1
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
图例 + 至少3个节点定位(O2/R2/被攻击节点)。
|
|
335
|
+
|
|
336
|
+
轮末尾:
|
|
337
|
+
【已完成模块】M5
|
|
338
|
+
【下一轮将输出】M6 写作级产出包(摘要/要点/讨论题/研究延伸/可选核验)
|
|
339
|
+
【需要用户提供/确认的输入(如有)】(无则写“无”)
|
|
340
|
+
|
|
341
|
+
M6:写作级产出包(可直接用于综述/书评/讨论课/研究笔记)
|
|
342
|
+
|
|
343
|
+
【本轮目的】
|
|
344
|
+
把前5轮成果变成可直接粘贴使用的写作材料,同时提供后续研究与可选核验入口。
|
|
345
|
+
|
|
346
|
+
【必须产出固定清单】
|
|
347
|
+
- 忠实摘要(200-350字):不夹带评价;带定位线索
|
|
348
|
+
- 关键要点 8-12 条:每条定位
|
|
349
|
+
- 最小论证骨架(P1..Pn ⟹ C):每条定位
|
|
350
|
+
- 评价段(150-250字):强点/弱点/最大悬念(绑定节点/Exhibit)
|
|
351
|
+
- 讨论课问题 6-10 个(概念澄清→有效性→反例→传统对比→方法论含义)
|
|
352
|
+
- 研究延伸 3 个(做什么/为什么/风险/需要补哪类材料)
|
|
353
|
+
- 阅读建议:不同目的(快速/综述/书评/研究)该怎么复读哪些小节
|
|
354
|
+
|
|
355
|
+
【可选:联网核验入口(默认不执行)】
|
|
356
|
+
若用户要求核验,则输出:
|
|
357
|
+
- 核验清单(出版信息/关键引文/对手观点原文一致性)
|
|
358
|
+
- 关键词与检索式建议
|
|
359
|
+
- 声明“需要开启联网核验模式”后再执行
|
|
360
|
+
无法核验必须写【证据不足】。
|
|
361
|
+
|
|
362
|
+
【必须输出 Mermaid:一页总结图(safe)】
|
|
363
|
+
|
|
364
|
+
```mermaid
|
|
365
|
+
flowchart TB
|
|
366
|
+
Q1[争点] --> T1[主论题]
|
|
367
|
+
T1 --> C1[核心概念]
|
|
368
|
+
T1 --> A1[论证骨架]
|
|
369
|
+
A1 -.-> O1[关键反对]
|
|
370
|
+
O1 --> R1[回应]
|
|
371
|
+
T1 --> U1[开放问题]
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
图例 + 至少3个节点定位(T1/A1/任一Exhibit)。
|
|
375
|
+
|
|
376
|
+
轮末尾:
|
|
377
|
+
【已完成模块】M6
|
|
378
|
+
【下一轮将输出】(无;若用户要求“联网核验”,进入附加模式)
|
|
379
|
+
【需要用户提供/确认的输入(如有)】(无则写“无”)
|
|
380
|
+
|
|
381
|
+
========================
|
|
382
|
+
5) 开始执行
|
|
383
|
+
|
|
384
|
+
请在 M1 中完成:对齐目标 + 输入校验 + 结构索引 + Exhibit全量索引 + markmap大纲脑图。
|
|
385
|
+
完成后在 M2..M6 依次完成后续模块。
|
|
386
|
+
|
|
387
|
+
Document content:
|
|
388
|
+
{{ content }}
|
|
389
|
+
|
|
390
|
+
JSON Schema:
|
|
391
|
+
{{ schema }}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
You are an information extraction assistant.
|
|
2
|
+
Output language: {{ output_language }}.
|
|
3
|
+
Extract structured data from the provided markdown document.
|
|
4
|
+
Return ONLY valid JSON that conforms to the given JSON Schema.
|
|
5
|
+
The field "paper_authors" MUST be an array of strings (each author name as one item).
|
|
6
|
+
If a field is unknown, use an empty string or empty list per schema.
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
Template: eight_questions_phi
|
|
2
|
+
|
|
3
|
+
{% if stage_name %}
|
|
4
|
+
Current stage: {{ stage_name }}.
|
|
5
|
+
Return JSON with keys: {{ stage_fields | join(", ") }}.
|
|
6
|
+
Output language: {{ output_language }}. Use that language in all answers (if zh, use Chinese).
|
|
7
|
+
Previously completed outputs (JSON): {{ previous_outputs }}
|
|
8
|
+
{% else %}
|
|
9
|
+
Answer each question in the corresponding JSON field question1 through question8.
|
|
10
|
+
Output language: {{ output_language }}. Use that language in all answers (if zh, use Chinese).
|
|
11
|
+
{% endif %}
|
|
12
|
+
|
|
13
|
+
# 哲学/伦理学论文精读 Prompt(8问题版|辩论-论证对齐|含文字流程图|可复现定位)
|
|
14
|
+
|
|
15
|
+
你将得到一篇哲学/伦理学论文(PDF全文/摘录/笔记均可)。任务是用下面 8 个问题,系统、可复现地精读论文,并输出结构化答案。
|
|
16
|
+
写作强调“争点→概念→论证→反对→回应→评价→意义”,而不是实验复现。
|
|
17
|
+
|
|
18
|
+
========================
|
|
19
|
+
输入(用户提供)
|
|
20
|
+
========================
|
|
21
|
+
【论文全文/摘录/笔记】:
|
|
22
|
+
<粘贴在这里>
|
|
23
|
+
|
|
24
|
+
【可选:用户目标与背景】:
|
|
25
|
+
- 目标:快速理解/写综述/写书评/课堂讨论/研究延伸/写 rebuttal
|
|
26
|
+
- 熟悉度:0-5
|
|
27
|
+
- 偏好传统:功利/康德/德性/契约/建构/实在论/诠释学等
|
|
28
|
+
- 论文类型(若用户不填,由你在Q1中初判):规范伦理/元伦理/认识论/方法论/概念工程/历史诠释
|
|
29
|
+
|
|
30
|
+
========================
|
|
31
|
+
硬约束(必须遵守)
|
|
32
|
+
========================
|
|
33
|
+
1) 输出语言:中文(保留必要英文术语)。
|
|
34
|
+
2) 禁止第一人称:不出现“我/我们/本人”。
|
|
35
|
+
3) 作者-评估分离:每个问题都必须分成两块:
|
|
36
|
+
- 【作者文本】只写论文明确承诺的内容(必要时短引≤25词/句)。
|
|
37
|
+
- 【分析与评估】才允许补隐含前提、提出反例、比较传统、评价强弱。
|
|
38
|
+
4) 定位要求:每个问题至少给出 2 处“最小定位标签”:
|
|
39
|
+
- 优先:{Sect.X.Y} 或 {p.Z, Sect.X.Y}
|
|
40
|
+
- 若无页码/小节:用 {锚点:段首8-12字} 作为定位
|
|
41
|
+
- 若无法定位:标【未定位】并说明原因(摘录不全/缺页码等)
|
|
42
|
+
5) 防幻觉:超出原文必须标【推测】;原文未给证据/范围必须写“论文未给出”或【证据不足】。
|
|
43
|
+
6) 输出顺序严格按 Q1→Q8。除 Q8 的“5 bullets”外,不要堆长列表;保持信息密度。
|
|
44
|
+
7) 输出语言以 {{ output_language }} 为准(zh 时使用中文)。
|
|
45
|
+
|
|
46
|
+
========================
|
|
47
|
+
Mermaid/流程图要求(避免中文报错)
|
|
48
|
+
========================
|
|
49
|
+
- 本任务“必须包含文字流程图(ASCII)”,不强制 Mermaid。
|
|
50
|
+
- 如果用户明确要求 Mermaid,再额外给一张 Mermaid-safe 图,并遵守:
|
|
51
|
+
(a) 节点ID只用ASCII:A1,B2,C3… 禁止中文/空格/连字符-
|
|
52
|
+
(b) 中文只放在节点标签里:A1[中文标签]
|
|
53
|
+
(c) 标签里避免:引号 " ' ` 、竖线 | 、花括号 {} 、尖括号 <> 、嵌套方括号 [[]]
|
|
54
|
+
(d) safe模式只用 --> -.-> ==> ,不写边标签文本
|
|
55
|
+
|
|
56
|
+
========================
|
|
57
|
+
8 个问题(哲学/伦理学版)
|
|
58
|
+
========================
|
|
59
|
+
|
|
60
|
+
Q1) 这篇论文试图解决什么问题?
|
|
61
|
+
- 要求:把“争点”写成一个可争论的问题句(debate question),并给出作者的主论题(thesis)一句话版本。
|
|
62
|
+
- 同时给出论文类型初判(规范伦理/元伦理/方法论/概念工程/历史诠释等)及依据。
|
|
63
|
+
|
|
64
|
+
Q2) 有哪些相关研究/立场?
|
|
65
|
+
- 要求:按三类组织“辩论谱系”,而不是SOTA:
|
|
66
|
+
(a) 最强对手/基线立场(strongest rival):能与作者正面冲突的最好版本(若论文未充分呈现,标【推测】)
|
|
67
|
+
(b) 最相近路线(closest approach):目标相近或方法相近的论证/定义/框架
|
|
68
|
+
(c) 正交方向(orthogonal directions):从不同框架处理同争点(例如换元伦理立场/换正当化模型/换解释路径)
|
|
69
|
+
- 每类至少给 1-2 个明确指代(作者/文献/学派)与定位。
|
|
70
|
+
|
|
71
|
+
Q3) 作者如何解决这个问题?(必须含文字流程图)
|
|
72
|
+
- 要求:用 3–6 句复述“论证主链”,并显式标出至少一个“桥接环节”(从概念区分→原则/规则→结论,或从案例直觉→原则等)。
|
|
73
|
+
- 必须提供一个“文字流程图(ASCII)”,示例格式:
|
|
74
|
+
[争点] -> [主论题] -> [关键概念界定] -> [论证路线A] -> [关键反对] -> [回应] -> [结论/含义]
|
|
75
|
+
- 若用户要求 Mermaid,再额外输出 Mermaid-safe 版本(遵守避坑规则)。
|
|
76
|
+
|
|
77
|
+
Q4) 论文使用了哪些“证据载体/材料/设定”?为什么这些材料能验证/支撑主张?
|
|
78
|
+
(哲学版替代“数据集与实现设置”)
|
|
79
|
+
- 证据载体可包括:定义句/必要充分条件、思想实验、反例、案例直觉、经验事实、文本引文、方法规则(如反思均衡的规则集)、对手观点转述段等。
|
|
80
|
+
- 要求:列出 3–6 个最关键的“Exhibits”(E1..En),并说明每个 Exhibit 支撑的主张节点是什么、为何相关。
|
|
81
|
+
|
|
82
|
+
Q5) 论文的“评估标准/论证结果”是什么?哪些结果对应作者的哪些创新点?
|
|
83
|
+
(哲学版替代“指标与结果”)
|
|
84
|
+
- 要求:先列“评估标准”(相当于 metrics),常见如:
|
|
85
|
+
- 论证有效性(validity):形式上是否推出
|
|
86
|
+
- 前提可接受性/可信度(plausibility)
|
|
87
|
+
- 概念清晰度与避免滑移
|
|
88
|
+
- 解释力/覆盖范围(explanatory scope)
|
|
89
|
+
- 简约性(parsimony)
|
|
90
|
+
- 规范适当性(normative adequacy)
|
|
91
|
+
- 与既有信念/判断的一致性或改进(反思均衡意义上的coherence)
|
|
92
|
+
- 再总结作者声称达成的“结果”(例如:给出工作定义、化解某类反例、驳倒某批评、澄清争点等)。
|
|
93
|
+
- 关键要求:说明“每条结果主要反映作者的哪项创新/动作”(定义创新、论证创新、反驳创新、方法规则创新等)。
|
|
94
|
+
|
|
95
|
+
Q6) 还有什么可以进一步探索?
|
|
96
|
+
- 必须按四类拆分:
|
|
97
|
+
(a) 理论/论证:哪些前提可削弱或替换?还能不能更强?
|
|
98
|
+
(b) 工程/形式化:能否形式化、做决策程序、或做更可操作的判准?
|
|
99
|
+
(c) 数据/经验:需要什么经验研究/案例材料来检验关键前提或应用后果?(若论文不涉及经验,写“论文未给出”,再给【推测】建议)
|
|
100
|
+
(d) 评测/压力测试:还缺哪些反例、跨传统检验、或对手钢人化版本?
|
|
101
|
+
|
|
102
|
+
Q7) 这套观点/方法在现实世界会如何工作?
|
|
103
|
+
- 要求:把论文主张落到现实场景(政策/法律/公共理性/AI伦理/医学伦理/学术方法等),并写出约束:
|
|
104
|
+
- 信息约束(我们是否知道足够事实)
|
|
105
|
+
- 制度约束(现实制度是否允许按该原则行事)
|
|
106
|
+
- 计算/时间/协商成本(公共讨论与决策的成本)
|
|
107
|
+
- 鲁棒性(在分歧、偏见、噪声事实下是否仍可靠)
|
|
108
|
+
- 若论文没有谈现实应用,写“论文未给出”,再给【推测】两条可能应用路径。
|
|
109
|
+
|
|
110
|
+
Q8) 总结主要内容(one paragraph + 5 bullets + 一个核心压缩表达)
|
|
111
|
+
- one paragraph:200–350字忠实摘要(带定位)
|
|
112
|
+
- 5 bullets:5条要点(每条带定位)
|
|
113
|
+
- 核心压缩表达(从论文中抽取最关键的一条,用纯ASCII表示,避免引号与特殊符号)四选一:
|
|
114
|
+
- 核心判准:X iff (A and B and C)
|
|
115
|
+
- 或 核心定义:X := (R1,R2,R3)
|
|
116
|
+
- 或 核心原则:If P then Q
|
|
117
|
+
- 或 核心论证骨架:P1 + P2 + ... + Pn => C
|
|
118
|
+
选择规则:若论文给出必要/充分条件或工作定义,优先“判准/定义”;若是规范伦理,优先“原则”;否则用“论证骨架”。
|
|
119
|
+
|
|
120
|
+
========================
|
|
121
|
+
输出模板(每个问题必须按此写)
|
|
122
|
+
========================
|
|
123
|
+
Qk) <问题标题>
|
|
124
|
+
【作者文本】……{定位1}{定位2}
|
|
125
|
+
【分析与评估】……(若有推断必须标【推测】)
|
|
126
|
+
|
|
127
|
+
现在开始依次回答 Q1–Q8。
|
|
128
|
+
|
|
129
|
+
Document content:
|
|
130
|
+
{{ content }}
|
|
131
|
+
|
|
132
|
+
JSON Schema:
|
|
133
|
+
{{ schema }}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
You are an information extraction assistant.
|
|
2
|
+
Output language: {{ output_language }}.
|
|
3
|
+
Extract structured data from the provided markdown document.
|
|
4
|
+
Return ONLY valid JSON that conforms to the given JSON Schema.
|
|
5
|
+
The field "paper_authors" MUST be an array of strings (each author name as one item).
|
|
6
|
+
If a field is unknown, use an empty string or empty list per schema.
|