docs: 建立仓库基础架构、三分支规范与环境运行文档
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+53
@@ -0,0 +1,53 @@
|
||||
# Operating System Files
|
||||
.DS_Store
|
||||
.DS_Store?
|
||||
._*
|
||||
.Spotlight-V100
|
||||
.Trashes
|
||||
ehthumbs.db
|
||||
Thumbs.db
|
||||
|
||||
# Reference materials & heavy upstream copies (3GB+)
|
||||
.refs/
|
||||
|
||||
# Environment Variables & Local Overrides (Keep examples tracked)
|
||||
*.env
|
||||
*.env.*
|
||||
!*.env.example
|
||||
!configs/*.env.*.example
|
||||
!configs/*.env.example
|
||||
|
||||
# Runtime Data, Logs, and Databases
|
||||
data/
|
||||
logs/
|
||||
*.log
|
||||
*.sqlite
|
||||
*.sqlite3
|
||||
*.db
|
||||
*.db-journal
|
||||
*.db-wal
|
||||
|
||||
# Workspaces & Cache
|
||||
workspaces/
|
||||
.cache/
|
||||
tmp/
|
||||
temp/
|
||||
|
||||
# IDE / Editor Files
|
||||
.idea/
|
||||
.vscode/
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
# Note: Keep .cursor/rules tracked for team/project rules
|
||||
.cursor/*
|
||||
!.cursor/rules/
|
||||
!.cursor/rules/**
|
||||
|
||||
# Build artifacts & Binaries
|
||||
dist/
|
||||
build/
|
||||
bin/
|
||||
*.exe
|
||||
*.o
|
||||
*.a
|
||||
@@ -0,0 +1,74 @@
|
||||
# Chat-Agent-System (项目工作流与对话智能体系统)
|
||||
|
||||
本项目是一个面向企业与团队的高可用对话智能体(Chat Agent)系统,结合了知识库检索增强(RAG)、自动化 Agent 执行能力与安全审计机制。
|
||||
|
||||
---
|
||||
|
||||
## 一、 仓库三分支结构说明
|
||||
|
||||
根据系统架构与运维稳定性规范,本仓库固定维护三个分支:
|
||||
|
||||
| 分支名 | 定位 | 职责与准入规则 |
|
||||
| :--- | :--- | :--- |
|
||||
| **`dev`** | **开发分支** | **日常开发基线**。所有代码开发均在此分支或其衍生子分支(`feature/*`, `fix/*`)进行,子分支自测后合并回 `dev`。支持一个任务按功能拆解并逐步渐进式提交。 |
|
||||
| **`test`** | **测试分支** | **准生产实测分支**。当 `dev` 积累了一定功能阶段后合并至此,建立发布候选节点(`rc-vX.Y.Z`),进行真实环境部署与长期集成测试与运维检验。 |
|
||||
| **`main`** | **主分支** | **生产发布分支**。严禁直接提交。仅在 `test` 分支经过真实运维和测试验证达到发布标准后,将对应节点合并回 `main` 并打正式版本 Tag(`vX.Y.Z`)。 |
|
||||
|
||||
完整的分支流转模型、热修复流程与提交规范请参阅:[docs/workflow/BRANCH_AND_ENVIRONMENT_RULES.md](docs/workflow/BRANCH_AND_ENVIRONMENT_RULES.md)。
|
||||
|
||||
---
|
||||
|
||||
## 二、 三套服务环境架构(知识库共享 + 对话与数据隔离)
|
||||
|
||||
本系统为 `dev`、`test`、`main` 三个分支各提供了一套独立运行的服务环境:
|
||||
|
||||
```
|
||||
[ 共享基础设施: 知识库服务 (pgvector / regulations-db) ]
|
||||
│ (共享知识库索引)
|
||||
┌──────────────────────┼──────────────────────┐
|
||||
▼ ▼ ▼
|
||||
┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
|
||||
│ 开发环境 (dev) │ │ 测试环境 (test) │ │ 生产环境 (main) │
|
||||
├──────────────────┤ ├──────────────────┤ ├──────────────────┤
|
||||
│ 容器组:agent-dev │ │ 容器组:agent-test│ │ 容器组:agent-main│
|
||||
│ HTTP: 8080 │ │ HTTP: 8081 │ │ HTTP: 8000 │
|
||||
│ DB: 5433 (独占) │ │ DB: 5434 (独占) │ │ DB: 5435 (独占) │
|
||||
│ 独占对话记录/卷 │ │ 独占对话记录/卷 │ │ 独占对话记录/卷 │
|
||||
└──────────────────┘ └──────────────────┘ └──────────────────┘
|
||||
```
|
||||
|
||||
- **知识库共享**:三套环境均可连接同一个知识库向量检索服务,确保专业法规与企业标准数据集中维护、保持一致。
|
||||
- **对话与数据库严格隔离**:各环境拥有独立的数据库实例/库、独立的会话记录、独立的审计日志与工作区持久化卷,互不污染。
|
||||
|
||||
---
|
||||
|
||||
## 三、 快速启动与运维指南
|
||||
|
||||
项目在 `scripts/env-service.sh` 中提供了统一的环境管理工具:
|
||||
|
||||
```bash
|
||||
# 1. 启动共享知识库服务 (首次使用前启动)
|
||||
./scripts/env-service.sh shared start
|
||||
|
||||
# 2. 启动对应环境服务
|
||||
./scripts/env-service.sh dev start # 启动开发环境 (端口: 8080, DB: 5433)
|
||||
./scripts/env-service.sh test start # 启动测试环境 (端口: 8081, DB: 5434)
|
||||
./scripts/env-service.sh main start # 启动主分支生产环境 (端口: 8000, DB: 5435)
|
||||
|
||||
# 3. 检查环境状态
|
||||
./scripts/env-service.sh all status
|
||||
|
||||
# 4. 停止指定环境服务
|
||||
./scripts/env-service.sh dev stop
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、 开发任务拆分与逐步提交规范
|
||||
|
||||
进行功能研发时,遵循**“按功能层次拆分,过程逐步提交”**原则:
|
||||
1. **数据模型层** (`feat(db): ...`):数据表迁移、字段变更、实体定义。
|
||||
2. **业务逻辑层** (`feat(agent): ...`):核心 Agent 能力、工作流处理。
|
||||
3. **接口服务层** (`feat(api): ...`):HTTP/Web 路由及交互。
|
||||
4. **自动化测试** (`test(...): ...`):单元测试与联调集成测试。
|
||||
5. **文档与配置** (`docs(...): ...` / `chore(...): ...`):环境配置与说明文档。
|
||||
@@ -0,0 +1,250 @@
|
||||
# 研发分支与多套独立环境运行规范 (Branch & Environment Rules)
|
||||
|
||||
本规范为本系统代码仓库的强制性规范,涵盖 **Git 3 分支流转模型**、**任务功能拆分与渐进式提交**、**三套环境独立运行(知识库共享 + 对话与数据库隔离)** 以及 **运维操作指引**。
|
||||
|
||||
---
|
||||
|
||||
## 一、 Git 固定三分支体系与流转规范
|
||||
|
||||
本仓库严格固定维护 **3 个常驻分支**:
|
||||
|
||||
```
|
||||
(Feature/Fix 子分支)
|
||||
┌─────────────┐
|
||||
│ feature/*** │
|
||||
└──────┬──────┘
|
||||
(创建/自测) │ (合回)
|
||||
▼ ▼
|
||||
┌─────────────────────────────────┐
|
||||
│ 开发分支: dev │ <-- 所有日常开发在此进行,功能逐步提交
|
||||
└────────────────┬────────────────┘
|
||||
│ (积累一定阶段功能,准备长期部署实测)
|
||||
▼
|
||||
┌─────────────────────────────────┐
|
||||
│ 测试分支: test │ <-- 部署到测试环境,进行真实环境长期运维与测试
|
||||
└────────────────┬────────────────┘
|
||||
│ (测试分支经过实际运维和测试验证,达到发布标准)
|
||||
▼
|
||||
┌─────────────────────────────────┐
|
||||
│ 主分支: main (Release) │ <-- 生产发布基线,对应线上生产环境
|
||||
└─────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 1. 开发分支 (`dev`)
|
||||
- **定位**:日常开发核心集成分支。
|
||||
- **职责**:所有新功能(Features)、常规缺陷修复(Bugfixes)、日常重构均在 `dev` 分支推进。
|
||||
- **子分支策略**:
|
||||
- **简单任务**:可直接在 `dev` 分支上按功能拆分进行渐进式提交。
|
||||
- **中大型或独立功能**:必须从 `dev` 检出子分支,命名格式为:
|
||||
- `feature/<功能简述>` (如 `feature/session-isolation`)
|
||||
- `fix/<缺陷简述>` (如 `fix/llm-streaming-timeout`)
|
||||
- **合回机制**:子分支在开发者本地或容器中完成自测、通过单元测试和代码审查后,合并回 `dev` 分支(推荐保留提交历史或使用半快进合并)。合并完成后应及时删除临时子分支。
|
||||
|
||||
### 2. 测试分支 (`test`)
|
||||
- **定位**:长期实测与准生产验证分支(Staging / Pre-Release)。
|
||||
- **职责**:当 `dev` 分支积累了一定的业务功能或阶段里程碑,需要进行较长时间的真实环境部署、冒烟测试、压力测试、全链路联调以及运维验证时,将 `dev` 的对应阶段节点合并至 `test` 分支。
|
||||
- **节点打标**:
|
||||
- 在 `test` 分支部署实测时,建议在该节点上打上候选版本 Tag(如 `rc-v1.1.0-beta.1`)。
|
||||
- 测试期间发现的缺陷,若属于该候选版本的严重阻断问题,可在 `test` 分支修复并验证,验证完毕后必须**同步回合(Cherry-pick 或 Merge)至 `dev` 分支**;非阻断问题统一在 `dev` 中继续排期推进。
|
||||
|
||||
### 3. 主分支 (`main`)
|
||||
- **定位**:生产发布分支(Production / Release)。
|
||||
- **职责**:主分支的代码代表经过实际运维与测试检验、已达到生产可用标准的系统版本。
|
||||
- **发布准入标准**:
|
||||
- 严禁任何未经 `test` 分支充分测试验证的代码直接提交或合入 `main`。
|
||||
- 必须由 `test` 分支上的验证通过节点,以合并的方式提交至 `main`。
|
||||
- **发布打标**:
|
||||
- 每次合入 `main` 后,必须打上正式发布 Tag(语义化版本,如 `v1.0.0`, `v1.1.0`)。
|
||||
- **紧急热修复 (Hotfix)**:
|
||||
- 遇到线上紧急故障且 `test` 分支已有新开发代码时,从 `main` 检出 `hotfix/<issue>` 分支。
|
||||
- 修复完成并在专门隔离环境测试后,先合回 `main` 打补丁 Tag(如 `v1.0.1`),同时合并回 `test` 和 `dev` 分支。
|
||||
|
||||
---
|
||||
|
||||
## 二、 任务拆分与渐进式提交规范 (Progressive Commits)
|
||||
|
||||
为保证代码可追溯性、降低 Code Review 成本并利于排查回滚,**禁止将一个大任务的所有变更揉合成一个巨大的提交**。
|
||||
|
||||
### 1. 拆分原则
|
||||
一个完整的业务任务必须按功能层次、逻辑职责进行横向或纵向切分,并在开发过程中逐步提交:
|
||||
1. **数据模型与存储层提交**:定义数据库 Schema、ORM 映射、迁移脚本或接口实体。
|
||||
2. **核心业务逻辑与 Agent 算法层提交**:实现核心业务处理、Agent 工具、会话逻辑。
|
||||
3. **API / 适配层提交**:暴露 HTTP/gRPC 端点、集成外部组件或中间件。
|
||||
4. **单元与集成测试提交**:补充对应模块的自动化测试用例。
|
||||
5. **文档与配置更新提交**:同步更新环境参数配置、README 或设计文档。
|
||||
|
||||
### 2. 提交信息规范 (Conventional Commits)
|
||||
采用统一的 Git Commit 消息规范:
|
||||
```text
|
||||
<type>(<scope>): <subject>
|
||||
|
||||
[optional body]
|
||||
```
|
||||
- **Type 类型**:
|
||||
- `feat`: 新增功能(按功能拆分逐步提交)
|
||||
- `fix`: 修复缺陷
|
||||
- `refactor`: 代码重构(无功能改变与 Bug 修复)
|
||||
- `test`: 增加或修改测试用例
|
||||
- `docs`: 文档变动
|
||||
- `chore`: 构建工具、依赖库更新、脚手架配置等
|
||||
- `ci`: CI/CD 流程调整
|
||||
- **示例**:
|
||||
- `feat(db): 增加会话与多租户数据库模型迁移脚本`
|
||||
- `feat(agent): 实现知识库问答工具的多环境路由调用`
|
||||
- `test(agent): 增加知识库共享与对话隔离测试用例`
|
||||
- `chore(deploy): 配置 test 环境独立端口与 docker-compose`
|
||||
|
||||
---
|
||||
|
||||
## 三、 三套环境独立运行架构规范
|
||||
|
||||
每个分支在部署时对应一套完整的启动服务。必须严格遵循 **“知识库共享,对话数据与数据库隔离”** 的核心原则。
|
||||
|
||||
```
|
||||
┌──────────────────────────────────────────┐
|
||||
│ 共享基础设施: 知识库服务 │
|
||||
│ - pgvector / 向量检索 / 统一知识索引库 │
|
||||
│ - 共享数据卷: shared-kb-data │
|
||||
│ - 共享服务端口: 5432 (Internal) │
|
||||
└─────────────────────┬────────────────────┘
|
||||
│ (只读检索或统一管理通道)
|
||||
┌──────────────────────────────────┼──────────────────────────────────┐
|
||||
│ │ │
|
||||
▼ ▼ ▼
|
||||
┌─────────────────────────┐ ┌─────────────────────────┐ ┌─────────────────────────┐
|
||||
│ 开发环境 (dev) │ │ 测试环境 (test) │ │ 主干环境 (main) │
|
||||
│ 容器组: agent-dev-* │ │ 容器组: agent-test-* │ │ 容器组: agent-main-* │
|
||||
├─────────────────────────┤ ├─────────────────────────┤ ├─────────────────────────┤
|
||||
│ • 专属数据库: │ │ • 专属数据库: │ │ • 专属数据库: │
|
||||
│ agent_dev (Port 5433) │ │ agent_test (Port 5434)│ │ agent_main (Port 5435)│
|
||||
│ • 专属会话与存储卷: │ │ • 专属会话与存储卷: │ │ • 专属会话与存储卷: │
|
||||
│ data/dev/workspace │ │ data/test/workspace │ │ data/main/workspace │
|
||||
│ data/dev/conversations│ │ data/test/conversations data/main/conversations│
|
||||
│ dev-system-pgdata │ │ test-system-pgdata │ │ main-system-pgdata │
|
||||
│ • 应用服务端口: │ │ • 应用服务端口: │ │ • 应用服务端口: │
|
||||
│ HTTP: 8080 │ │ HTTP: 8081 │ │ HTTP: 8000 (生产) │
|
||||
│ Agent-Runner: 18765 │ │ Agent-Runner: 18766 │ │ Agent-Runner: 18767 │
|
||||
│ • 独立日志/SQLite: │ │ • 独立日志/SQLite: │ │ • 独立日志/SQLite: │
|
||||
│ dev-aux-data │ │ test-aux-data │ │ main-aux-data │
|
||||
└─────────────────────────┘ └─────────────────────────┘ └─────────────────────────┘
|
||||
```
|
||||
|
||||
### 1. 知识库共享规则 (Shared Knowledge Base)
|
||||
- **共享内容**:法规条文、行业政策、静态向量索引、规章库、系统公共知识文档。
|
||||
- **访问控制**:
|
||||
- 所有分支服务通过专用的 `POSTGRES_SHARED_KB_DSN` 连接同一个共享知识库容器(如 `shuimu-kb-shared`)。
|
||||
- 开发、测试与主分支服务在检索知识时,只读访问公共条目。
|
||||
- 知识库的结构升级或新增全量知识,统一由知识库迁移脚本维护,并提前通过版本兼容性测试。
|
||||
|
||||
### 2. 对话数据与业务数据库隔离规则 (Strict Data Isolation)
|
||||
- **隔离内容**:
|
||||
1. **对话上下文与历史记录 (Chat History & Sessions)**:包括用户聊天记录、Agent 规划轨迹、思考日志等。
|
||||
2. **业务数据库 (System DB)**:系统用户表、权限、配置状态、任务状态、审计表。
|
||||
3. **外发信箱与日志 (Outbox & SQLite & Temp Logs)**。
|
||||
4. **工作区目录 (Workspaces & Cache)**。
|
||||
- **隔离实现机制**:
|
||||
- **Docker 容器名隔离**:通过 `COMPOSE_PROJECT_NAME` 前缀 (`agent-dev`, `agent-test`, `agent-main`),服务容器互不覆盖。
|
||||
- **网络与端口隔离**:每个环境占用独立的宿主机端口映射(详见下表),互不冲突,支持在同一台机器或多台机器并存启动。
|
||||
- **存储卷隔离**:Docker Named Volume 或宿主机本地目录均以环境后缀命名,严禁多环境挂载同一会话或 DB 目录。
|
||||
|
||||
### 3. 环境配置矩阵表
|
||||
|
||||
| 配置项 | 共享知识库 (Shared) | 开发环境 (Dev) | 测试环境 (Test) | 主分支生产环境 (Main) |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| **Compose 项目名** | `agent-infra` | `agent-dev` | `agent-test` | `agent-main` |
|
||||
| **配置文件** | `configs/.env.shared` | `configs/.env.dev` | `configs/.env.test` | `configs/.env.main` |
|
||||
| **系统 DB 名称** | `regulations` (KB) | `agent_system_dev` | `agent_system_test` | `agent_system_main` |
|
||||
| **系统 DB 宿主端口** | `5432` | `5433` | `5434` | `5435` |
|
||||
| **App 业务 HTTP 端口**| - | `8080` | `8081` | `8000` |
|
||||
| **Agent Runner 端口** | - | `18765` | `18766` | `18767` |
|
||||
| **持久化数据目录** | `data/shared/kb` | `data/dev/` | `data/test/` | `data/main/` |
|
||||
| **系统 DB 数据卷** | `kb-shared-pgdata` | `dev-system-pgdata` | `test-system-pgdata` | `main-system-pgdata` |
|
||||
| **审计/会话 SQLite** | - | `dev-aux-data` | `test-aux-data` | `main-aux-data` |
|
||||
|
||||
---
|
||||
|
||||
## 四、 常用运维操作与脚本使用
|
||||
|
||||
项目在 `scripts/` 目录下提供了标准运维与管理脚本:
|
||||
|
||||
### 1. 服务启停操作
|
||||
```bash
|
||||
# 1. 启动共享知识库基础服务 (首次运行前必须启动)
|
||||
./scripts/env-service.sh shared start
|
||||
|
||||
# 2. 启动开发环境服务
|
||||
./scripts/env-service.sh dev start
|
||||
|
||||
# 3. 启动测试环境服务
|
||||
./scripts/env-service.sh test start
|
||||
|
||||
# 4. 启动主分支生产环境服务
|
||||
./scripts/env-service.sh main start
|
||||
|
||||
# 5. 查看所有环境运行状态
|
||||
./scripts/env-service.sh all status
|
||||
|
||||
# 6. 停止指定环境服务 (如停止 dev)
|
||||
./scripts/env-service.sh dev stop
|
||||
```
|
||||
|
||||
### 2. 分支流转标准流程示范
|
||||
|
||||
#### 流程 A:日常功能开发与逐步提交
|
||||
```bash
|
||||
# 切换并同步开发分支
|
||||
git checkout dev
|
||||
git pull origin dev
|
||||
|
||||
# 若功能较独立,创建功能子分支
|
||||
git checkout -b feature/auth-multi-tenant
|
||||
|
||||
# 功能拆分阶段 1:数据表与存储层
|
||||
git add internal/db/migrations/
|
||||
git commit -m "feat(db): 增加多租户隔离与字段迁移"
|
||||
|
||||
# 功能拆分阶段 2:服务实现与路由
|
||||
git add internal/services/
|
||||
git commit -m "feat(auth): 实现多租户鉴权中间件与上下文传递"
|
||||
|
||||
# 功能拆分阶段 3:测试用例
|
||||
git add internal/auth/auth_test.go
|
||||
git commit -m "test(auth): 补充多租户鉴权单元与集成测试"
|
||||
|
||||
# 自测通过后,合并回 dev
|
||||
git checkout dev
|
||||
git merge --no-ff feature/auth-multi-tenant -m "merge: 合并功能 feature/auth-multi-tenant 到开发分支"
|
||||
git branch -d feature/auth-multi-tenant
|
||||
```
|
||||
|
||||
#### 流程 B:功能阶段积累完成,进入测试分支实测
|
||||
```bash
|
||||
# 切换到测试分支
|
||||
git checkout test
|
||||
git pull origin test
|
||||
|
||||
# 将 dev 分支当前稳定节点合并到 test
|
||||
git merge --no-ff dev -m "release-candidate: 合并 dev 阶段功能至 test 分支进行长期实测"
|
||||
|
||||
# 打上实测候选版本 Tag
|
||||
git tag -a rc-v1.2.0-beta.1 -m "构建 1.2.0 测试候选版本 1,启动长期实测"
|
||||
|
||||
# 启动或重启 test 环境服务进行运维实测
|
||||
./scripts/env-service.sh test restart
|
||||
```
|
||||
|
||||
#### 流程 C:测试分支验证完成,发布到主分支
|
||||
```bash
|
||||
# 切换到主分支
|
||||
git checkout main
|
||||
git pull origin main
|
||||
|
||||
# 将测试验证完毕的节点合并到 main
|
||||
git merge --no-ff test -m "release: 经长期测试与运维验证,发布版本 1.2.0"
|
||||
|
||||
# 打正式版本 Tag
|
||||
git tag -a v1.2.0 -m "Release v1.2.0"
|
||||
|
||||
# 部署/更新主分支生产服务
|
||||
./scripts/env-service.sh main restart
|
||||
```
|
||||
Reference in New Issue
Block a user