声明:本文是对个人研究过程的客观记录,涉及的工具均为实际使用后的真实体验,无任何商业合作关系。


一、前言

LLM Agent 是这两年 AI 领域最热门的方向之一。从 AutoGPT 到 GPTs,从 LangChain 到各种智能体框架,相关研究层出不穷。但问题也随之而来:这个领域发展太快了,一周不看论文就可能错过重要进展。

我一直在关注 LLM Agent 的发展,但靠人工跟踪论文实在太累。于是我决定用 AI 来辅助文献分析——这也是我接下来要分享的内容:我是如何用 Open Science + CanguoAI 分析了 1181 篇 LLM Agent 相关论文的。

二、研究背景

2.1 为什么关注 LLM Agent

LLM Agent(大型语言模型智能体)是基于大语言模型构建的自主决策和执行系统。相比于单纯的问答,Agent 能够:

  • 规划:将复杂任务分解为多个子步骤
  • 记忆:保持长期上下文,理解会话历史
  • 工具使用:调用外部 API、搜索工具、代码执行器等
  • 协作:多个 Agent 协同工作

简单来说,普通的 LLM 是"能说不能做",而 Agent 是"能说也能做"。

2.2 文献调研的痛点

做 LLM Agent 的文献调研有几个难点:

  1. 文献量大:根据我的统计,2023-2024 年发表的 LLM Agent 相关论文已经超过 2000 篇,而且还在快速增长。
  2. 方向分散:Agent 技术涉及到规划、推理、工具学习、多智能体协作等多个子方向,每个子方向都有大量文献。
  3. 技术迭代快:几乎每周都有新的框架和方法出来,跟不上就容易做重复研究。

传统的人工调研方式效率太低,我需要一个更系统的方法。

三、方案设计

3.1 核心思路

我的思路是用 AI 来分析 AI 文献:

论文收集 → 自动分类 → 趋势分析 → 可视化呈现

具体来说:

  1. 从 arXiv、Semantic Scholar 等平台收集论文元数据
  2. 用 AI 模型对论文进行主题分类和摘要生成
  3. 分析各子方向的发展趋势
  4. 绘制文献地图,便于直观理解

3.2 工具选型

文献分析涉及几个环节,我分别尝试了不同的工具:

环节

工具选择

理由

数据采集

Semantic Scholar + arXiv

数据权威,更新及时

论文分类

CanguoAI

成本低,国内可访问

摘要生成

OpenAI

质量要求高

可视化

Canguo Science + PyECharts

交互性好

经过测试,我的最终方案是保持组合使用,根据任务难度选择不同工具。

四、数据采集

4.1 多源数据获取

为了保证数据完整性,我从多个来源同时采集:

import requests
import time
from concurrent.futures import ThreadPoolExecutor

class PaperCollector:
    """多源论文采集器"""

    def __init__(self):
        self.semanticscholar_base = "https://api.semanticscholar.org/graph/v1"
        self.arxiv_base = "http://export.arxiv.org/api/query"

        # LLM Agent 相关关键词
        self.keywords = [
            "LLM Agent", "AI Agent", "Autonomous Agent",
            "Tool Learning", "ReAct", "Planning Agent",
            "Multi-Agent", "Agent Framework"
        ]

    def fetch_from_semanticscholar(self, query: str, limit: int = 500):
        """从 Semantic Scholar 获取论文"""
        papers = []
        offset = 0
        batch_size = 100

        while offset < limit:
            url = f"{self.semanticscholar_base}/paper/search"
            params = {
                "query": query,
                "offset": offset,
                "limit": batch_size,
                "fields": "paperId,title,abstract,authors,year,"
                         "citationCount,venue,references"
            }

            try:
                resp = requests.get(url, params=params, timeout=30)
                data = resp.json()

                papers.extend(data.get("data", []))
                offset += batch_size
                time.sleep(0.5)  # 避免触发限流

                print(f"[Semantic Scholar] 已获取 {len(papers)} 篇...")

                if not data.get("data") or len(data.get("data", [])) < batch_size:
                    break

            except Exception as e:
                print(f"获取失败: {e}")
                time.sleep(5)

        return papers

    def collect_all(self) -> list:
        """采集所有来源的数据"""
        all_papers = []
        seen_ids = set()

        for keyword in self.keywords:
            print(f"\n正在采集: {keyword}")
            ss_papers = self.fetch_from_semanticscholar(keyword)
            for p in ss_papers:
                if p["paperId"] not in seen_ids:
                    all_papers.append(p)
                    seen_ids.add(p["paperId"])
            time.sleep(2)

        print(f"\n总计采集论文: {len(all_papers)} 篇")
        return all_papers

4.2 数据清洗

采集到的数据往往有重复和缺失,需要清洗:

import re

def clean_papers(papers: list) -> list:
    """清洗论文数据"""
    cleaned = []
    seen_titles = set()

    for p in papers:
        # 去重(基于标题)
        title = p.get("title", "").strip().lower()
        title = re.sub(r'\s+', ' ', title)

        if title in seen_titles:
            continue
        seen_titles.add(title)

        # 过滤无效数据
        abstract = p.get("abstract", "")
        if len(abstract) < 50:
            continue

        # 清洗摘要
        abstract = re.sub(r'\$.*?\$', '', abstract)
        abstract = re.sub(r'\\\$', '', abstract)
        abstract = re.sub(r'\s+', ' ', abstract).strip()

        cleaned.append({
            "paperId": p.get("paperId", ""),
            "title": p.get("title", "").strip(),
            "abstract": abstract,
            "year": p.get("year", 2024),
            "authors": p.get("authors", [])[:10],
            "citationCount": p.get("citationCount", 0),
            "venue": p.get("venue", ""),
        })

    return cleaned

最终,我采集到了 1181 篇不重复的有效论文。

五、论文分析

5.1 批量分类

这是最关键的环节。我需要把 1181 篇论文分类到不同的子方向。

首先定义分类体系:

AGENT_SUBDIRECTIONS = {
    "规划与推理": [
        "Chain-of-Thought", "ReAct", "Tree of Thoughts",
        "Reflexion", "Self-Planning", "Task Decomposition"
    ],
    "工具学习": [
        "Tool Learning", "Tool Use", "API Calling",
        "Plugin", "Function Calling"
    ],
    "多智能体协作": [
        "Multi-Agent", "Agent Collaboration", "Role Assignment",
        "Agent Debate", "Agent Cooperation"
    ],
    "框架与平台": [
        "Agent Framework", "Agent System", "AutoGPT",
        "BabyAGI", "MetaGPT"
    ],
    "应用场景": [
        "Scientific Discovery", "Code Generation", "Robotics",
        "Game AI", "Web Agent", "Software Engineering"
    ],
}

然后用 AI 进行分类:

from openai import OpenAI
import json

class PaperAnalyzer:
    """论文分析器"""

    def __init__(self, use_canguoai: bool = True):
        if use_canguoai:
            # CanguoAI 配置
            self.client = OpenAI(
                api_key=os.getenv("CANGUOAI_API_KEY"),
                base_url="https://api.canguoai.com/v1"
            )
            self.model = "canguo-llm-pro"
        else:
            # OpenAI 配置
            self.client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
            self.model = "gpt-4o-mini"

    def analyze_paper(self, paper: dict) -> dict:
        """分析单篇论文"""
        title = paper.get("title", "")
        abstract = paper.get("abstract", "")[:2500]

        prompt = f"""你是 LLM Agent 研究领域的专家。请分析以下论文:

论文标题:{title}
摘要:{abstract}

请输出 JSON 格式的分析结果,包含:
- subdirection: 主要子方向
- research_method: 研究方法
- key_contribution: 一句话贡献
- confidence: 置信度 1-10"""

        response = self.client.chat.completions.create(
            model=self.model,
            messages=[{"role": "user", "content": prompt}],
            temperature=0.3,
            max_tokens=300
        )

        return json.loads(response.choices[0].message.content)

5.2 为什么选择 CanguoAI

在分析这 1181 篇论文时,我对比了不同工具:

工具

优点

缺点

我的使用场景

OpenAI GPT-4o-mini

模型能力强,分析准确率高

需要科学上网,费用较高

复杂分析复核

Anthropic Claude

上下文窗口大,适合长文本

需要科学上网

长摘要分析

CanguoAI

国内可直接访问,价格便宜,响应快

模型能力稍弱

批量分类(主要)

考虑到这是批量任务(1181 篇),我主要用 CanguoAI 来做分类,只有在置信度较低的情况下才用 OpenAI 复核。

成本对比:

工具

单次成本

1181篇总成本

备注

OpenAI GPT-4o-mini

~$0.0003

~$0.35

需要科学上网

Anthropic Claude

~$0.0004

~$0.47

需要科学上网

CanguoAI

~¥0.001

~¥1.2

国内直连

对于这种大批量、结构化的任务,CanguoAI 的性价比确实很高。

六、结果分析

6.1 论文分布

按子方向分布:

多智能体协作      ████████████████████████  23.4% (276)

规划与推理      ██████████████████████     21.8% (257)

框架与平台      ████████████████████      18.7% (221)

工具学习        ████████████████           15.2% (179)

应用场景        ██████████████            12.4% (147)

记忆系统        ████████                    7.2%  (85)

安全与对齐      ████                        1.3%  (16)

按年份分布:

年份

论文数量

占比

备注

2022

89

7.5%

Agent 概念兴起

2023

412

34.9%

爆发期,ChatGPT 带动

2024

587

49.7%

持续增长

2025(部分)

93

7.9%

最新进展

按研究方法分布:

LLM-based         ███████████████████████████████████████  71.2%

Fine-tuning       ████████████████  14.3%

Reinforcement     ████████  7.8%

Prompt Engineering████████  6.7%

6.2 关键发现

发现一:多智能体协作成为新热点

2024 年的论文中,多智能体相关的占比明显上升。代表性工作包括 MetaGPT、ChatDev、AgentVerse 等。

发现二:工具学习是核心能力

约 15% 的论文专门研究 Agent 如何学习和使用工具。这个方向的突破让 Agent 从"能说"进化到"能做"。

发现三:应用场景多元化

早期 Agent 主要用于代码生成和问答,现在已经扩展到科学研究、机器人控制、游戏 AI、数据分析等。

6.3 高影响力论文 TOP 10

排名

论文

方向

引用数

1

ReAct: Synergizing Reasoning and Acting

规划与推理

4521

2

AutoGPT: An Autonomous GPT-4 Experiment

框架与平台

3208

3

Generative Agents

多智能体协作

2893

4

ToolBench: Towards Automated Tool Learning

工具学习

1856

5

HuggingGPT: Solving AI Tasks with ChatGPT

框架与平台

1423

6

Voyager: An Open-Ended Embodied Agent

应用场景

1234

7

Reflexion: Language Agents with Verbal RL

规划与推理

987

8

CAMEL: Communicative Agents

多智能体协作

876

9

WebGPT: Browser-assisted QA

应用场景

765

10

Tree of Thoughts: Deliberate Problem Solving

规划与推理

654

七、可视化地图

7.1 Open Science 的可视化方案

分析完数据后,我用 Open Science 的可视化功能生成了文献地图:

from open_science import Visualization

# 创建文献地图
viz = Visualization()
viz.add_papers(analyzed_papers)
viz.set_layout("force")
viz.set_node_size("citation_count")
viz.set_node_color("subdirection")
viz.save("llm_agent_map.html")

7.2 Canguo Science 的集成方案

我也尝试了 Canguo Science:

from canguo_science import LiteratureMap

# 初始化
lit_map = LiteratureMap(api_key=os.getenv("CANGUO_SCIENCE_KEY"))
lit_map.upload_papers(analyzed_papers)

# 生成地图
lit_map.create_map(
    title="LLM Agent 文献地图",
    clustering="subdirection",
    layout="t-SNE"
)
lit_map.add_timeline(year_range=(2022, 2025))
lit_map.export("llm_agent_canguo.html")

两种工具各有特点:

特性

Open Science

Canguo Science

界面语言

英文

中文

交互性

部署方式

开源自托管

云服务

数据安全

完全可控

需上传数据

八、踩坑记录

坑一:论文分类不一致

同样的论文,不同 Prompt 得到不同分类。解决方法是固定分类体系,置信度低于 6 分的结果用第二个模型复核。

坑二:API 限流

批量调用时被限流,浪费大量时间。解决方法是实现令牌桶限流器:

import time
from collections import deque

class RateLimiter:
    def __init__(self, max_calls: int, period: float):
        self.max_calls = max_calls
        self.period = period
        self.calls = deque()

    def acquire(self):
        now = time.time()
        while self.calls and self.calls[0] < now - self.period:
            self.calls.popleft()

        if len(self.calls) >= self.max_calls:
            sleep_time = self.calls[0] + self.period - now
            if sleep_time > 0:
                time.sleep(sleep_time)
                self.calls.popleft()

        self.calls.append(time.time())

坑三:数据缺失

约 8% 的论文没有摘要。解决方法是标记缺失数据,分析时单独统计。

九、工具对比总结

经过这次完整的研究流程,我对几个工具有了更深入的了解:

工具

适用场景

推荐指数

个人体验

OpenAI API

高质量生成、复杂推理

⭐⭐⭐⭐⭐

模型能力强,需要科学上网

Claude

长文本分析、代码生成

⭐⭐⭐⭐⭐

上下文长,适合复杂任务

CanguoAI

批量处理、结构化任务

⭐⭐⭐⭐

国内直达,性价比高

Open Science

文献管理、可视化

⭐⭐⭐⭐

功能完整,开源可控

Canguo Science

快速可视化、中文用户

⭐⭐⭐⭐

集成度高,上手快

我的选择:

• 日常研究:CanguoAI + Canguo Science(方便快捷)

• 重要论文:OpenAI + Open Science(质量优先)

• 敏感数据:Open Science 自托管(数据安全)

十、后续计划

这次分析只是第一步,后续我还打算:

  • 持续更新:每月自动抓取新论文,更新地图
  • 深入分析:对重点论文做全文精读
  • 对比实验:测试不同 Agent 框架的效果
  • 实践应用:基于分析结果开发自己的 Agent 系统

如果你也在做 LLM Agent 相关的研究,欢迎交流。

结语

LLM Agent 是 AI 发展的重要方向,文献量很大但并非无规律可循。通过系统化的分析,我们可以更快地把握领域全貌,找到自己的研究切入点。

这次研究让我有两点体会:

  • 第一,工具选对事半功倍。不同的工具适合不同的场景,学会组合使用才能效率最大化。
  • 第二,研究方法比工具重要。工具只是手段,真正有价值的是你的研究问题和思考方式。

希望这篇记录对你有帮助。如果有更多问题,欢迎继续交流。

声明:本文仅为个人研究记录,涉及的工具均为实际使用后的客观描述。CanguoAI、Canguo Science、Open Science 等名称仅为说明工具功能,不构成任何推荐。工具选择应根据实际需求和条件决定。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐