Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

halil-pan/llmops

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LLM 运维平台

基于 Flask 的 LLM(大语言模型)运维管理平台,支持应用管理、AI 对话等功能。

1. 项目概述

这是一个企业级的 LLM 运维平台,采用严格的分层架构设计和依赖注入模式,为开发者提供完整的 AI 应用管理能力。

核心特性

  • 分层架构设计: Router(路由层)→ Handler(控制器层)→ Service(业务逻辑层)→ Model(数据层)
  • 依赖注入: 使用 Injector 框架实现松耦合的组件管理
  • 数据库: PostgreSQL + SQLAlchemy ORM,支持 Alembic 数据库迁移
  • AI 集成: 集成月之暗面(Moonshot AI)API,提供强大的对话补全能力
  • 标准化响应: 统一的 JSON 响应格式,便于前端集成
  • 异常处理: 完善的自定义异常体系,自动序列化为 JSON

2. 主要功能

2.1 AI 对话补全

  • 集成 Moonshot AI 的 kimi-k2-turbo-preview 模型
  • 支持中英文对话
  • 可配置的对话参数(如 temperature)
  • 标准化的对话接口

2.2 应用管理 (CRUD)

  • 创建应用: 自动生成 UUID,初始化应用信息
  • 查询应用: 根据 UUID 查询应用详情
  • 更新应用: 支持修改应用配置和状态
  • 删除应用: 安全删除应用记录
  • 完整的时间戳记录(创建时间、更新时间)

2.3 开发支持

  • 数据库迁移管理(Alembic)
  • 统一的异常处理机制
  • 请求参数验证(WTForms)
  • 开发环境配置(SQL 日志、调试模式)

3. 技术架构

3.1 分层架构

项目采用严格的分层架构,各层职责清晰,互不越界:

┌─────────────────────────────────────────┐
│          Router Layer (路由层)          │
│      定义 HTTP 端点,分发请求           │
├─────────────────────────────────────────┤
│       Handler Layer (控制器层)          │
│   处理 HTTP 请求,调用业务逻辑          │
├─────────────────────────────────────────┤
│       Service Layer (业务逻辑层)        │
│  实现业务逻辑,数据库 CRUD 操作         │
├─────────────────────────────────────────┤
│        Model Layer (数据层)             │
│        SQLAlchemy ORM 模型              │
└─────────────────────────────────────────┘

3.2 依赖注入

使用 injector 库实现依赖注入,各组件通过 @inject 装饰器声明依赖:

@inject
@dataclass
class AppHandler:
    app_service: AppService  # 自动注入依赖

优点:

  • 降低组件耦合度
  • 便于单元测试(可注入 Mock 对象)
  • 代码更清晰,依赖关系一目了然

3.3 数据库事务管理

自定义 SQLAlchemy 包装器,提供 auto_commit() 上下文管理器:

with self.db.auto_commit():
    app = App(name="test")
    self.db.session.add(app)
# 自动提交或回滚

3.4 响应格式

所有 API 响应遵循统一格式:

{
  "code": "SUCCESS",
  "message": "操作成功",
  "data": {}
}

HTTP 状态码统一为 200,具体状态通过 code 字段表示。

4. 项目结构

🛠️ 快速开始

环境变量配置

创建 .env 文件并配置以下环境变量:

# ============================================
# AI 服务配置
# ============================================
OPEN_API_KEY=sk-xxx
# 月之暗面 API 密钥(必填)
# 获取地址: https://platform.moonshot.cn/console/api-keys

OPEN_API_BASE=https://api.moonshot.cn/v1
# 月之暗面 API 基础地址(可选,默认该值)

# ============================================
# Flask 配置
# ============================================
FLASK_DEBUG=1
# Flask 调试模式(1=开启,0=关闭)
# 开发环境建议开启,生产环境必须关闭

FLASK_ENV=development
# Flask 运行环境(development/production)

WTF_CSRF_ENABLED=False
# CSRF 保护开关(False=关闭,True=开启)
# 开发环境建议关闭,生产环境必须开启

# ============================================
# 数据库配置
# ============================================
SQLALCHEMY_DATABASE_URI=postgresql://root:123456@localhost:5432/llmops
# 数据库连接字符串
# 格式: postgresql://用户名:密码@主机:端口/数据库名

SQLALCHEMY_POOL_SIZE=30
# 数据库连接池大小
# 根据并发需求调整,生产环境建议 10-50

SQLALCHEMY_POOL_RECYCLE=3600
# 连接回收时间(秒)
# 防止长时间空闲连接被 PostgreSQL 关闭
# 建议设置为 PostgreSQL 的 idle_in_transaction_session_timeout 的一半

SQLALCHEMY_ECHO=True
# SQL 日志输出(True=输出,False=关闭)
# 开发环境建议开启,生产环境关闭

配置加载规则

  1. 优先读取环境变量
  2. 环境变量未设置时使用 config/default_config.py 中的默认值
  3. 配置通过 Config 类加载到 Flask 应用

默认配置值

变量名 默认值 说明
WTF_CSRF_ENABLED False CSRF 保护
SQLALCHEMY_DATABASE_URI "" 数据库 URI(必须配置)
SQLALCHEMY_POOL_SIZE 30 连接池大小
SQLALCHEMY_POOL_RECYCLE 3600 连接回收时间(秒)
SQLALCHEMY_ECHO "True" SQL 日志输出

7. 数据库设置

7.1 启动 PostgreSQL (Docker)

使用 Docker 快速启动 PostgreSQL 容器:

# 启动 PostgreSQL 容器
docker run -d \
  --name postgres-llmops \
  -e POSTGRES_USER=root \
  -e POSTGRES_PASSWORD=123456 \
  -e POSTGRES_DB=llmops \
  -v pg_data:/var/lib/postgresql/data \
  -p 5432:5432 \
  postgres:16

参数说明:

  • --name: 容器名称
  • -e POSTGRES_USER: 数据库用户名
  • -e POSTGRES_PASSWORD: 数据库密码
  • -e POSTGRES_DB: 数据库名称
  • -v pg_data:/var/lib/postgresql/data: 数据持久化卷
  • -p 5432:5432: 端口映射(宿主机:容器)

7.2 验证数据库连接

# 进入容器
docker exec -it postgres-llmops psql -U root -d llmops

# 查看数据库列表
\l

# 查看表列表
\dt

# 退出
\q

7.3 停止和删除容器

# 停止容器
docker stop postgres-llmops

# 删除容器
docker rm postgres-llmops

# 删除数据卷(谨慎!)
docker volume rm pg_data

8. 数据库迁移

项目使用 Alembic 进行数据库版本管理和迁移。

8.1 初始化迁移环境

首次使用时需要初始化:

flask --app app.http.app db init

执行后会在 internal/migration/ 下生成迁移环境文件。

8.2 生成迁移脚本

修改模型后,生成迁移脚本:

# 生成迁移脚本(自动检测模型变更)
flask --app app.http.app db migrate -m "描述变更内容"

示例:

flask --app app.http.app db migrate -m "添加 app 表"
flask --app app.http.app db migrate -m "添加 status 字段"

生成的迁移文件位于 internal/migration/versions/ 目录。

8.3 应用迁移

将迁移应用到数据库:

# 应用所有待执行的迁移
flask --app app.http.app db upgrade

8.4 回滚迁移

回滚到上一个版本:

flask --app app.http.app db downgrade

警告: 回滚操作可能导致数据丢失,请谨慎操作!

8.5 查看迁移历史

# 查看当前数据库版本
flask --app app.http.app db current

# 查看所有迁移历史
flask --app app.http.app db history

9. 运行命令

9.1 安装依赖

# 创建虚拟环境
python -m venv .venv

# 激活虚拟环境
# Linux/Mac:
source .venv/bin/activate
# Windows:
.venv\Scripts\activate

# 安装依赖
pip install -r requirements.txt

9.2 配置环境变量

创建 .env 文件(参考第 6 节):

touch .env
# 编辑 .env 文件,填入实际配置

9.3 初始化数据库

首次运行需要初始化数据库:

# 初始化迁移环境(仅需执行一次)
flask --app app.http.app db init

# 生成迁移脚本
flask --app app.http.app db migrate -m "初始化数据库"

# 应用迁移
flask --app app.http.app db upgrade

9.4 启动应用

方式一: 直接运行 Python 模块

python -m app.http.app

方式二: 使用 Flask 命令

flask --app app.http.app run

方式三: 指定端口和主机

flask --app app.http.app run --host=0.0.0.0 --port=5000

方式四: 生产环境 (使用 Gunicorn)

# 安装 gunicorn
pip install gunicorn

# 启动服务(4 个 worker 进程)
gunicorn -w 4 -b 0.0.0.0:5000 'app.http.app:create_app()'

9.5 常用运行参数

参数 说明
--host 0.0.0.0 允许外部访问
--port 5000 指定端口
--debug 开启调试模式(自动重载)
--reload 代码变更自动重启

10. 测试

3. 启动 PostgreSQL

# 使用 Docker 快速启动
docker run -d \
  --name postgres-llmops \
  -e POSTGRES_USER=root \
  -e POSTGRES_PASSWORD=123456 \
  -e POSTGRES_DB=llmops \
  -v pg_data:/var/lib/postgresql/data \
  -p 5432:5432 \
  postgres:16

4. 安装依赖

# 创建虚拟环境
python -m venv .venv
source .venv/bin/activate  # Linux/Mac
# .venv\Scripts\activate     # Windows

# 安装依赖
pip install -r requirements.txt

5. 数据库初始化

# 初始化迁移环境
flask --app app.http.app db init

# 生成迁移脚本
flask --app app.http.app db migrate -m "初始化数据库"

# 应用迁移
flask --app app.http.app db upgrade

6. 启动应用

# 方法1: 直接运行
python -m app.http.app

# 方法2: Flask 命令
flask --app app.http.app run

API 接口列表

接口 方法 功能描述
/ping GET 健康检查接口
/app/completion POST AI 对话补全
/app POST 创建新应用
/app/<id> GET 获取应用详情
/app/<id> POST 更新应用信息
/app/<id>/delete POST 删除应用

API 详细说明

5.1 健康检查

接口: GET /ping

说明: 测试服务是否正常运行

响应示例:

{
  "code": "FAIL",
  "message": "数据未找到",
  "data": {}
}

5.2 AI 对话补全

接口: POST /app/completion

说明: 调用 Moonshot AI API 进行对话补全

请求参数:

{
  "query": "你好,你是谁"
}

参数验证:

  • query (string, 必填): 用户提问,最大长度 2000 字符

响应示例:

{
  "code": "SUCCESS",
  "message": "",
  "data": {
    "content": "我是 Kimi,由 Moonshot AI 提供的人工智能助手..."
  }
}

特性:

  • 使用 kimi-k2-turbo-preview 模型
  • 自动设置系统提示词
  • temperature=0.6 控制生成随机性

5.3 创建应用

接口: POST /app

说明: 创建一个新的应用记录

请求体: 无需参数,自动生成应用信息

响应示例:

{
  "code": "SUCCESS",
  "message": "应用已经成功创建,id 为 123e4567-e89b-12d3-a456-426614174000",
  "data": {}
}

自动生成字段:

  • id: UUID 格式
  • name: 默认 "bot"
  • account_id: 随机 UUID
  • icon: 空字符串
  • description: "A simple bot"
  • status: 空字符串
  • created_at, update_at: 当前时间

5.4 获取应用

接口: GET /app/<id>

说明: 根据 UUID 获取应用详情

路径参数:

  • id (UUID, 必填): 应用 ID

响应示例:

{
  "code": "SUCCESS",
  "message": "应用已经成功获取,名字是bot",
  "data": {}
}

5.5 更新应用

接口: POST /app/<id>

说明: 更新应用信息(当前版本固定修改 name 为 "bot1")

路径参数:

  • id (UUID, 必填): 应用 ID

响应示例:

{
  "code": "SUCCESS",
  "message": "应用已经成功修改,名字是bot1",
  "data": {}
}

5.6 删除应用

接口: POST /app/<id>/delete

说明: 删除指定的应用记录

路径参数:

  • id (UUID, 必填): 应用 ID

响应示例:

{
  "code": "SUCCESS",
  "message": "应用已经成功删除,id 为123e4567-e89b-12d3-a456-426614174000",
  "data": {}
}

响应状态码说明

Code 说明
SUCCESS 操作成功
FAIL 操作失败
VALIDATE_ERROR 请求参数验证失败
NOT_FOUND 资源未找到
UNAUTHORIZED 未授权
FORBIDDEN 禁止访问

6. 环境配置

项目目录结构

./
├── app/http/                 # 应用入口
│   └── app.py               # Flask 应用工厂 + Injector 配置
├── config/                   # 配置管理
│   ├── config.py            # 配置加载器(环境变量优先)
│   └── default_config.py    # 默认配置值
├── internal/                 # 核心业务逻辑(分层架构)
│   ├── router/              # 路由层
│   │   └── router.py        # Blueprint 路由注册
│   ├── handler/             # 控制器层
│   │   └── app_handler.py   # HTTP 请求处理器 + OpenAI 集成
│   ├── service/             # 业务逻辑层
│   │   └── app_service.py   # 应用 CRUD 业务逻辑
│   ├── model/               # 数据模型层
│   │   └── app.py           # App 数据表模型
│   ├── schema/              # 请求验证层
│   │   └── app_schema.py    # WTForms 验证表单
│   ├── server/              # 服务器配置
│   │   └── http.py          # Flask 应用包装器 + 异常处理
│   ├── extension/           # Flask 扩展
│   │   ├── database_extension.py  # SQLAlchemy 实例
│   │   └── migrate_extension.py   # Alembic 迁移实例
│   ├── exception/           # 异常处理
│   │   └── exception.py     # 自定义异常类
│   ├── migration/           # 数据库迁移文件
│   │   └── versions/        # Alembic 迁移脚本
│   ├── core/                # 核心模块(待实现)
│   ├── middleware/          # 中间件(待实现)
│   ├── schedule/            # 定时任务(待实现)
│   └── task/                # 异步任务(待实现)
├── pkg/                      # 共享工具包
│   ├── response/            # 响应工具
│   │   ├── response.py      # Response 数据类 + 响应辅助函数
│   │   └── http_code.py     # HTTP 状态码枚举
│   └── sqlalchemy/          # 数据库工具
│       └── sqlalchemy.py    # 自定义 SQLAlchemy 包装器(含 auto_commit)
├── test/                     # 测试文件
│   └── internal/
│       └── handler/
│           └── test_app_handler.py  # Handler 层测试
├── study/                    # LangChain 学习资料
├── Insomnia.yaml            # Insomnia API 测试集合
├── requirements.txt         # Python 依赖
└── README.md               # 项目文档

目录说明

目录/文件 说明
app/http/ 应用启动入口,配置 Flask 和 Injector
config/ 环境配置管理,支持环境变量覆盖
internal/router/ 定义所有 API 端点,使用 Blueprint 组织
internal/handler/ HTTP 控制器,处理请求参数、调用 Service
internal/service/ 业务逻辑层,实现 CRUD 操作
internal/model/ SQLAlchemy ORM 模型定义
internal/schema/ WTForms 验证表单,用于请求参数校验
pkg/response/ 统一的 JSON 响应工具
pkg/sqlalchemy/ 数据库工具,提供事务管理
test/ 单元测试和集成测试
Insomnia.yaml API 接口测试集合,可导入 Insomnia 客户端

5. API 端点

10.1 使用 Insomnia 测试

项目提供了 Insomnia.yaml 文件,包含所有 API 接口的测试用例。

导入步骤:

  1. 打开 Insomnia 客户端
  2. 点击 "Application" → "Import/Export" → "Import Data"
  3. 选择 From File,上传 Insomnia.yaml
  4. 配置环境变量:
    • BASE_URL: http://127.0.0.1:5000
    • APP_ID: 替换为实际的应用 UUID

测试用例列表:

接口名称 方法 路径 说明
ping GET /ping 健康检查
completion POST /app/completion AI 对话补全
create_app POST /app 创建新应用
get_app GET /app/{{APP_ID}} 获取应用详情
update_app POST /app/{{APP_ID}} 更新应用信息
delete_app POST /app/{{APP_ID}}/delete 删除应用

测试示例:

# 使用 curl 测试
curl -X GET http://127.0.0.1:5000/ping

curl -X POST http://127.0.0.1:5000/app/completion \
  -H "Content-Type: application/json" \
  -d '{"query": "你好"}'

curl -X POST http://127.0.0.1:5000/app

curl http://127.0.0.1:5000/app/<应用-ID>

10.2 单元测试

项目使用 Pytest 进行单元测试。

运行测试:

# 运行所有测试
pytest -v -s

# 运行特定测试文件
pytest test/internal/handler/test_app_handler.py -v -s

# 运行特定测试用例
pytest test/internal/handler/test_app_handler.py::test_ping -v -s

# 查看测试覆盖率
pytest --cov=internal --cov-report=html

测试结构:

test/
└── internal/
    └── handler/
        └── test_app_handler.py  # Handler 层测试

11. 开发指南

11.1 代码规范

分层架构原则:

  • Router 层:只负责路由注册,不包含业务逻辑
  • Handler 层:处理 HTTP 请求,调用 Service 层,返回响应
  • Service 层:实现业务逻辑,数据库操作
  • Model 层:定义数据模型,不包含业务逻辑

依赖注入模式:

from injector import inject
from dataclasses import dataclass

@inject
@dataclass
class MyHandler:
    my_service: MyService  # 自动注入依赖

数据库事务:

from pkg.sqlalchemy import SQLAlchemy

# 使用 auto_commit 上下文管理器
with self.db.auto_commit():
    # 数据库操作
    self.db.session.add(obj)
    self.db.session.delete(obj)
    obj.field = new_value
# 自动提交或回滚

异常处理:

from internal.exception import FailException, NotFoundException

# 抛出自定义异常
raise FailException("操作失败")
raise NotFoundException("资源未找到")

请求验证:

from flask import request
from internal.schema import MyForm

def my_handler():
    form = MyForm()
    if not form.validate():
        return validate_error_json(form.errors)
    # 继续处理

11.2 添加新功能流程

假设要添加一个用户管理功能:

  1. 定义模型 (internal/model/user.py):

    from internal.extension.database_extension import db
    
    class User(db.Model):
        __tablename__ = 'user'
        id = Column(UUID, primary_key=True)
        name = Column(String(255))
  2. 创建验证表单 (internal/schema/user_schema.py):

    class UserForm(FlaskForm):
        name = StringField('name', validators=[DataRequired()])
  3. 实现业务逻辑 (internal/service/user_service.py):

    @inject
    @dataclass
    class UserService:
        db: SQLAlchemy
    
        def create_user(self, name):
            with self.db.auto_commit():
                user = User(name=name)
                self.db.session.add(user)
            return user
  4. 创建控制器 (internal/handler/user_handler.py):

    @inject
    @dataclass
    class UserHandler:
        user_service: UserService
    
        def create_user(self):
            # 处理请求,调用 service
            pass
  5. 注册路由 (internal/router/router.py):

    bp.add_url_rule('/user', methods=['POST'], view_func=self.user_handler.create_user)
  6. 注册依赖 (app/http/app.py):

    binder.bind(UserService, UserService())
    binder.bind(UserHandler, UserHandler())
  7. 生成数据库迁移:

    flask --app app.http.app db migrate -m "添加 user 表"
    flask --app app.http.app db upgrade

11.3 数据库模型设计规范

  • 主键: 使用 UUID 类型(Column(UUID)
  • 时间戳: 所有表必须包含 created_atupdated_at
  • 默认值: 使用 default= 而非 server_default=
  • 索引: 为常用查询字段添加索引(如 account_id

示例:

from sqlalchemy import Column, UUID, String, DateTime
import uuid
from datetime import datetime

class App(db.Model):
    id = Column(UUID, primary_key=True, default=uuid.uuid4)
    account_id = Column(UUID, nullable=False)
    name = Column(String(255), default="", nullable=False)
    created_at = Column(DateTime, default=datetime.now, nullable=False)
    updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, nullable=False)

12. 常见问题

Q1: 数据库连接失败

症状: psycopg2.OperationalError

解决方案:

  1. 检查 PostgreSQL 是否运行: docker ps | grep postgres-llmops
  2. 检查连接字符串是否正确: .env 文件中的 SQLALCHEMY_DATABASE_URI
  3. 检查端口是否占用: lsof -i :5432
  4. 检查用户名密码是否匹配

Q2: API 调用失败

症状: AI 对话返回错误

解决方案:

  1. 确认 .env 文件中 OPEN_API_KEY 已配置
  2. 验证 API 密钥是否有效(访问 Moonshot AI 控制台)
  3. 检查网络连接是否正常
  4. 查看完整错误信息

Q3: 迁移报错

症状: alembic.util.exc.CommandError

解决方案:

  1. 确保数据库已初始化: flask db init
  2. 检查迁移文件是否存在: ls internal/migration/versions/
  3. 如果数据库已存在数据,可尝试清空后重新初始化
  4. 检查模型定义是否正确

Q4: 依赖注入失败

症状: injector.UnsatisfiedRequirement

解决方案:

  1. 确保在 app/http/app.py 中注册了所有依赖
  2. 检查依赖类的 @inject@dataclass 装饰器
  3. 确保依赖链完整(Handler → Service → DB)

Q5: 端口被占用

症状: Address already in use

解决方案:

# 查看占用 5000 端口的进程
lsof -i :5000

# 杀死进程
kill -9 <PID>

# 或者使用其他端口
flask --app app.http.app run --port 5001

13. 项目扩展

计划中的功能

以下目录已预留但未实现,可在后续版本中扩展:

目录 预期功能
internal/core/ 核心业务逻辑
internal/middleware/ 中间件(认证、日志等)
internal/schedule/ 定时任务
internal/task/ 异步任务(Celery 等)

扩展建议

  1. 用户认证: 使用 JWT 或 OAuth2
  2. 日志管理: 集成 ELK 或 Loki
  3. 缓存: 添加 Redis 缓存层
  4. 消息队列: 使用 Celery 处理异步任务
  5. API 文档: 集成 Swagger/OpenAPI
  6. 监控: Prometheus + Grafana
  7. CI/CD: GitHub Actions 或 GitLab CI

14. 相关链接

15. 贡献指南

欢迎贡献代码、报告问题或提出建议!

提交规范

采用 Conventional Commits 规范:

<type>(<scope>): <subject>

<body>

<footer>

类型 (type):

  • feat: 新功能
  • fix: 修复 bug
  • docs: 文档更新
  • style: 代码格式(不影响功能)
  • refactor: 重构(既不是新功能也不是修复)
  • test: 添加测试
  • chore: 构建过程或辅助工具的变动

示例:

feat(handler): 添加用户认证接口

实现 JWT token 验证和用户登录功能

Closes #123

开发流程

  1. Fork 本仓库
  2. 创建功能分支: git checkout -b feature/my-feature
  3. 提交变更: git commit -m 'feat: add some feature'
  4. 推送到分支: git push origin feature/my-feature
  5. 创建 Pull Request

代码审查要点

  • ✅ 遵循分层架构
  • ✅ 使用依赖注入
  • ✅ 添加错误处理
  • ✅ 编写测试用例
  • ✅ 更新相关文档
  • ✅ 代码格式规范(使用 Black/autopep8)

Happy coding! 🚀

🔧 开发指南

代码规范

  • 分层架构: 严格遵循 Router → Handler → Service → Model
  • 依赖注入: 使用 @inject + @dataclass 装饰器
  • 数据库操作: 使用 auto_commit() 上下文管理器
  • 异常处理: 抛出自定义异常,自动序列化为 JSON
  • 请求验证: 使用 WTForms 进行表单验证

添加新功能

  1. 定义路由: 在 internal/router/router.py 添加端点
  2. 创建处理器: 在 internal/handler/ 添加处理器类
  3. 实现业务逻辑: 在 internal/service/ 添加服务类
  4. 定义模型: 在 internal/model/ 添加数据模型
  5. 创建验证: 在 internal/schema/ 添加表单验证

数据库迁移

# 修改模型后生成迁移
flask --app app.http.app db migrate -m "描述变更"

# 应用迁移
flask --app app.http.app db upgrade

# 回滚迁移(谨慎使用)
flask --app app.http.app db downgrade

🤝 贡献指南

提交规范

  • 格式: type: description
  • 类型: feat(新功能), fix(修复), docs(文档), style(格式), refactor(重构), test(测试)
  • 示例: feat: add user authentication, fix: resolve database connection issue

开发流程

  1. Fork 项目并创建功能分支
  2. 编写代码并添加测试
  3. 确保所有测试通过
  4. 提交清晰规范的 commit
  5. 创建 Pull Request

代码审查要点

  • ✅ 遵循分层架构
  • ✅ 使用依赖注入
  • ✅ 添加错误处理
  • ✅ 编写测试用例
  • ✅ 更新文档(如需要)

📚 相关链接

📝 注意事项

  1. 数据库: 确保 PostgreSQL 正常运行
  2. API 密钥: 月之暗面 API 密钥必需
  3. 开发环境: 建议启用 FLASK_DEBUG=1SQLALCHEMY_ECHO=True
  4. 生产环境: 关闭调试,启用 CSRF 保护
  5. 迁移: 模型变更后务必生成和应用迁移

🐛 常见问题

Q: 数据库连接失败? A: 检查 PostgreSQL 是否运行,用户名密码是否正确

Q: API 调用失败? A: 确认 .envOPEN_API_KEY 是否配置正确

Q: 迁移报错? A: 确保数据库为空或迁移版本正确


Happy coding! 🚀

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Morty Proxy This is a proxified and sanitized view of the page, visit original site.