## 项目简介 这是一个基于 **FastAPI** 的后端服务,提供「智能工作流」「知识库问答」「数据库智能查询」等能力,前端可以通过 REST API 调用这些能力。 ### 主要目录结构(前端常用关注点) - **`th_agenter/api/endpoints/`**:对外 HTTP 接口(路由) - `auth.py`:登录、鉴权相关接口 - `users.py` / `roles.py`:用户与角色管理 - `chat.py` / `smart_chat.py` / `smart_query.py`:普通聊天、智能问答、智能查询 - `knowledge_base.py`:知识库管理(上传文档、构建向量库、检索) - `workflow.py`:工作流定义、获取、执行等接口 - **`th_agenter/services/`**:业务逻辑层,API 绝大部分会调用这里 - `workflow_engine.py` / `smart_workflow.py`:工作流执行引擎与智能工作流封装 - `knowledge_chat.py` / `document_processor.py` / `embedding_factory.py`:知识库问答、向量检索、文档处理 - `auth.py` / `user.py` 等:账号、权限等业务 - **`th_agenter/schemas/`**:Pydantic 模型,定义接口请求/响应的数据结构 - **`th_agenter/models/`**:SQLAlchemy 模型,对应数据库表结构 - **`th_agenter/core/`**:应用配置、上下文、中间件、异常处理、权限控制等 - **`th_agenter/db/`**:数据库连接、基础模型、Alembic 迁移脚本封装 - **`utils/`**:日志(`util_log.py`)、文件、环境、异常等通用工具 - **`scripts/`**:本地开发相关脚本(如 `start_local.sh`、`install_mysql.sh` 等) - **`data/`**:本地数据与向量库文件(如 Chroma 存储) ### 核心能力与典型接口 - **鉴权与用户体系** - 登录、Token 相关接口在 `auth.py` 中定义,一般使用 Bearer Token 放在 `Authorization` 头里。 - 用户、角色、权限相关接口在 `users.py`、`roles.py`、`core/simple_permissions.py` 等文件中。 - **聊天与智能问答** - 普通聊天接口:`chat.py` - 智能聊天 / 智能问答:`smart_chat.py`、`smart_query.py`、`langchain_chat.py` - 有些接口可能支持流式返回或长连接(如 SSE),可直接查看对应 endpoint 的返回类型。 - **知识库管理** - 相关接口在 `knowledge_base.py` 中,业务逻辑在 `services/knowledge_base.py`、`services/document_processor.py`、`services/knowledge_chat.py` 中。 - 支持上传文档(通常是 multipart)、构建向量库、基于文档进行问答。 - **工作流引擎** - 路由在 `workflow.py`,核心执行逻辑在 `services/workflow_engine.py`、`services/smart_workflow.py`、`services/workflow_engine.py` 中。 - 支持定义工作流、查询工作流详情、执行工作流,并在执行过程中写入日志/上下文(如 `session.desc`)。 ### 前端对接小提示 - **接口文档**:服务启动后可以访问 `http://localhost:8000/docs` 查看 Swagger 文档(或 `/redoc`)。 - **认证方式**:大多需要携带 `Authorization: Bearer `,具体登录接口与返回字段可在 `auth.py` 与对应 `schemas` 中查看。 - **上传文件**:知识库相关接口通常使用 `multipart/form-data`,前端可以用 `FormData` 构造请求。 - **错误格式**:统一使用 FastAPI 的 JSON 错误响应格式,并在 `core/exceptions.py` 中做了封装,前端可以根据 `code`/`detail` 等字段做统一处理。 - **调试追踪**:很多服务里会给 `session.desc` 等字段写入本次请求的行为描述(例如「获取工作流引擎」),方便在日志中排查问题。 ## 启动项目(本地) 1. 准备环境 - 推荐 Python 3.11+ - 创建并激活虚拟环境:`python3 -m venv .venv && source .venv/bin/activate` - 依赖安装:`pip install -r requirements.txt`(若 requirements.txt 为 UTF-16,需要先转 UTF-8) 2. 配置数据库 - 确保本地 MySQL 运行,并创建数据库/账号(例): ```sql CREATE DATABASE allm DEFAULT CHARACTER SET utf8mb4; ALTER USER 'root'@'localhost' IDENTIFIED BY '*******'; GRANT ALL PRIVILEGES ON allm.* TO 'root'@'localhost'; FLUSH PRIVILEGES; ``` - 启动前设置环境变量: ```bash export DATABASE_URL="******" ``` 3. 迁移(首次必跑) ```bash python -m alembic upgrade head ``` 4. 启动服务 ```bash # 启动项目命令 python3 -m uvicorn main:app --host 0.0.0.0 --port 8000 --reload ```