DeerFlow代码风格指南:写出符合项目规范的高质量代码
DeerFlow是一个社区驱动的深度研究框架,结合了语言模型与网络搜索、爬取和Python执行等工具,同时为开源社区做出贡献。编写符合项目规范的高质量代码是参与DeerFlow开发的重要一环,本指南将详细介绍DeerFlow的代码风格规范,帮助开发者快速上手并融入项目。## 为什么代码风格很重要?在协作开发中,统一的代码风格能够提高代码的可读性、可维护性和可扩展性。对于DeerFlow这样
DeerFlow代码风格指南:写出符合项目规范的高质量代码
DeerFlow是一个社区驱动的深度研究框架,结合了语言模型与网络搜索、爬取和Python执行等工具,同时为开源社区做出贡献。编写符合项目规范的高质量代码是参与DeerFlow开发的重要一环,本指南将详细介绍DeerFlow的代码风格规范,帮助开发者快速上手并融入项目。
为什么代码风格很重要?
在协作开发中,统一的代码风格能够提高代码的可读性、可维护性和可扩展性。对于DeerFlow这样的开源项目而言,良好的代码风格有助于吸引更多贡献者,促进项目的健康发展。遵循代码风格指南可以减少代码审查中的争议,让团队成员更专注于功能实现而非格式问题。
后端(Python)代码风格规范
代码检查与格式化工具
DeerFlow后端使用ruff进行代码检查和格式化。ruff是一个快速、高效的Python代码检查工具,能够帮助开发者自动发现并修复代码中的风格问题。
# 检查代码问题
make lint
# 自动修复并格式化代码
make format
这些命令在backend/Makefile中定义,确保了代码风格检查的便捷性。
基本风格规则
- 行长度:最大240个字符,允许在不影响可读性的前提下适当放宽
- Python版本:支持Python 3.12及以上版本的特性
- 类型提示:函数签名必须使用类型提示,提高代码的可读性和可维护性
- 字符串引号:使用双引号
"定义字符串 - 缩进:使用4个空格进行缩进,不允许使用制表符
- 导入顺序:按标准库、第三方库、本地模块的顺序分组导入
文档字符串规范
公共函数和类必须包含文档字符串,采用Google风格。文档字符串应清晰描述函数的功能、参数、返回值和可能的异常。
def create_chat_model(name: str, thinking_enabled: bool = False) -> BaseChatModel:
"""Create a chat model instance from configuration.
Args:
name: The model name as defined in config.yaml
thinking_enabled: Whether to enable extended thinking
Returns:
A configured LangChain chat model instance
Raises:
ValueError: If the model name is not found in configuration
"""
...
命名规范
- 函数和变量:使用小写字母,单词之间用下划线分隔(snake_case)
- 类名:使用首字母大写的驼峰式命名(CamelCase)
- 常量:使用全大写字母,单词之间用下划线分隔
分支命名与提交信息
- 分支命名:使用描述性的分支名,如
feature/add-new-tool、fix/sandbox-timeout、docs/update-readme - 提交信息:采用清晰、简洁的格式,包含类型前缀和详细描述
feat: add support for Claude 3.5 model
- Add model configuration in config.yaml
- Update model factory to handle Claude-specific settings
- Add tests for new model
提交类型前缀包括:feat:(新功能)、fix:(bug修复)、docs:(文档)、refactor:(代码重构)、test:(测试)、chore:(构建/配置更改)。
前端(TypeScript/React)代码风格规范
代码检查与格式化工具
DeerFlow前端使用ESLint和Prettier进行代码检查和格式化。相关命令在frontend/package.json中定义:
# 运行ESLint检查
pnpm lint
# 自动修复ESLint问题
pnpm lint:fix
# 同时运行ESLint和类型检查
pnpm check
ESLint配置
前端的ESLint配置在frontend/eslint.config.js中定义,主要规则包括:
- 忽略
.next目录、UI组件和AI元素组件 - 使用TypeScript-ESLint的推荐规则
- 强制导入顺序:内建模块、外部模块、内部模块、父模块、兄弟模块、索引模块等
- 允许未使用的变量以
_开头
代码组织
前端项目结构遵循Next.js App Router规范,主要目录结构如下:
src/
├── app/ # Next.js App Router pages
├── components/ # React components
├── core/ # Core business logic
├── hooks/ # Custom React hooks
├── lib/ # Shared libraries & utilities
├── server/ # Server-side code
└── styles/ # Global styles
类型定义
前端代码大量使用TypeScript,要求为所有组件和函数提供明确的类型定义。这有助于在开发阶段捕获类型错误,提高代码质量。
通用最佳实践
代码复用
尽可能抽象可复用的逻辑为函数或组件,避免代码重复。对于后端,可以创建工具函数和通用类;对于前端,可以开发自定义Hooks和UI组件。
错误处理
所有代码都应包含适当的错误处理机制,避免程序崩溃或产生不可预期的行为。后端使用try-except块捕获异常,前端使用try-catch和错误边界(Error Boundary)处理错误。
测试
编写单元测试和集成测试是保证代码质量的重要手段。后端测试放在tests/目录下,与源代码结构保持一致;前端测试可以使用Jest和React Testing Library。
代码审查
在提交Pull Request之前,确保:
- 所有测试通过:
uv run pytest(后端) - 代码风格检查通过:
make lint(后端)或pnpm lint(前端) - 代码已格式化:
make format(后端)或pnpm format(前端) - 更新了相关文档
PR描述应包含:变更内容、变更原因、实现方法和测试方式。
总结
遵循DeerFlow代码风格指南是编写高质量代码的基础,也是参与开源贡献的重要前提。通过使用统一的代码检查工具、遵循命名规范、编写清晰的文档和测试,我们可以共同维护一个健康、可维护的代码库。
无论是后端的Python代码还是前端的TypeScript/React代码,都应该注重可读性、可维护性和可扩展性。如果你对代码风格有任何疑问,可以查阅项目中的backend/CONTRIBUTING.md文档,或在GitHub上发起讨论。
让我们一起努力,为DeerFlow项目贡献优雅、高效的代码! 🚀
更多推荐



所有评论(0)