# 旧代码复用评估报告

日期：2026-07-06

## 结论

现有项目可以提供一些工程实现参考，但不建议直接在旧代码上硬改成新系统。

旧项目是 **大本营答疑资产后台系统 MVP**，核心流程是：

`飞书场次/转写稿 -> AI 清洗 -> 原始问答 -> 人工审核 -> 标准问答 -> 人工标记可调用`

新项目是 **AI 企业知识库问答系统**，核心流程是：

`用户登录 -> 获取授权知识库 -> 实时检索飞书知识库 -> 组装 Prompt -> 大模型流式回答 -> 保存聊天、引用和日志`

两个系统都涉及“问答”和“飞书”，但领域模型、权限逻辑、接口、数据库表和用户流程都不一样。为了后期维护和交接，V2 应该重新建立自己的领域模型，只选择性复用旧项目里的工程模式、小工具或局部服务代码。

## 新需求概要

根据这次上传的需求资料，V2 的目标包括：

- 飞书知识库是一阶段唯一知识来源。
- 一期不建立独立本地知识库，不做人工同步，不做向量数据库同步。
- 用户端使用手机号 + 短信验证码登录。
- 管理后台使用用户名 + 密码登录。
- AI 聊天支持多会话、历史聊天、流式输出、停止生成、Markdown 渲染、自动标题和每日聊天额度。
- AI 只能基于用户有权限访问的知识库和检索片段回答。
- 没有命中知识时，统一回答：`当前知识库中未检索到相关内容，请联系管理员补充相关知识。`
- 飞书或模型异常时，需要统一提示并记录日志。
- 后台包含首页统计、用户管理、管理员管理、知识库管理、Prompt 管理、模型管理、聊天记录、系统配置和操作日志。
- 核心表包括 `sys_user`、`sys_admin`、`sys_role`、`sys_knowledge`、`sys_user_kb`、`sys_chat_session`、`sys_chat_message`、`sys_prompt`、`sys_model`、`sys_system_config`、`sys_ai_request_log`、`sys_operation_log`。

## 旧项目现状

旧项目当前技术栈：

- 后端：FastAPI、SQLAlchemy、Pydantic、APScheduler、HTTPX。
- 前端：Next.js、React、TypeScript、TailwindCSS。
- 数据库：优先 PostgreSQL，未配置时使用 SQLite。
- AI：OpenAI 兼容 Chat Completions，支持 mock。
- 飞书：已有多维表格和文档读取适配器，支持 mock。
- H5：已有手机优先的聊天界面，但目前连接的是 `/api/standard-qa/callable`。

旧项目核心数据模型：

- `users`
- `feishu_sessions`
- `raw_qa_items`
- `standard_qa_items`
- `task_runs`
- `audit_logs`
- `system_settings`

## 可复用性评估

| 模块 | 复用等级 | 建议 |
| --- | --- | --- |
| FastAPI 应用骨架 | 高 | 可参考路由拆分、配置读取、CORS、依赖注入和 service 分层方式。 |
| SQLAlchemy / Pydantic 写法 | 中 | 可参考编码风格，但模型需要按 V2 的 `sys_*` 表重建。 |
| Next.js / Tailwind 前端工程 | 中 | 可参考工程搭建方式和页面实现经验，但页面要按 V2 用户端和后台流程重建。 |
| H5 聊天交互 | 中 | 可复用手机优先、聊天气泡、输入框、加载状态等交互思路；需要替换为真实会话接口和 SSE 流式问答。 |
| 飞书服务适配 | 中 | 可参考 token 获取、HTTP 封装、文档文本提取和 mock 模式；V2 仍需新增基于 SpaceID/NodeID 的实时知识库检索服务。 |
| AI 调用封装 | 中 | 可参考 OpenAI 兼容请求方式；V2 需要新增流式输出、停止生成、Prompt 组装、Token 记录和从数据库读取模型配置。 |
| 日志/审计思路 | 低到中 | 可参考日志意识；V2 需要实现 `sys_operation_log` 和 `sys_ai_request_log`，不能直接沿用旧审核日志语义。 |
| 定时任务 | 低 | V2 一期不做同步任务和向量库同步，定时任务不是核心。后续如有维护任务再引入。 |
| 旧问答审核领域 | 低 | 不建议作为 V2 核心。原始问答、标准问答、风险、脱敏、可调用状态属于旧系统领域。 |
| `/standard-qa/callable` 接口 | 低 | V2 应替换为聊天、会话、历史和 SSE 接口。这个接口可以作为旧系统能力保留，但不应驱动 V2。 |
| Docker Compose | 中 | 可复用容器化思路，但 V2 文档指定 MySQL 8.x。如果继续用 PostgreSQL，需要单独记录偏离原因。 |

## 缺口分析

V2 必须新建或重构的能力：

- 用户短信登录、Token、退出失效、账号有效期和每日额度。
- 管理员用户名密码登录、角色和权限控制。
- 知识库管理，字段包括知识库名称、SpaceID、NodeID、状态和备注。
- 用户知识库授权关系，支持生效时间和到期时间。
- 聊天会话和聊天消息持久化。
- SSE 流式接口 `POST /chat/completions`。
- 停止生成接口 `POST /chat/stop`。
- Prompt 管理和当前 Prompt 加载。
- 模型管理，包括 API URL、API Key、模型名称、温度、最大 Token 和超时。
- 系统配置，包括登录有效期、每日聊天次数、AI 超时、飞书重试次数、上下文长度、是否展示引用来源、是否允许联网。
- 按权限过滤后的飞书实时检索。
- AI 请求日志，记录 Prompt、检索知识库、Token、耗时、状态和错误信息。
- 后台聊天记录查询、详情和导出。
- 围绕权限隔离、无命中兜底、不编造答案的测试和验收。

## 推荐技术方向

1. 继续把 `ai_knowledge_base_v2/` 作为新需求上下文和规划工作区。
2. 架构确认后，新建 V2 应用目录，而不是直接大面积修改旧 V1 文件。
3. 后端从第一天开始按模块拆分：
   - `auth`
   - `users`
   - `admins`
   - `knowledge`
   - `chat`
   - `rag`
   - `prompts`
   - `models`
   - `config`
   - `logs`
4. service 层保持边界清楚：
   - `SmsCodeService`
   - `TokenService`
   - `FeishuKnowledgeService`
   - `RagService`
   - `ModelClient`
   - `ChatService`
   - `AuditLogService`
5. 本地开发阶段需要明确 mock provider：
   - mock 短信验证码
   - mock 大模型回答
   - mock 飞书知识库检索
6. 生产环境的模型 API Key 不建议明文存储。需要优先考虑环境变量引用、密文存储或其他安全方案，并形成决策记录。

## 风险提示

- 新文档指定 MySQL 8.x，而旧项目使用 PostgreSQL/SQLite。这不是一个小改动，需要作为架构和部署决策处理。
- 文档要求“飞书更新后立即生效”和“每次提问实时检索”，这强依赖飞书实际 API 能力和租户权限，必须尽早做技术验证。
- 流式输出和停止生成会影响后端请求生命周期、前端渲染和消息落库语义，应作为核心能力设计。
- 权限是产品底线。每一次聊天检索都必须先过滤用户知识库权限，并记录实际使用的知识库和片段。

## 下一步建议

1. 确认 V2 是放在当前仓库的新应用目录，还是后续拆成独立仓库。
2. 先写 V2 架构和开发流程计划。
3. 搭建 V2 后端基础工程和 `sys_*` 领域模型。
4. 搭建 V2 用户端 H5，先跑通登录 mock、会话、SSE mock 问答。
5. 搭建后台基础框架和用户/知识库/Prompt/模型管理页面。
6. 尽早验证飞书实时检索和模型流式调用，避免后期被关键外部接口卡住。
