Update(Documents): 更新了全部的文档,使得他更符合新的需求

This commit is contained in:
Guan Yuankai 2025-12-17 11:12:53 +08:00
parent d1495fc446
commit 2f99b3b821
14 changed files with 546 additions and 412 deletions

View File

@ -5,21 +5,27 @@
* **日期**: [YYYY-MM-DD]
## 1. 背景 (Context)
*描述我们需要解决的问题是什么,以及当前的限制条件。*
*例如:当前的标书生成速度过慢(平均 5分钟因为是同步调用 LLM。并发量上来后服务器阻塞严重。*
## 2. 决策 (Decision)
*描述我们决定做什么。*
*例如:我们将引入 Celery + Redis 实现异步任务队列,将生成任务剥离出主线程。*
## 3. 备选方案 (Alternatives)
*我们还考虑了什么方案?为什么没选?*
* **方案 A**:使用 Python 原生 asyncio。
* *原因*CPU 密集型任务下 asyncio 表现不佳,且无法跨机器扩展。
* *原因*CPU 密集型任务下 asyncio 表现不佳,且无法跨机器扩展。
* **方案 B**:使用 Kafka。
* *原因*对于当前体量Kafka 运维成本过高Redis 足够轻量。
* *原因*对于当前体量Kafka 运维成本过高Redis 足够轻量。
## 4. 后果 (Consequences)
*决策带来的好处和坏处(权衡)。*
* **好**API 响应时间降至 100ms支持水平扩展 Worker 节点。
* **坏**:增加了运维 Redis 和 Celery Worker 的复杂度;调试异步任务比同步代码困难。

BIN
Template/ADR_Template.pdf Normal file

Binary file not shown.

View File

@ -3,16 +3,23 @@
本项目的所有显著更改都将记录在此文件中。
## [Unreleased]
### Added
- 新增了 Docker 部署脚本 (MR-102)。
- 支持了 GPT-4o 模型接口。
## [1.0.1] - 2025-11-04
### Fixed
- 修复了用户登录时 Token 过期导致的 500 错误 (#45)。
- 修复了移动端 CSS 样式错乱问题。
## [1.0.0] - 2025-10-01
### Added
- 初始化项目,完成基础架构搭建。
- 实现标书生成的 MVP 版本。

Binary file not shown.

View File

@ -6,6 +6,7 @@
这里写项目描述。例如:本项目是“南方电网标书生成系统”的后端服务,基于 LLM 实现标书内容的自动化生成与审核。
🛠 技术栈
- **Language**: Python 3.10+
- **Framework**: FastAPI, LangChain
- **Database**: PostgreSQL, Redis
@ -15,6 +16,7 @@
1. 环境准备
确保本地已安装:
- Docker & Docker Compose
- Python 3.10+ (推荐使用 Conda)
@ -32,32 +34,33 @@ pip install -r requirements.txt
docker-compose up -d db redis
启动服务
uvicorn main:app --reload
访问 http://localhost:8000/docs 查看 API 文档。
访问 <http://localhost:8000/docs> 查看 API 文档。
🏗 架构与目录结构
目录结构
/src
```/src
/api # 接口层
/core # 核心配置与工具
/services # 业务逻辑
/models # 数据库模型
tests/ # 单元测试
docs/ # 详细文档
```
.
├─docs # 详细文档
```.
├─docs # 详细文档
├─src
│ ├─api # 接口层
│ ├─core # 核心配置与工具
│ ├─models # 数据库模型
│ └─services # 业务逻辑
└─tests # 单元测试
│ ├─api # 接口层
│ ├─core # 核心配置与工具
│ ├─models # 数据库模型
│ └─services # 业务逻辑
└─tests # 单元测试
```
架构图
这里插入图片链接
👥 维护者
· Owner@管元恺(oldpipe0123@gmail.com)
· Owner@管元恺(<oldpipe0123@gmail.com>)
· Backup:@陈长文
🤝 贡献指南(公司项目不需要)

Binary file not shown.

View File

@ -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.

View File

@ -1,16 +1,24 @@
# PULL REQUEST TEMPLATE
## 📝 变更目的 (Objective)
## 🛠 变更内容 (Changes)
- [ ] 核心逻辑:修改了 X 算法的权重计算方式
- [ ] 数据库:新增 `user_status` 字段
- [ ] 配置:在 `config.yaml` 中添加了 Redis 超时设置
## 📸 测试截图/证据 (Screenshots / Proof)
## 🧪 测试计划 (Test Plan)
1. 单元测试:运行 `pytest tests/auth` 通过
2. 手动测试:模拟用户登录失败 3 次,验证验证码是否弹出
## ⚠️ 风险与副作用 (Risks & Side Effects)
## ✅ 自查清单 (Self Checklist)
- [ ] 我的代码遵循项目的代码风格 (Lint 通过)
- [ ] 我已经添加了必要的注释/文档
- [ ] 我没有提交敏感信息 (Passwords/Tokens)

Binary file not shown.

50
vscode/.editorconfig Normal file
View File

@ -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

View File

@ -1,22 +1,24 @@
{
"recommendations": [
"ms-python.python",
"ms-python.black-formatter",
"ms-python.flake8",
"ms-vscode.cpptools",
"ms-vscode.cpptools-extension-pack",
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"vscjava.vscode-java-pack",
"shengchen.vscode-checkstyle",
"editorconfig.editorconfig",
"eamodio.gitlens",
"mhutchie.git-graph"
],
"unwantedRecommendations": []
"recommendations": [
// --- Python ---
"ms-python.python",
"ms-python.pylint", // Flake8 ()
"ms-python.autopep8", // Black ( Tab )
// --- C++ ---
"ms-vscode.cpptools",
"ms-vscode.cpptools-extension-pack",
// --- Java ---
"vscjava.vscode-java-pack",
"shengchen.vscode-checkstyle", // google_checks.xml Java
// --- / (JS/TS) ---
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode", // .prettierrc Tab
// --- ---
"editorconfig.editorconfig", // Tab/
"eamodio.gitlens",
"mhutchie.git-graph"
],
"unwantedRecommendations": [
"ms-python.black-formatter" //
]
}

View File

@ -1,39 +1,76 @@
// .vscode/settings.json
{
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
},
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter"
},
"C_Cpp.clang_format_style": "file",
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
}
},
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
}
},
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[java]": {
"editor.defaultFormatter": "redhat.java" },
"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"
// --- ---
// 使 Tab
"editor.insertSpaces": false,
"editor.tabSize": 4,
"editor.detectIndentation": false, //
// 100 线
"editor.rulers": [
100
],
"editor.wordWrapColumn": 100,
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
},
// --- Python () ---
"[python]": {
// Black Autopep8 ( Black Tab)
"editor.defaultFormatter": "ms-python.autopep8",
"editor.insertSpaces": false,
"editor.tabSize": 4
},
// Autopep8 100 Tab
"autopep8.args": [
"--max-line-length",
"100",
"--ignore",
"E121" //
],
// Pylint
"pylint.args": [
"--rcfile=${workspaceFolder}/.pylintrc"
],
// Python ()
"python-envs.defaultEnvManager": "ms-python.python:conda",
"python-envs.defaultPackageManager": "ms-python.python:conda",
"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"
}