Spaces:
Running
Running
Upload direction_analyzer.py with huggingface_hub
Browse files- direction_analyzer.py +25 -10
direction_analyzer.py
CHANGED
|
@@ -8,16 +8,24 @@ from llm_utils import call_llm_json, parse_json_safe, validate_direction_output,
|
|
| 8 |
|
| 9 |
DIRECTION_SYSTEM_PROMPT = """你是一个 AI 研究领域的开源生态分析师。你的任务是:拿到一篇论文和 GitHub 上搜到的相关仓库列表,帮研究者理清——这些仓库分别属于什么方法族、哪些方法族有成熟开源实现、哪些还是空白。
|
| 10 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 11 |
## 分析流程
|
| 12 |
|
| 13 |
### 步骤 1:定位子领域
|
| 14 |
- 结合论文内容和仓库描述,判断该论文属于哪个具体子领域
|
| 15 |
- 不要笼统(如"深度学习"),要具体(如"工业图像异常检测")
|
| 16 |
-
- 说明该子领域在 2024-2025 年的主流趋势(
|
| 17 |
|
| 18 |
### 步骤 2:归纳方法族
|
| 19 |
- 浏览所有仓库的 description 和 topics,将同类方法的仓库归为一族
|
| 20 |
-
- 每个方法族给出:名称、
|
| 21 |
- 输出 3-6 个方法族
|
| 22 |
- 如果一个仓库明显不属于任何一族(如只是教程、论文列表),不要强行归类
|
| 23 |
- 重要:方法族名称尽量使用英文(如"Patch Distribution Modeling"),便于后续搜索
|
|
@@ -39,11 +47,11 @@ DIRECTION_SYSTEM_PROMPT = """你是一个 AI 研究领域的开源生态分析
|
|
| 39 |
## 输出格式(严格 JSON,紧凑格式不要缩进和多余空格)
|
| 40 |
{
|
| 41 |
"subfield": "具体子领域名称",
|
| 42 |
-
"subfield_trend": "该子领域 2024-2025 的主流趋势(
|
| 43 |
"method_families": [
|
| 44 |
{
|
| 45 |
"family_name": "方法族简称",
|
| 46 |
-
"description": "
|
| 47 |
"representative_work": "代表论文或知名项目",
|
| 48 |
"matched_repos": ["owner/repo1", "owner/repo2"],
|
| 49 |
"search_queries": ["搜索词1", "搜索词2"]
|
|
@@ -54,7 +62,7 @@ DIRECTION_SYSTEM_PROMPT = """你是一个 AI 研究领域的开源生态分析
|
|
| 54 |
"""
|
| 55 |
|
| 56 |
|
| 57 |
-
def analyze_direction(title: str, abstract: str, repos: list[dict] | None = None) -> dict:
|
| 58 |
"""基于论文信息和 GitHub 搜索结果,归纳方法族谱系。
|
| 59 |
|
| 60 |
Args:
|
|
@@ -63,6 +71,8 @@ def analyze_direction(title: str, abstract: str, repos: list[dict] | None = None
|
|
| 63 |
repos: GitHub 搜索结果列表,每个 dict 包含 full_name, description,
|
| 64 |
stars, language, topics, html_url。如果为 None 或空列表,
|
| 65 |
则仅基于 LLM 自身知识分析(降级模式)。
|
|
|
|
|
|
|
| 66 |
|
| 67 |
Returns:
|
| 68 |
dict: 包含 subfield, subfield_trend, method_families, broad_queries
|
|
@@ -87,18 +97,23 @@ def analyze_direction(title: str, abstract: str, repos: list[dict] | None = None
|
|
| 87 |
else:
|
| 88 |
repos_text = "(未提供 GitHub 搜索结果,请基于你的训练知识进行分析)"
|
| 89 |
|
| 90 |
-
|
| 91 |
-
|
|
|
|
|
|
|
|
|
|
| 92 |
|
| 93 |
-
**
|
| 94 |
|
|
|
|
|
|
|
| 95 |
## GitHub 搜索结果(共 {len(repos) if repos else 0} 个仓库)
|
| 96 |
|
| 97 |
{repos_text}
|
| 98 |
|
| 99 |
-
请
|
| 100 |
|
| 101 |
-
raw = call_llm_json(DIRECTION_SYSTEM_PROMPT, user_prompt, temperature=0.4, max_tokens=
|
| 102 |
data = parse_json_safe(raw, "direction_analyzer")
|
| 103 |
return validate_direction_output(data)
|
| 104 |
|
|
|
|
| 8 |
|
| 9 |
DIRECTION_SYSTEM_PROMPT = """你是一个 AI 研究领域的开源生态分析师。你的任务是:拿到一篇论文和 GitHub 上搜到的相关仓库列表,帮研究者理清——这些仓库分别属于什么方法族、哪些方法族有成熟开源实现、哪些还是空白。
|
| 10 |
|
| 11 |
+
## ⚠️ 防混淆规则(最高优先级)
|
| 12 |
+
|
| 13 |
+
- 你必须**严格基于用户提供的这篇具体论文**进行分析,**绝对禁止**将输入论文与其他相似论文混淆
|
| 14 |
+
- 如果你的训练数据中有更知名的论文与输入论文标题相似,**忽略它们**,只分析当前输入的这篇
|
| 15 |
+
- 子领域定位必须从**这篇论文的实际标题和摘要**出发,方法族归纳必须基于**提供的 GitHub 仓库列表**
|
| 16 |
+
- 不要在分析中引用未在输入中出现的论文标题、方法名或作者
|
| 17 |
+
- 如果输入的是一篇"XYZNet for anomaly detection",不要分析成 Transformer、ResNet 或任何训练数据中的其他模型
|
| 18 |
+
|
| 19 |
## 分析流程
|
| 20 |
|
| 21 |
### 步骤 1:定位子领域
|
| 22 |
- 结合论文内容和仓库描述,判断该论文属于哪个具体子领域
|
| 23 |
- 不要笼统(如"深度学习"),要具体(如"工业图像异常检测")
|
| 24 |
+
- 说明该子领域在 2024-2025 年的主流趋势(3-5 句中文,包含:主要技术路线演进方向、关键突破性论文/项目、活跃研究组或机构、当前正在解决的核心问题)
|
| 25 |
|
| 26 |
### 步骤 2:归纳方法族
|
| 27 |
- 浏览所有仓库的 description 和 topics,将同类方法的仓库归为一族
|
| 28 |
+
- 每个方法族给出:名称(英文简称)、核心特点(2-3句详细描述,包含技术原理关键词、相比其他族的优势、主要适用场景)、代表论文(含arxiv ID或会议名)/知名开源项目
|
| 29 |
- 输出 3-6 个方法族
|
| 30 |
- 如果一个仓库明显不属于任何一族(如只是教程、论文列表),不要强行归类
|
| 31 |
- 重要:方法族名称尽量使用英文(如"Patch Distribution Modeling"),便于后续搜索
|
|
|
|
| 47 |
## 输出格式(严格 JSON,紧凑格式不要缩进和多余空格)
|
| 48 |
{
|
| 49 |
"subfield": "具体子领域名称",
|
| 50 |
+
"subfield_trend": "该子领域 2024-2025 的主流趋势(3-5句中文,含技术路线演进、关键突破、活跃研究组/机构、核心问题)",
|
| 51 |
"method_families": [
|
| 52 |
{
|
| 53 |
"family_name": "方法族简称",
|
| 54 |
+
"description": "核心特点(2-3句详细描述,含技术原理关键词、优势、适用场景)",
|
| 55 |
"representative_work": "代表论文或知名项目",
|
| 56 |
"matched_repos": ["owner/repo1", "owner/repo2"],
|
| 57 |
"search_queries": ["搜索词1", "搜索词2"]
|
|
|
|
| 62 |
"""
|
| 63 |
|
| 64 |
|
| 65 |
+
def analyze_direction(title: str, abstract: str, repos: list[dict] | None = None, domain_context: str = "") -> dict:
|
| 66 |
"""基于论文信息和 GitHub 搜索结果,归纳方法族谱系。
|
| 67 |
|
| 68 |
Args:
|
|
|
|
| 71 |
repos: GitHub 搜索结果列表,每个 dict 包含 full_name, description,
|
| 72 |
stars, language, topics, html_url。如果为 None 或空列表,
|
| 73 |
则仅基于 LLM 自身知识分析(降级模式)。
|
| 74 |
+
domain_context: 可选的领域上下文补充(如同领域综述论文摘要),
|
| 75 |
+
帮助 LLM 更准确地定位子领域和识别方法族。
|
| 76 |
|
| 77 |
Returns:
|
| 78 |
dict: 包含 subfield, subfield_trend, method_families, broad_queries
|
|
|
|
| 97 |
else:
|
| 98 |
repos_text = "(未提供 GitHub 搜索结果,请基于你的训练知识进行分析)"
|
| 99 |
|
| 100 |
+
domain_section = ""
|
| 101 |
+
if domain_context:
|
| 102 |
+
domain_section = f"\n## 领域上下文(同领域相关综述/调查论文摘要)\n\n{domain_context}\n"
|
| 103 |
+
|
| 104 |
+
user_prompt = f"""## ⚠️ 以下是你需要分析的论文,请务必将你的分析锚定在这篇论文上
|
| 105 |
|
| 106 |
+
**论文标题**: {title_clean}
|
| 107 |
|
| 108 |
+
**论文摘要**: {abstract_truncated}
|
| 109 |
+
{domain_section}
|
| 110 |
## GitHub 搜索结果(共 {len(repos) if repos else 0} 个仓库)
|
| 111 |
|
| 112 |
{repos_text}
|
| 113 |
|
| 114 |
+
请严格基于以上这篇论文和仓库数据分析,不要使用训练数据中其他相似论文的信息。"""
|
| 115 |
|
| 116 |
+
raw = call_llm_json(DIRECTION_SYSTEM_PROMPT, user_prompt, temperature=0.4, max_tokens=6000)
|
| 117 |
data = parse_json_safe(raw, "direction_analyzer")
|
| 118 |
return validate_direction_output(data)
|
| 119 |
|