Files
lang-agent/.trae/rules/project_rules.md
Therainclouds bb91a68c78 feat: 添加项目文档和配置更新
docs: 完善README文档结构和内容
refactor: 更新配置类注释和文档字符串
style: 统一代码格式和命名规范
fix: 修正MCP服务器配置和依赖项
2025-11-07 15:50:22 +08:00

218 lines
5.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# LangChain Agent 项目编写规则
## 1. 项目概述
本项目是一个基于LangChain的AI助手系统专注于茶饮场景的智能对话和工具调用。项目采用模块化设计支持多种LLM后端和MCP工具集成。
## 2. 编码风格规范
### 2.1 基本原则
- 代码简洁明了,避免过度设计
- 保持一致的命名约定和代码结构
- 注重可维护性和可扩展性
- 遵循Python PEP 8编码规范
### 2.2 命名约定
- 类名PascalCase (例:`ToolManager`, `PipelineConfig`)
- 函数/变量名snake_case (例:`get_tools`, `tool_manager`)
- 常量UPPER_SNAKE_CASE (例:`DEFAULT_HOST`, `MAX_RETRIES`)
- 私有成员:单下划线前缀 (例:`_internal_method`)
- 特殊方法:双下划线 (例:`__init__`, `__post_init__`)
### 2.3 注释规范
- 类和公共方法必须有文档字符串
- 注释采用中英文混合,核心概念使用中文解释
- 复杂逻辑必须添加行内注释
- 文档字符串格式:
```python
def method_name(param1: str, param2: int) -> bool:
"""
方法功能简述
Args:
param1: 参数1说明
param2: 参数2说明
Returns:
返回值说明
"""
```
## 3. 配置管理规范
### 3.1 配置类设计
- 使用dataclass或pydantic模型定义配置类
- 所有配置类必须继承自`InstantiateConfig``PydanticBaseModel`
- 配置类必须包含`_target`字段,指向对应的实现类
- 配置类必须实现`setup()`方法,用于实例化目标对象
### 3.2 配置类示例
```python
@tyro.conf.configure(tyro.conf.SuppressFixed)
@dataclass
class ExampleConfig(InstantiateConfig):
_target: Type = field(default_factory=lambda: ExampleClass)
param1: str = "default_value"
"""参数1说明"""
param2: int = 10
"""参数2说明"""
def setup(self) -> ExampleClass:
return self._target(self)
```
### 3.3 配置文件管理
- 使用YAML格式存储配置文件
- 配置文件放在`configs/`目录下
- 敏感信息(如API密钥)通过环境变量获取
- 支持配置文件覆盖和合并
## 4. Pydantic集成规范
### 4.1 使用场景
- API请求/响应模型定义
- 数据验证和序列化
- 配置管理(与dataclass并存)
- 复杂数据结构定义
### 4.2 Pydantic模型设计
- 继承自`PydanticBaseModel`基类
- 使用类型注解明确字段类型
- 提供默认值和验证规则
- 使用Field类添加元数据
### 4.3 Pydantic模型示例
```python
class ExampleModel(PydanticBaseModel):
name: str = Field(..., description="名称")
count: int = Field(default=0, ge=0, description="计数")
tags: List[str] = Field(default_factory=list, description="标签列表")
class Config:
extra = "forbid" # 禁止额外字段
```
## 5. 工具开发规范
### 5.1 工具基类
- 所有工具必须继承自`LangToolBase`
- 实现`get_tool_fnc()`方法,返回工具函数列表
- 工具函数必须包含类型注解和文档字符串
### 5.2 工具函数规范
- 函数签名必须包含类型注解
- 参数必须有默认值和说明
- 返回值必须明确类型
- 异步函数必须标记为async
### 5.3 工具注册
- 工具通过配置类注册到`ToolManager`
- 配置类名称必须以`Config`结尾
- 工具配置必须包含`use_tool`布尔标志
## 6. 日志和错误处理
### 6.1 日志规范
- 使用loguru库进行日志记录
- 日志级别DEBUG, INFO, WARNING, ERROR
- 关键操作必须记录INFO级别日志
- 异常必须记录ERROR级别日志
### 6.2 错误处理
- 使用try-except捕获异常
- 异常信息必须包含上下文
- 关键路径必须有异常处理
- 避免捕获过于宽泛的异常
## 7. 测试规范
### 7.1 测试结构
- 单元测试放在对应模块的`tests/`目录
- 集成测试放在项目根目录的`tests/`目录
- 测试文件名以`test_`开头
### 7.2 测试要求
- 所有公共方法必须有单元测试
- 关键业务逻辑必须有集成测试
- 测试覆盖率不低于80%
- 使用pytest框架进行测试
## 8. 文档规范
### 8.1 代码文档
- 所有模块必须有模块级文档字符串
- 公共类和方法必须有文档字符串
- 复杂算法必须有详细注释
### 8.2 项目文档
- README.md包含项目介绍和快速开始指南
- API文档放在`docs/api/`目录
- 架构文档放在`docs/architecture/`目录
## 9. 版本控制规范
### 9.1 Git提交
- 使用Conventional Commits规范
- 提交格式:`type(scope): description`
- 类型feat, fix, docs, style, refactor, test, chore
### 9.2 分支管理
- 主分支main
- 开发分支develop
- 功能分支feature/功能名
- 修复分支fix/问题描述
## 10. 依赖管理
### 10.1 依赖规范
- 使用pyproject.toml管理项目依赖
- 生产依赖放在dependencies列表
- 开发依赖放在dev-dependencies列表
- 定期更新依赖版本
### 10.2 环境管理
- 使用虚拟环境隔离依赖
- 敏感配置通过环境变量管理
- 使用.env文件存储本地配置
## 11. 性能和安全
### 11.1 性能考虑
- 避免不必要的计算和IO操作
- 使用缓存减少重复计算
- 异步处理耗时操作
- 监控关键性能指标
### 11.2 安全规范
- 敏感信息不得硬编码
- API密钥通过环境变量获取
- 输入数据必须验证
- 遵循最小权限原则
## 12. 云端MCP集成
### 12.1 MCP配置
- 默认使用云端MCP服务`https://xiaoliang.quant-speed.com/api/mcp/`
- 支持本地MCP服务配置覆盖
- 使用streamable-http传输协议
### 12.2 工具调用
- 通过ClientToolManager管理MCP工具
- 支持工具动态加载和调用
- 异常处理和重试机制
## 13. 代码审查
### 13.1 审查要点
- 代码风格一致性
- 功能实现正确性
- 性能和安全考虑
- 测试覆盖率
### 13.2 审查流程
- 所有代码必须经过审查
- 使用Pull Request进行审查
- 至少一人审查通过才能合并
- 自动化检查必须通过