Update(Documents): 更新了全部的文档,使得他更符合新的需求
This commit is contained in:
parent
d1495fc446
commit
2f99b3b821
|
|
@ -5,21 +5,27 @@
|
||||||
* **日期**: [YYYY-MM-DD]
|
* **日期**: [YYYY-MM-DD]
|
||||||
|
|
||||||
## 1. 背景 (Context)
|
## 1. 背景 (Context)
|
||||||
|
|
||||||
*描述我们需要解决的问题是什么,以及当前的限制条件。*
|
*描述我们需要解决的问题是什么,以及当前的限制条件。*
|
||||||
*例如:当前的标书生成速度过慢(平均 5分钟),因为是同步调用 LLM。并发量上来后,服务器阻塞严重。*
|
*例如:当前的标书生成速度过慢(平均 5分钟),因为是同步调用 LLM。并发量上来后,服务器阻塞严重。*
|
||||||
|
|
||||||
## 2. 决策 (Decision)
|
## 2. 决策 (Decision)
|
||||||
|
|
||||||
*描述我们决定做什么。*
|
*描述我们决定做什么。*
|
||||||
*例如:我们将引入 Celery + Redis 实现异步任务队列,将生成任务剥离出主线程。*
|
*例如:我们将引入 Celery + Redis 实现异步任务队列,将生成任务剥离出主线程。*
|
||||||
|
|
||||||
## 3. 备选方案 (Alternatives)
|
## 3. 备选方案 (Alternatives)
|
||||||
|
|
||||||
*我们还考虑了什么方案?为什么没选?*
|
*我们还考虑了什么方案?为什么没选?*
|
||||||
|
|
||||||
* **方案 A**:使用 Python 原生 asyncio。
|
* **方案 A**:使用 Python 原生 asyncio。
|
||||||
* *原因*:CPU 密集型任务下 asyncio 表现不佳,且无法跨机器扩展。
|
* *原因*:CPU 密集型任务下 asyncio 表现不佳,且无法跨机器扩展。
|
||||||
* **方案 B**:使用 Kafka。
|
* **方案 B**:使用 Kafka。
|
||||||
* *原因*:对于当前体量,Kafka 运维成本过高,Redis 足够轻量。
|
* *原因*:对于当前体量,Kafka 运维成本过高,Redis 足够轻量。
|
||||||
|
|
||||||
## 4. 后果 (Consequences)
|
## 4. 后果 (Consequences)
|
||||||
|
|
||||||
*决策带来的好处和坏处(权衡)。*
|
*决策带来的好处和坏处(权衡)。*
|
||||||
|
|
||||||
* **好**:API 响应时间降至 100ms;支持水平扩展 Worker 节点。
|
* **好**:API 响应时间降至 100ms;支持水平扩展 Worker 节点。
|
||||||
* **坏**:增加了运维 Redis 和 Celery Worker 的复杂度;调试异步任务比同步代码困难。
|
* **坏**:增加了运维 Redis 和 Celery Worker 的复杂度;调试异步任务比同步代码困难。
|
||||||
Binary file not shown.
|
|
@ -3,16 +3,23 @@
|
||||||
本项目的所有显著更改都将记录在此文件中。
|
本项目的所有显著更改都将记录在此文件中。
|
||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- 新增了 Docker 部署脚本 (MR-102)。
|
- 新增了 Docker 部署脚本 (MR-102)。
|
||||||
- 支持了 GPT-4o 模型接口。
|
- 支持了 GPT-4o 模型接口。
|
||||||
|
|
||||||
## [1.0.1] - 2025-11-04
|
## [1.0.1] - 2025-11-04
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- 修复了用户登录时 Token 过期导致的 500 错误 (#45)。
|
- 修复了用户登录时 Token 过期导致的 500 错误 (#45)。
|
||||||
- 修复了移动端 CSS 样式错乱问题。
|
- 修复了移动端 CSS 样式错乱问题。
|
||||||
|
|
||||||
## [1.0.0] - 2025-10-01
|
## [1.0.0] - 2025-10-01
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- 初始化项目,完成基础架构搭建。
|
- 初始化项目,完成基础架构搭建。
|
||||||
- 实现标书生成的 MVP 版本。
|
- 实现标书生成的 MVP 版本。
|
||||||
|
|
||||||
Binary file not shown.
|
|
@ -6,6 +6,7 @@
|
||||||
这里写项目描述。例如:本项目是“南方电网标书生成系统”的后端服务,基于 LLM 实现标书内容的自动化生成与审核。
|
这里写项目描述。例如:本项目是“南方电网标书生成系统”的后端服务,基于 LLM 实现标书内容的自动化生成与审核。
|
||||||
|
|
||||||
🛠 技术栈
|
🛠 技术栈
|
||||||
|
|
||||||
- **Language**: Python 3.10+
|
- **Language**: Python 3.10+
|
||||||
- **Framework**: FastAPI, LangChain
|
- **Framework**: FastAPI, LangChain
|
||||||
- **Database**: PostgreSQL, Redis
|
- **Database**: PostgreSQL, Redis
|
||||||
|
|
@ -15,6 +16,7 @@
|
||||||
|
|
||||||
1. 环境准备
|
1. 环境准备
|
||||||
确保本地已安装:
|
确保本地已安装:
|
||||||
|
|
||||||
- Docker & Docker Compose
|
- Docker & Docker Compose
|
||||||
- Python 3.10+ (推荐使用 Conda)
|
- Python 3.10+ (推荐使用 Conda)
|
||||||
|
|
||||||
|
|
@ -32,32 +34,33 @@ pip install -r requirements.txt
|
||||||
docker-compose up -d db redis
|
docker-compose up -d db redis
|
||||||
启动服务
|
启动服务
|
||||||
uvicorn main:app --reload
|
uvicorn main:app --reload
|
||||||
访问 http://localhost:8000/docs 查看 API 文档。
|
访问 <http://localhost:8000/docs> 查看 API 文档。
|
||||||
|
|
||||||
🏗 架构与目录结构
|
🏗 架构与目录结构
|
||||||
目录结构
|
目录结构
|
||||||
/src
|
|
||||||
|
```/src
|
||||||
/api # 接口层
|
/api # 接口层
|
||||||
/core # 核心配置与工具
|
/core # 核心配置与工具
|
||||||
/services # 业务逻辑
|
/services # 业务逻辑
|
||||||
/models # 数据库模型
|
/models # 数据库模型
|
||||||
tests/ # 单元测试
|
tests/ # 单元测试
|
||||||
docs/ # 详细文档
|
docs/ # 详细文档
|
||||||
|
```
|
||||||
|
|
||||||
.
|
```.
|
||||||
├─docs # 详细文档
|
├─docs # 详细文档
|
||||||
├─src
|
├─src
|
||||||
│ ├─api # 接口层
|
│ ├─api # 接口层
|
||||||
│ ├─core # 核心配置与工具
|
│ ├─core # 核心配置与工具
|
||||||
│ ├─models # 数据库模型
|
│ ├─models # 数据库模型
|
||||||
│ └─services # 业务逻辑
|
│ └─services # 业务逻辑
|
||||||
└─tests # 单元测试
|
└─tests # 单元测试
|
||||||
|
```
|
||||||
|
|
||||||
架构图
|
架构图
|
||||||
这里插入图片链接
|
这里插入图片链接
|
||||||
|
|
||||||
👥 维护者
|
👥 维护者
|
||||||
· Owner:@管元恺(oldpipe0123@gmail.com)
|
· Owner:@管元恺(<oldpipe0123@gmail.com>)
|
||||||
· Backup:@陈长文
|
· Backup:@陈长文
|
||||||
|
|
||||||
🤝 贡献指南(公司项目不需要)
|
|
||||||
Binary file not shown.
|
|
@ -0,0 +1,21 @@
|
||||||
|
# git commit template
|
||||||
|
|
||||||
|
## type (必填):提交的类别
|
||||||
|
|
||||||
|
- feat: 新功能 (feature)
|
||||||
|
- fix: 修补 bug
|
||||||
|
- docs: 仅文档更改 (documentation)
|
||||||
|
- style: 格式变动,不影响代码运行 (whitespace, formatting, missing semi-colons)
|
||||||
|
- refactor: 重构 (即不是新增功能,也不是修改bug的代码变动)
|
||||||
|
- perf: 提高性能的代码更改
|
||||||
|
- test: 增加测试或修改现有测试
|
||||||
|
- chore: 构建过程或辅助工具的变动 (maintain)
|
||||||
|
- revert: 回滚提交
|
||||||
|
|
||||||
|
## scope (选填):说明影响的范围(如模块名、组件名)
|
||||||
|
|
||||||
|
例:feat(auth): ..., fix(nav-bar): ...
|
||||||
|
|
||||||
|
## subject (必填)
|
||||||
|
|
||||||
|
简短描述,不超过 50 个字符,使用祈使句,结尾不加句号。
|
||||||
Binary file not shown.
|
|
@ -1,16 +1,24 @@
|
||||||
|
# PULL REQUEST TEMPLATE
|
||||||
|
|
||||||
## 📝 变更目的 (Objective)
|
## 📝 变更目的 (Objective)
|
||||||
|
|
||||||
## 🛠 变更内容 (Changes)
|
## 🛠 变更内容 (Changes)
|
||||||
|
|
||||||
- [ ] 核心逻辑:修改了 X 算法的权重计算方式
|
- [ ] 核心逻辑:修改了 X 算法的权重计算方式
|
||||||
- [ ] 数据库:新增 `user_status` 字段
|
- [ ] 数据库:新增 `user_status` 字段
|
||||||
- [ ] 配置:在 `config.yaml` 中添加了 Redis 超时设置
|
- [ ] 配置:在 `config.yaml` 中添加了 Redis 超时设置
|
||||||
|
|
||||||
## 📸 测试截图/证据 (Screenshots / Proof)
|
## 📸 测试截图/证据 (Screenshots / Proof)
|
||||||
|
|
||||||
## 🧪 测试计划 (Test Plan)
|
## 🧪 测试计划 (Test Plan)
|
||||||
|
|
||||||
1. 单元测试:运行 `pytest tests/auth` 通过
|
1. 单元测试:运行 `pytest tests/auth` 通过
|
||||||
2. 手动测试:模拟用户登录失败 3 次,验证验证码是否弹出
|
2. 手动测试:模拟用户登录失败 3 次,验证验证码是否弹出
|
||||||
|
|
||||||
## ⚠️ 风险与副作用 (Risks & Side Effects)
|
## ⚠️ 风险与副作用 (Risks & Side Effects)
|
||||||
|
|
||||||
## ✅ 自查清单 (Self Checklist)
|
## ✅ 自查清单 (Self Checklist)
|
||||||
|
|
||||||
- [ ] 我的代码遵循项目的代码风格 (Lint 通过)
|
- [ ] 我的代码遵循项目的代码风格 (Lint 通过)
|
||||||
- [ ] 我已经添加了必要的注释/文档
|
- [ ] 我已经添加了必要的注释/文档
|
||||||
- [ ] 我没有提交敏感信息 (Passwords/Tokens)
|
- [ ] 我没有提交敏感信息 (Passwords/Tokens)
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -0,0 +1,50 @@
|
||||||
|
root = true
|
||||||
|
|
||||||
|
# --- 全局设置 ---
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
indent_style = tab
|
||||||
|
indent_size = 4
|
||||||
|
tab_width = 4
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
max_line_length = 100
|
||||||
|
|
||||||
|
# --- C# 专属设置 (关键) ---
|
||||||
|
[*.cs]
|
||||||
|
# 1. 缩进:强制 Tab
|
||||||
|
indent_style = tab
|
||||||
|
|
||||||
|
# 2. 大括号风格:K&B (Open brace on same line)
|
||||||
|
# 这是一个“叛逆”的设置,因为 C# 默认是换行的
|
||||||
|
csharp_new_line_before_open_brace = none
|
||||||
|
csharp_new_line_before_else = true
|
||||||
|
csharp_new_line_before_catch = true
|
||||||
|
csharp_new_line_before_finally = true
|
||||||
|
|
||||||
|
# 3. 命名规范检查 (适配您的 UserDetail / GetUser / userName)
|
||||||
|
# 说明:EditorConfig 可以配置 Roslyn 分析器来检查命名
|
||||||
|
|
||||||
|
# 类 (Class) -> PascalCase (UserDetail)
|
||||||
|
dotnet_naming_rule.classes_must_be_pascal_case.severity = warning
|
||||||
|
dotnet_naming_rule.classes_must_be_pascal_case.symbols = classes
|
||||||
|
dotnet_naming_rule.classes_must_be_pascal_case.style = pascal_case
|
||||||
|
|
||||||
|
dotnet_naming_symbols.classes.applicable_kinds = class, struct, enum, interface
|
||||||
|
dotnet_naming_style.pascal_case.capitalization = pascal_case
|
||||||
|
|
||||||
|
# 方法 (Method) -> PascalCase (GetUser)
|
||||||
|
dotnet_naming_rule.methods_must_be_pascal_case.severity = warning
|
||||||
|
dotnet_naming_rule.methods_must_be_pascal_case.symbols = methods
|
||||||
|
dotnet_naming_rule.methods_must_be_pascal_case.style = pascal_case
|
||||||
|
|
||||||
|
dotnet_naming_symbols.methods.applicable_kinds = method
|
||||||
|
|
||||||
|
# 局部变量/参数 (Function Name/Local) -> camelCase (userName)
|
||||||
|
dotnet_naming_rule.locals_must_be_camel_case.severity = warning
|
||||||
|
dotnet_naming_rule.locals_must_be_camel_case.symbols = locals
|
||||||
|
dotnet_naming_rule.locals_must_be_camel_case.style = camel_case
|
||||||
|
|
||||||
|
dotnet_naming_symbols.locals.applicable_kinds = local, parameter
|
||||||
|
|
||||||
|
dotnet_naming_style.camel_case.capitalization = camel_case
|
||||||
|
|
@ -1,22 +1,24 @@
|
||||||
{
|
{
|
||||||
"recommendations": [
|
"recommendations": [
|
||||||
"ms-python.python",
|
// --- Python 核心与工具 ---
|
||||||
"ms-python.black-formatter",
|
"ms-python.python",
|
||||||
"ms-python.flake8",
|
"ms-python.pylint", // 替换 Flake8,用于静态检查 (命名规范、错误)
|
||||||
|
"ms-python.autopep8", // 替换 Black,用于代码格式化 (支持 Tab 缩进)
|
||||||
"ms-vscode.cpptools",
|
// --- C++ 开发 ---
|
||||||
"ms-vscode.cpptools-extension-pack",
|
"ms-vscode.cpptools",
|
||||||
|
"ms-vscode.cpptools-extension-pack",
|
||||||
"dbaeumer.vscode-eslint",
|
// --- Java 开发 ---
|
||||||
"esbenp.prettier-vscode",
|
"vscjava.vscode-java-pack",
|
||||||
|
"shengchen.vscode-checkstyle", // 配合 google_checks.xml 修改版可强制 Java 规范
|
||||||
"vscjava.vscode-java-pack",
|
// --- 前端/通用 (JS/TS) ---
|
||||||
"shengchen.vscode-checkstyle",
|
"dbaeumer.vscode-eslint",
|
||||||
|
"esbenp.prettier-vscode", // 注意:需配置 .prettierrc 以支持 Tab
|
||||||
"editorconfig.editorconfig",
|
// --- 通用工具 ---
|
||||||
"eamodio.gitlens",
|
"editorconfig.editorconfig", // 核心:统一控制所有语言的 Tab/缩进
|
||||||
"mhutchie.git-graph"
|
"eamodio.gitlens",
|
||||||
],
|
"mhutchie.git-graph"
|
||||||
|
],
|
||||||
"unwantedRecommendations": []
|
"unwantedRecommendations": [
|
||||||
|
"ms-python.black-formatter" // 明确列入黑名单,防止误装
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -1,39 +1,76 @@
|
||||||
// .vscode/settings.json
|
|
||||||
{
|
{
|
||||||
"editor.formatOnSave": true,
|
// --- 全局核心风格配置 ---
|
||||||
"editor.codeActionsOnSave": {
|
// 强制使用 Tab,严禁空格
|
||||||
"source.organizeImports": "explicit"
|
"editor.insertSpaces": false,
|
||||||
},
|
"editor.tabSize": 4,
|
||||||
|
"editor.detectIndentation": false, // 防止打开非标文件时被带偏
|
||||||
"[python]": {
|
// 行宽 100 字符辅助线
|
||||||
"editor.defaultFormatter": "ms-python.black-formatter"
|
"editor.rulers": [
|
||||||
},
|
100
|
||||||
|
],
|
||||||
"C_Cpp.clang_format_style": "file",
|
"editor.wordWrapColumn": 100,
|
||||||
|
"editor.formatOnSave": true,
|
||||||
"[javascript]": {
|
"editor.codeActionsOnSave": {
|
||||||
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
"source.organizeImports": "explicit"
|
||||||
"editor.codeActionsOnSave": {
|
},
|
||||||
"source.fixAll.eslint": "explicit"
|
// --- Python 配置 (关键修改) ---
|
||||||
}
|
"[python]": {
|
||||||
},
|
// 替换 Black 为 Autopep8 (因为 Black 不支持 Tab)
|
||||||
|
"editor.defaultFormatter": "ms-python.autopep8",
|
||||||
"[typescript]": {
|
"editor.insertSpaces": false,
|
||||||
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
"editor.tabSize": 4
|
||||||
"editor.codeActionsOnSave": {
|
},
|
||||||
"source.fixAll.eslint": "explicit"
|
// Autopep8 参数:强制 100 字符行宽,允许 Tab
|
||||||
}
|
"autopep8.args": [
|
||||||
},
|
"--max-line-length",
|
||||||
|
"100",
|
||||||
"[json]": {
|
"--ignore",
|
||||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
"E121" // 忽略部分缩进对齐警告
|
||||||
},
|
],
|
||||||
|
// Pylint 参数:指定配置文件路径
|
||||||
"[java]": {
|
"pylint.args": [
|
||||||
"editor.defaultFormatter": "redhat.java" },
|
"--rcfile=${workspaceFolder}/.pylintrc"
|
||||||
"java.format.settings.url": "java-style.xml",
|
],
|
||||||
"java.format.settings.profile": "GoogleStyle",
|
// Python 环境管理 (保留您原有的设置)
|
||||||
"java.checkstyle.enabled": true,
|
"python-envs.defaultEnvManager": "ms-python.python:conda",
|
||||||
"java.checkstyle.configuration": "${workspaceFolder}/checkstyle.xml",
|
"python-envs.defaultPackageManager": "ms-python.python:conda",
|
||||||
"java.checkstyle.version": "10.12.0"
|
"python-envs.pythonProjects": [],
|
||||||
|
// --- C++ 配置 ---
|
||||||
|
// 读取根目录的 .clang-format 文件 (Tab, K&B, BigCamel 等规则由此文件控制)
|
||||||
|
"C_Cpp.clang_format_style": "file",
|
||||||
|
// --- JavaScript / TypeScript 配置 ---
|
||||||
|
"[javascript]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||||
|
"editor.insertSpaces": false, // 覆盖 Prettier 默认的 Space
|
||||||
|
"editor.tabSize": 4,
|
||||||
|
"editor.codeActionsOnSave": {
|
||||||
|
"source.fixAll.eslint": "explicit"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"[typescript]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||||
|
"editor.insertSpaces": false, // 覆盖 Prettier 默认的 Space
|
||||||
|
"editor.tabSize": 4,
|
||||||
|
"editor.codeActionsOnSave": {
|
||||||
|
"source.fixAll.eslint": "explicit"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 注意:Prettier 通常优先读取 .prettierrc 文件。
|
||||||
|
// 如果您有 .prettierrc,请务必在其中设置 "useTabs": true, "tabWidth": 4
|
||||||
|
// --- JSON 配置 ---
|
||||||
|
"[json]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
// --- Java 配置 ---
|
||||||
|
"[java]": {
|
||||||
|
"editor.defaultFormatter": "redhat.java",
|
||||||
|
"editor.insertSpaces": false,
|
||||||
|
"editor.tabSize": 4
|
||||||
|
},
|
||||||
|
// Java 格式化规则文件 (需要您确保这两个 XML 也是配置为 Tab 缩进)
|
||||||
|
"java.format.settings.url": "java-style.xml",
|
||||||
|
"java.format.settings.profile": "GoogleStyle",
|
||||||
|
"java.checkstyle.enabled": true,
|
||||||
|
"java.checkstyle.configuration": "${workspaceFolder}/checkstyle.xml",
|
||||||
|
"java.checkstyle.version": "10.12.0"
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue