# CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## 项目概述 MedResearcher 是一个给予用户输入的自动实验平台,其会给予用户指定的研究目标,通过mcp访问特定数据集并撰写代码以构建实验。 ## 技术栈 1. 后端编程语言:Python 2. python管理器:uv 3. 爬虫工具:Crawl4AI ## 各个模块的主文件 1. 论文爬取主文件: papers_crawler.py 2. pdf解析主文件: pdf_parser.py 3. 实验运行主文件: experiment_runner.py ## 文件结构 ``` / ├── dataset/ # 数据存放目录 │ └── mimic.csv # 存放所有需要处理的与mimic相关论文的基础信息 ├── papers_crawler.py # 论文爬取主文件 ├── pdf_parser.py # pdf解析主文件 ├── experiment_runner.py # 实验运行主文件 ├── src/ # 源代码目录 │ └── utils/ # 工具函数目录 │ └── csv_utils.py # CSV文件操作工具函数 └── docs/ # Memory Bank系统文件 ├── CLAUDE-temp.md # 临时讨论和分析 ├── CLAUDE-plan.md # 当前任务计划 ├── CLAUDE-activeContext.md # 会话状态跟踪 ├── CLAUDE-patterns.md # 代码模式记录 ├── CLAUDE-decisions.md # 决策记录 ├── CLAUDE-troubleshooting.md # 问题解决方案 └── CLAUDE-config-variables.md # 配置变量参考 ``` ## 开发注意事项 ### 必须遵循的编程规范 1. **注释和文档规范** - 所有注释使用中文 - 关键代码逻辑必须添加行内注释 - 所有函数和类必须添加docstring,说明功能、参数和返回值 - 复杂算法需要详细说明思路 2. **命名规范** - 变量名、函数名:使用 snake_case - 类名:使用 PascalCase - 常量:使用 UPPER_SNAKE_CASE - 禁止使用中文变量名 3. **代码修改限制** - 单次修改不超过200行代码 - 单次修改不超过3个文件 - 严格遵循最小修改原则 - 绝对不允许修改与指定任务无关的代码 - 每次修改只针对当前任务的必要部分 - 优先修改而非新建:能通过修改解决的问题不新建文件 4. **代码风格规范** - 单行代码长度限制:120字符 - 使用类型提示(type hints)提高代码可读性 - 导入语句按照:标准库 → 第三方库 → 本地模块 的顺序排列 5. **错误处理和日志** - 必须使用 try-except 进行全面的错误捕获 - 使用 logging 模块替代 print 进行日志输出 - 日志级别:开发时使用DEBUG,生产环境使用INFO - 绝对不允许填写任何默认值或假设值 - 出现错误时应抛出明确的异常信息,便于问题排查 - 宁可程序报错,也不要用默认值掩盖潜在问题 6. **依赖管理** - 优先使用标准库 - 新增第三方依赖时需在注释中说明用途 - 使用 uv 管理所有依赖 7. **资源管理** - 文件操作必须使用 with 语句 - 网络请求设置合理超时(建议30秒) - 大文件使用流式处理避免内存溢出 8. **Git提交规范** - commit message 格式:`<类型>: <描述>` - 类型包括:feat(新功能)、fix(修复)、refactor(重构)、docs(文档)、test(测试) 9. **测试规范** - 不允许撰写独立的测试用例文件或测试代码 - 通过直接运行对应的主文件(papers_crawler.py、pdf_parser.py 或 experiment_runner.py)进行功能测试 - 主文件的 `if __name__ == "__main__":` 块中应包含基本的功能调用示例 - **严格限制main函数使用**:只有主文件(papers_crawler.py、pdf_parser.py、experiment_runner.py)允许包含 `if __name__ == "__main__":` 块,其他所有工具模块、库文件绝对不允许包含此类测试代码 - 函数可以被其他模块调用,不一定要在主文件中直接调用 - 作为MVP项目,重点关注理想情况下的功能实现,而非鲁棒性 **修改前验证**: ```bash # 确保现有功能正常 uv run <主文件>.py --test-mode ``` **修改后验证**: ```bash # 功能测试 uv run <主文件>.py --test-mode # 语法检查 python -m py_compile <修改的文件>.py # 如有类型提示,运行类型检查 mypy <修改的文件>.py --ignore-missing-imports ``` ### 代码组织原则 - 新功能优先集成到现有主文件中 - 只有在功能独立且复杂时才创建新的模块文件 - 保持代码结构简洁,避免过度模块化 ## uv常用指令 1. 初始化项目 ``` uv init ``` 2. 安装依赖 ``` uv add ``` 3. 运行项目 ``` uv run ``` 4. 打包项目 ``` uv build ``` ## AI协作指导规范 ### 核心理念 - **讨论优先**:任何修改前必须充分讨论,达成共识 - **上下文明确**:具体到文件、行号和函数名 - **渐进式实施**:通过子任务分解,逐步完成复杂需求 - **可追溯性**:所有决策和修改都有明确记录 - **深度思考**:除非任务不涉及代码的修改,不然默认使用ultrathink模式 ### 工作流程 #### 阶段1:需求理解与记录(必须执行) 用户提出需求后,立即在`docs/CLAUDE-temp.md`中记录: - 原始需求和我的理解 - 相关文件和函数(具体到行号) - 现有代码分析 - 潜在影响评估 - 任务复杂度判断(简单/复杂) #### 阶段2:任务规划 **简单任务**(修改≤2个函数,≤50行): - 严禁拆分子任务 - 直接形成单一执行计划 **复杂任务**(修改≥3个函数或需新建文件): - 必须拆分为3-5个子任务 - 每个子任务可独立验证 - 按依赖关系排序 #### 阶段3:计划正式化 用户确认后,在`docs/CLAUDE-plan.md`中记录详细计划: - 任务目标(30-50字) - 所需上下文(文件::行号::函数名) - 拟修改内容(具体到行) - 测试指令 - 验收标准 #### 阶段4:实施与验证 - 严格按计划执行 - 在`docs/CLAUDE-activeContext.md`实时更新进度 - 遇到计划外情况立即停止并讨论 - 完成后运行所有测试指令 ### Memory Bank系统 #### 更新机制 每个任务完成后,使用专门的SubAgent更新Memory Bank, SubAgent为memory-bank-synchronizer: ``` Task: memory-bank-synchronizer 功能: 更新所有Memory Bank文件,记录任务成果、决策和经验 ``` ### 工具使用原则与智能协作 #### 1. 基本操作策略 - **批量操作**:多个独立操作必须同时执行,提高效率 - **文件操作**:优先Edit而非Write,同文件多处修改用MultiEdit,新文件需明确理由 - **上下文管理**:合理分配主上下文和SubAgent的职责 #### 2. 上下文分层管理 - **主上下文**:负责用户对话、核心决策、当前计划制定 - **SubAgent**:承担大规模搜索、模式分析、依赖梳理等专门任务 - **协作原则**:主上下文保持聚焦,复杂分析任务交给专门SubAgent #### 3. MCP工具集成策略 - **Context7 MCP**:遇到不熟悉或新版本第三方库时的首选工具 - 使用场景:库文档查询、API使用示例、版本兼容性确认 - 触发条件:代码中涉及未知库调用或需要确认具体用法 - **其他MCP工具**:根据具体需求选择合适的MCP服务 - 数据集访问、外部API调用、特定领域知识查询 #### 4. SubAgent选择策略 - **代码搜索类**:使用code-searcher进行深度代码分析 - **记忆银行更新**:任务完成后使用memory-bank-synchronizer - **通用复杂任务**:使用general-purpose处理多步骤综合任务 ### TodoWrite工具使用 **强制使用场景**: - 任务包含3个以上步骤 - 复杂任务的子任务追踪 - 用户明确要求 **状态管理**: - 同时只能有1个in_progress - 完成立即标记completed - 遇阻标记pending并说明 ### 与编程规范的关系 - 编程规范定义"怎么写代码" - AI指导规范定义"怎么理解和修改代码" - 发生冲突时,编程规范优先