SkillAgentSearch skills...

Lunwentocode

将论文(Markdown格式)转换为可运行的Python代码(Mineru一键转化pdf为Markdown文件).

Install / Use

/learn @1sdv/Lunwentocode
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

🎓 LunwenToCode - 科研论文/毕业论文代码生成系统

将论文Markdown自动转换为可运行的Python代码,可以在这里快速体验:https://modelscope.cn/studios/lcclxy/lunwentocode

目录

  1. 项目概述
  2. 系统架构
  3. 核心组件详解
  4. 处理流程
  5. 数据模型
  6. 配置说明
  7. 使用方式
  8. 技术栈
  9. 扩展与定制

1. 项目概述

1.1 项目定位

LunwenToCode 是一个基于大语言模型(LLM)的智能代码生成系统,专门用于将科研论文或毕业论文自动转换为可运行的Python代码。系统采用多Agent协作架构,通过分析论文内容、识别研究方法、提取代码需求,最终生成完整的Python项目。

1.2 核心功能

| 功能 | 描述 | |------|------| | 📄 文稿解析 | 支持Markdown和PDF格式论文的读取与解析 | | 🔍 智能分析 | 自动识别论文类型、研究方法和代码需求 | | 💻 代码生成 | 根据论文内容生成完整的Python代码 | | ✅ 自动验证 | 语法检查、导入验证和自动修复 | | 📊 数据支持 | 支持额外Excel/CSV数据文件 |

1.3 支持的论文类型

  • 实证研究 (Empirical) - 基于数据的实证分析
  • 仿真研究 (Simulation) - 模拟仿真类研究
  • 算法设计 (Algorithm) - 算法实现与优化
  • 系统设计 (System Design) - 系统架构设计
  • 数据分析 (Data Analysis) - 数据处理与分析
  • 机器学习 (Machine Learning) - 机器学习模型

2. 系统架构

2.1 整体架构图

┌─────────────────────────────────────────────────────────────────────────────┐
│                         LunwenToCode 系统架构                                │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  ┌─────────────┐                                                            │
│  │   输入层    │  Markdown/PDF论文 + Excel/CSV数据文件                        │
│  └──────┬──────┘                                                            │
│         │                                                                   │
│         ▼                                                                   │
│  ┌─────────────────────────────────────────────────────────────────────┐    │
│  │                        工作流引擎 (Workflow)                         │    │
│  │  ┌───────────┐   ┌───────────┐   ┌───────────┐   ┌───────────┐      │    │
│  │  │  Parser   │ → │ Analyzer  │ → │  Coder    │ → │ Validator │      │    │
│  │  │  Agent    │   │  Agent    │   │  Agent    │   │  Agent    │      │    │
│  │  └───────────┘   └───────────┘   └───────────┘   └───────────┘      │    │
│  │       ↓               ↓               ↓               ↓             │    │
│  │   PDF转MD        提取需求         生成代码         验证修复           │    │
│  └─────────────────────────────────────────────────────────────────────┘    │
│         │                                                                   │
│         ▼                                                                   │
│  ┌─────────────────────────────────────────────────────────────────────┐    │
│  │                          LLM 服务层                                  │    │
│  │  ┌─────────────────────┐    ┌─────────────────────┐                 │    │
│  │  │   Analyzer LLM      │    │    Coder LLM        │                 │    │
│  │  │   (论文分析专用)     │    │   (代码生成专用)     │                 │    │
│  │  └─────────────────────┘    └─────────────────────┘                 │    │
│  └─────────────────────────────────────────────────────────────────────┘    │
│         │                                                                   │
│         ▼                                                                   │
│  ┌─────────────┐                                                            │
│  │   输出层    │  Python项目 (代码文件 + requirements.txt + README)           │
│  └─────────────┘                                                            │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

2.2 双LLM架构设计

系统采用双LLM架构,将论文分析和代码生成任务分离:

| LLM类型 | 用途 | 使用的Agent | |---------|------|-------------| | Analyzer LLM | 论文内容分析、结构提取 | AnalyzerAgent, ParserAgent | | Coder LLM | 代码生成、代码修复 | CoderAgent, ValidatorAgent |

设计优势

  • 可以为不同任务选择最适合的模型
  • 分析任务可使用擅长理解的模型
  • 代码任务可使用擅长编程的模型
  • 降低单一模型的负载压力

2.3 项目目录结构

lunwentocode/
├── app/                          # 核心应用模块
│   ├── __init__.py
│   ├── agents/                   # Agent实现
│   │   ├── __init__.py
│   │   ├── analyzer_agent.py     # 内容分析Agent
│   │   ├── coder_agent.py        # 代码生成Agent
│   │   ├── parser_agent.py       # PDF解析Agent
│   │   └── validator_agent.py    # 代码验证Agent
│   ├── core/                     # 核心模块
│   │   ├── __init__.py
│   │   ├── base_agent.py         # Agent基类
│   │   ├── llm.py                # LLM封装
│   │   └── workflow.py           # 工作流引擎
│   ├── schemas/                  # 数据模型
│   │   ├── __init__.py
│   │   └── models.py             # Pydantic模型定义
│   ├── config/                   # 配置模块
│   │   ├── __init__.py
│   │   └── settings.py           # 系统配置
│   └── utils/                    # 工具函数
│       ├── __init__.py
│       ├── file_utils.py         # 文件处理工具
│       ├── json_utils.py         # JSON解析工具
│       └── logger.py             # 日志工具
├── output/                       # 输出目录
├── main.py                       # 命令行入口
├── app.py                        # Web界面入口(Gradio)
├── requirements.txt              # 依赖列表
├── .env                          # 环境变量配置
└── README.md                     # 项目说明

3. 核心组件详解

3.1 工作流引擎 (ThesisToCodeWorkflow)

文件位置: app/core/workflow.py

工作流引擎是整个系统的核心调度器,负责协调各个Agent完成论文代码生成任务。

主要职责

  1. 任务管理 - 生成任务ID,创建工作目录
  2. 流程编排 - 按顺序调用各Agent
  3. 数据传递 - 在Agent之间传递处理结果
  4. 结果整合 - 生成最终的项目输出

核心方法

class ThesisToCodeWorkflow:
    async def run(
        self,
        md_path: str,           # 论文文件路径
        data_dir: Optional[str], # 数据文件目录
        output_dir: Optional[str] # 输出目录
    ) -> ProjectOutput:
        """执行完整的工作流"""

工作流六阶段

| 阶段 | 名称 | 描述 | |------|------|------| | Phase 1 | 读取Markdown文件 | 加载论文内容,支持PDF自动转换 | | Phase 2 | 数据文件扫描 | 扫描并提取Excel/CSV数据文件信息 | | Phase 3 | 内容分析 | 调用AnalyzerAgent分析论文 | | Phase 4 | 代码生成 | 调用CoderAgent生成代码 | | Phase 5 | 代码验证 | 调用ValidatorAgent验证并修复 | | Phase 6 | 生成项目 | 整合输出,生成完整项目 |


3.2 Agent基类 (BaseAgent)

文件位置: app/core/base_agent.py

所有Agent的抽象基类,采用无状态设计,每次调用独立无历史依赖。

设计特点

  • 无状态: 每次LLM调用独立,不保留对话历史
  • 统一接口: 所有Agent继承相同的基类
  • 灵活调用: 支持普通调用和工具调用两种模式

核心方法

class BaseAgent(ABC):
    @property
    @abstractmethod
    def system_prompt(self) -> str:
        """系统提示词 - 每个Agent必须实现"""
        pass
    
    @abstractmethod
    async def run(self, *args, **kwargs) -> Any:
        """执行Agent任务 - 每个Agent必须实现"""
        pass
    
    async def call_llm(self, prompt: str, context: Optional[str] = None) -> str:
        """独立调用LLM(无历史依赖)"""
        
    async def call_llm_with_tools(self, prompt: str, tools: List[Dict], ...) -> Any:
        """使用工具调用LLM"""

3.3 PDF解析Agent (ParserAgent)

文件位置: app/agents/parser_agent.py

负责将PDF论文转换为Markdown格式。

解析策略

PDF输入
    │
    ├─── URL方式 ──→ 直接提交Mineru API
    │
    └─── 本地文件
            │
            ├─── 尝试上传到Mineru API
            │
            └─── 失败则使用PyMuPDF本地解析(备用方案)

核心流程

  1. 判断输入类型 - URL或本地文件
  2. 调用Mineru API - 云端PDF转Markdown服务
  3. 轮询任务结果 - 等待转换完成
  4. 本地备用解析 - 使用PyMuPDF提取文本
  5. 结构化解析 - 使用LLM提取论文结构

输出结构

ParsedContent(
    title="论文标题",
    abstract="摘要内容",
    keywords=["关键词1", "关键词2"],
    chapters={"章节名": "章节内容"},
    tables=[{"name": "表格名", "description": "描述"}],
    raw_markdown="原始Markdown内容"
)

3.4 内容分析Agent (AnalyzerAgent)

文件位置: app/agents/analyzer_agent.py

分析论文内容,提取代码实现需求。

分析流程

ParsedContent输入
        │
        ▼
┌───────────────────┐
│ 1. 确定数据来源    │  → DataSourceType
└───────────────────┘
        │
        ▼
┌───────────────────┐
│ 2. 分析论文类型    │  → ThesisType + 研究方法
└───────────────────┘
        │
        ▼
┌───────────────────┐
│ 3. 生成代码任务    │  → List[CodeTask]
└───────────────────┘
        │
        ▼
┌───────────────────┐
│ 4. 确定技术栈      │  → tech_stack + libraries
└───────────────────┘
        │
        ▼
    AnalysisResult

代码任务类型

| 任务类型 | 描述 | |----------|------| | data_preprocessing | 数据预处理 | | data_analysis | 数据分析 | | model_training | 模型训练 | | visualization | 可视化 | | algorithm_impl | 算法实现 | | statistical_test | 统计检验 | | simulation | 仿真模拟 | | utility | 工具函数 |


3.5 代码生成Agent (CoderAgent)

文件位置: app/agents/coder_agent.py

根据分析结果生成Python代码。

设计特点

  • 无状态设计: 每个任务独立调用LLM,不依赖历史
  • 工具调用: 使用OpenAI Function Calling生成结构化代码
  • 上下文共享: 所有任务共享项目上下文信息

代码生成工具定义

CODER_TOOLS = [{
    "type": "function",
    "function": {
        "name": "generate_code",
        "parameters": {
            "properties": {
                "code": "完整的Python代码",
                "file_name": "代码文件名",
                "description": "代码功能描述",
                "dependencies": "依赖的Python库列表"
            }
        }
    }
}]

生成流程

  1. 构建上下文 - 整合项目背景、数据信息、任务列表
  2. 按优先级排序 - 按任务优先级顺序生成
  3. 独立生成代码 - 每个任务独立调用LLM
  4. 生成主程序 - 最后生成main.py协调所有模块

代码规范

  • 代码必须完整、可直接运行
  • 包含必要的import语句
  • 添加清晰的中文注释
  • 包含main函数作为入口
  • 包含错误处理

3.6 代码验证Agent (ValidatorAgent)

文件位置: app/agents/validator_agent.py

验证生成的代码并自动修复错误。

验证流程

GeneratedCode输入
        │
        ▼
┌───────────────────┐
│ 1. 语法检查        │  → ast.parse()
│    (失败则修复)    │
└───────────────────┘
        │
        ▼
┌───────────────────┐
│ 2. 导入检查        │  → 检查import语句
│    (失败则修复)    │
└───────────────────┘
        │
        ▼
┌───────────────────┐
│ 3. 静态分析        │  → 代码质量检查
└───────────────────┘
        │
        ▼
    ValidationResult

验证项目

| 检查项 | 方法 | 说明 | |--------|------|------| | 语法检查 | ast.parse() | 检查Python语法正确性 | | 导入检查 | AST分析 | 检查import语句 | | 静态分析 | AST遍历 | 检查main函数、异常处理、文档字符串 |

自动修复机制

  • 最大重试次数: 5次(可配置)
  • 使用LLM修复代码错误
  • 修复后重新验证
  • 超过重试次数返回失败

3.7 LLM封装 (LLM)

文件位置: app/core/llm.py

统一的LLM调用封装,基于OpenAI SDK。

特性

  • 异步调用: 使用AsyncOpenAI客户端
  • 超时控制: 默认5分钟超时
  • 自动重试: 最多3次重试,指数退避
  • 工具调用: 支持Function Calling

核心方法

class LLM:
View on GitHub
GitHub Stars197
CategoryDevelopment
Updated8d ago
Forks3

Languages

Python

Security Score

80/100

Audited on Mar 19, 2026

No findings