> **说明**:以下表格中的公网 IP 多为历史迁移前审计记录。当前仓库内 Spring / Langchain 默认已改为本机 `127.0.0.1` 与 Docker(镜像目录 `/opt/docker-images`),请以实际 `application-*.yml` 与 `configs/kb_config.py` 为准。 # 项目交接部署审计报告 > 审计日期: 2026-02-26 > 项目名称: LLM Chat 大模型智能问答系统 (冶金行业版) > 原开发公司: 浪潮 (com.inspur) > 我方服务器: 10.200.3.10 --- ## 一、项目概述 本项目是一个基于大语言模型(LLM)的智能问答系统,主要面向冶金行业,提供政策查询、报告分析、期刊论文检索、智能写作辅助等功能。项目由三个主要服务组成: | 服务 | 技术栈 | 端口 | 说明 | |------|--------|------|------| | chat_web_front | Vue 3 + TypeScript + Vite | 3000 | 前端界面 | | chat_web_backend | Java Spring Boot 2.3.7 | 8099 | 业务后端 API | | langchain-chat | Python FastAPI + LangChain | 7861 | LLM 推理 + 知识库 | 辅助基础设施: | 组件 | 版本 | 端口 | 说明 | |------|------|------|------| | MySQL | 8.4.4 (Docker) | 33306 | 主数据库 | | Milvus | 2.6.4 (Docker) | 19530 | 向量数据库 | | MinIO | 2024-12-18 (Docker) | 9002/9003 | 对象存储 (Milvus 依赖) | | etcd | v3.5.18 (Docker) | 2379 | 分布式配置 (Milvus 依赖) | | Redis | - | 6379 | 缓存/Session | --- ## 二、交接时存在的主要问题 ### 2.1 数据库仍连接原公司远程服务器 [严重] 交接时,Java 后端 (`application-yj.yml`, `application-test.yml`) **直接连接原公司的远程 MySQL 和 Redis**,没有提供本地数据库的数据导出或迁移方案。 | 服务 | 原公司地址 | 说明 | |------|-----------|------| | MySQL | `123.57.146.97:3306` (阿里云) | 数据库名: `chat_LLM`,密码: `MYSQL!@#89765` | | Redis | `123.57.146.97:6379` (阿里云) | 密码: `Redis_897653`,database: 13 | **文件位置**: - `chat_web_backend/src/main/resources/application-yj.yml:29-36` - `chat_web_backend/src/main/resources/application-test.yml:18-36` - `chat_web_backend/src/main/resources/application-dev.yml:29-31` (Redis 仍指向远程) **风险**: 一旦原公司关闭这些服务器或修改密码,系统将立即不可用。 ### 2.2 无完整数据库 Schema 和数据迁移方案 [严重] 虽然 `chat_web_backend/doc/sql/` 目录下有 SQL 脚本: - `sys.sql`, `chat_gpt.sql`, `knowledge_base.sql`, `gpt_folder.sql`, `writter_docs.sql`, `quartz.sql` 等 但这些脚本**只有表结构,没有包含业务数据**。原公司远程数据库 `chat_LLM` 中的用户数据、对话历史、知识库配置等数据没有导出交接。 ### 2.3 Milvus 向量数据库数据未交接 [严重] Python 后端依赖的 Milvus 向量知识库包含大量预处理好的行业数据集合: - `t_policy_total_bge_new_v2` (政策库) - `gydemo_report_v2` (报告库) - `t_journal_article_bge_v1` (期刊论文库) - 以及多个冶金行业专用知识库 这些向量数据需要重新入库或从原公司导出,否则知识库问答功能完全不可用。 **文件位置**: `langchain-chat/configs/kb_config.py:8-41`, `langchain-chat/configs/model_config.py:28-31` ### 2.4 多处硬编码原公司服务器 IP [严重] 代码中存在大量原公司基础设施的硬编码 IP,无法通过配置文件覆盖: | IP 地址 | 用途 | 文件位置 | |---------|------|----------| | `123.57.146.97` | MySQL + Redis (阿里云) | 多个 application-*.yml | | `123.56.15.82:10326` | 生产环境前端/搜索服务 | `application-prod.yml:2`, `kb_config.py:97` | | `39.97.197.219:10326` | 测试环境 | `application-test.yml:2` | | `192.168.56.123` | 内部 LLM 服务/画图服务 | `application-prod.yml:71`, `kb_config.py:101-102,121` | | `192.168.56.188:8081` | 内部图片服务 | `DocController.java:314` | | `106.3.149.154:8081` | 旧图片/文件下载服务 | `DocController.java:313`, `kb_config.py:117,165` | | `172.17.119.151:8327` | 专业搜索服务 | `kb_config.py:98` | **特别注意**: `DocController.java:313-314` 中硬编码了 IP 替换逻辑,说明原公司在迁移过程中就存在 IP 硬编码问题。 ### 2.5 第三方 API Key 硬编码在源码中 [中等] 以下 API Key 直接写死在代码和配置文件中: | 服务 | Key | 文件位置 | |------|-----|----------| | 阿里云 OSS Access Key | `LTAI5tKV3JEn6EX6eVeQjrYN` | `AliyunOSSUtil.java:48`, `oss_config.py:3`, 多个 yml | | 阿里云 OSS Secret | `CtMmajeabIVU6xjCVt6KCcWp9IcgD1` | `AliyunOSSUtil.java:53`, `oss_config.py:4`, 多个 yml | | 阿里云通义千问 API Key | `sk-672f9d1fc4404674bf1a713dfd130a14` | `model_config.py:75` | | DeepSeek API Key | `sk-26858b50690a49828766fcfcf3290de9` | `model_config.py:83,88` | | Metaphor API Key | `e09d3cdd-e7e1-41d7-...` | `kb_config.py:138` | | 心知天气 API Key | `STNmmw0iUKB96PNpJ` | `kb_config.py:141` | **风险**: 这些 Key 属于原公司账户。给客户部署时必须替换为客户自己的 Key,否则: 1. 原公司可以随时吊销这些 Key 2. 产生的 API 费用会计在原公司账户上 3. 存在安全风险(原公司 OSS bucket 中可能有敏感数据) ### 2.6 Jasypt 加密密码泄露在源码注释中 [中等] 生产环境配置使用了 Jasypt 加密(`ENC(...)` 格式),但加密密钥直接写在了源代码的注释里: **文件位置**: `chat_web_backend/src/main/java/com/inspur/llm/chat/base/config/JasyptConfiguration.java` | 密钥 | 用途 | 行号 | |------|------|------| | `HadIuTIooXd0C93` | prod/test 环境加解密 | 13, 27, 41, 55 行 | | `Z4d5vrOSlASf0MX` | yjprod (冶金生产) 环境加解密 | 59 行 | 同一文件中还暴露了原公司阿里云 RDS 连接信息(注释中): - `rm-2zer597iohnt2hik2.mysql.rds.aliyuncs.com` (生产 RDS) - `rm-2ze6u80a543d64vu0.mysql.rds.aliyuncs.com` (测试 RDS) - 用户名: `inpur`,密码: `987654321a!` / `123456789a!` ### 2.7 Java 源码中硬编码 API 地址 [中等] `KnowledgeBaseController.java` 中,调用 langchain-chat 的地址直接写死在 Java 代码里而不是配置文件中: ```java // KnowledgeBaseController.java:50 String url = "http://127.0.0.1:7861/knowledge_base/list_knowledge_bases"; // :63 String url = "http://127.0.0.1:7861/knowledge_base/create_knowledge_base"; // :75 String url = "http://127.0.0.1:7861/knowledge_base/delete_knowledge_base"; // :88 String url = "http://127.0.0.1:7861/knowledge_base/list_files"; // :100 String url = "http://127.0.0.1:7861/knowledge_base/delete_docs"; ``` 如果 langchain-chat 部署在不同机器或不同端口,需要改源码并重新编译。 ### 2.8 绝对路径硬编码 [低] 多处使用了原公司开发人员本机或服务器的绝对路径: | 路径 | 文件位置 | 说明 | |------|----------|------| | `/opt/apps/logs/chat-server-backend-cast` | `logback-spring.xml:6` | 日志路径 | | `/opt/logs/${server.name}/access` | `application.yml:16` | 访问日志路径 | | `/opt/upload/${server.name}` | `application-test.yml:67`, `application-prod.yml:66` | 文件上传路径 | | `/Users/master/Documents/upload/` | `application-dev.yml:82`, `application-ck.yml:77` | macOS 本地路径 | | `/home/albert/workspaces/modelSpaces/models/...` | `kb_config.py:164,166,168` | 原开发者本机路径 | | `/usr/lib/jvm/java-11-openjdk-amd64` | `start.sh:5` | JDK 路径 | ### 2.9 OAuth2/SSO 集成指向外部系统 [低] 部分 profile 配置了 OAuth2 单点登录,指向外部系统: - `https://kxsso.cast.org.cn/` (中国科协 SSO) - `application-yj.yml:96-97`, `application-ck.yml:90-91` - `http://www.metalinfo.cn` (冶金信息网) - `application-yjprod.yml:15` 如果客户不需要对接这些系统,需要关闭或替换 OAuth2 配置。 ### 2.10 Docker 镜像使用代理源 [低] MySQL Docker 镜像使用了第三方代理源 `docker.1ms.run/mysql:8.4.4`(`mysql/docker-compose.yml:3`),在客户内网环境中可能无法拉取。 --- ## 三、我方已做的修改(为在 10.200.3.10 上启动) 根据 `项目启动总结.md` 和代码中的痕迹,我方已完成以下改动: ### 3.1 Java 编译环境修复 | 问题 | 解决方案 | 文件 | |------|----------|------| | Java 21 与 Lombok 不兼容 | 改用 Java 11 编译和运行 | `start.sh` | | Java 11 移除了 JAXB | 在 pom.xml 中添加了 JAXB 依赖 | `pom.xml` | ### 3.2 新增 application-dev.yml 本地开发配置 创建/修改了 `application-dev.yml`,将 MySQL 指向本地 Docker: - MySQL: `127.0.0.1:33306/chat_gpt_yj` (本地 Docker 容器) - 密码: `1234567890` **但 Redis 仍然指向原公司远程服务器** `123.57.146.97:6379`。 ### 3.3 本地 MySQL Docker 部署 通过 `mysql/docker-compose.yml` 在本地部署了 MySQL 8.4.4: - 端口映射: 33306 -> 3306 - root 密码: 1234567890 - 默认数据库: chat_LLM - 有一份数据库转储文件: `mysql/mysql_bind/dump-chat_gpt_yj-202503051410.sql` ### 3.4 本地 Milvus 向量数据库部署 通过 `milvus/docker-compose.yml` 部署了 Milvus 2.6.4 + MinIO + etcd 集群。 ### 3.5 前端修改 - 禁用了 vueDevTools 插件避免启动错误 - 前端上下文路径改为 `/metalinfo` - 前端通过 Vite 代理转发后端 API 请求到 `localhost:8099` ### 3.6 Python 后端配置 - 模型根路径设置为本地: `/home/gc/gangyan/models` - 嵌入模型使用 CPU 运行: `EMBEDDING_DEVICE = "cpu"` - 配置了在线 LLM 模型: deepseek-chat, qwen-max, deepseek-reasoner - Milvus 连接指向本地: `127.0.0.1:19530` ### 3.7 启动脚本 创建了 `start.sh` 启动脚本,使用 `--spring.profiles.active=dev` 激活本地开发配置。 --- ## 四、当前仍然缺失/需要解决的问题 ### 4.1 Redis 服务 [必须解决] **当前状态**: dev 配置仍然连接原公司远程 Redis `123.57.146.97:6379`。 **解决方案**: 1. 本地部署 Redis(推荐使用 Docker) 2. 修改 `application-dev.yml` 中 Redis 配置指向本地 3. 参考配置: ```yaml redis: host: 127.0.0.1 port: 6379 password: <自定义密码> ``` ### 4.2 Milvus 向量数据 [必须解决] **当前状态**: Milvus 服务已部署,但知识库集合(collections)可能为空。 **需要做的**: 1. 确认 Milvus 中是否已有 `t_policy_total_bge_new_v2` 等集合 2. 如果没有,需要重新导入向量数据(从原公司获取 Milvus 备份,或重新进行文档向量化入库) 3. 知识库的文档源文件也需要确认是否齐全 ### 4.3 MySQL 业务数据 [必须解决] **当前状态**: 有表结构 SQL 和一份转储文件,但需确认: 1. `dump-chat_gpt_yj-202503051410.sql` 是否包含完整业务数据 2. 本地数据库名 `chat_gpt_yj` 与远程 `chat_LLM` 不一致,是否有影响 3. 系统用户账户数据是否已迁移 ### 4.4 阿里云 OSS 存储 [需要解决] **当前状态**: 代码中硬编码使用原公司的阿里云 OSS: - Bucket: `bj-large-models` / `bg-large-models` - Endpoint: `oss-cn-beijing.aliyuncs.com` **需要做的**: 1. 确认系统是否实际使用了 OSS(如果只在本地上传文件则不影响) 2. 如需要 OSS,客户需准备自己的阿里云 OSS 账户 3. 需修改 `AliyunOSSUtil.java` 中的硬编码值(需重新编译) 4. 需修改 `oss_config.py` 和多个 `application-*.yml` 中的 key/secret ### 4.5 LLM API Key [需要解决] **当前状态**: 使用原公司的 API Key 调用通义千问和 DeepSeek。 **需要做的**: 1. 客户注册自己的通义千问账户,获取 API Key 2. 客户注册自己的 DeepSeek 账户,获取 API Key 3. 修改 `langchain-chat/configs/model_config.py` 中的 `api_key` 字段 ### 4.6 搜索服务 [需要解决] **当前状态**: 搜索功能依赖外部服务,目前不可用: - 通用搜索: `http://123.56.15.82:10326/search/search` (原公司服务器) - 专业搜索: `http://172.17.119.151:8327/search/professionalSearch` (内网) **文件位置**: `langchain-chat/configs/kb_config.py:97-98` **需要做的**: 确认搜索功能是否为核心需求,如是则需要部署自己的搜索服务或接入第三方搜索 API。 ### 4.7 画图服务 [需要解决] **当前状态**: 画图接口指向原公司内网服务器,不可用: - `http://192.168.56.123:5000/generate` - `http://192.168.56.123:5000/generate-image` **文件位置**: `langchain-chat/configs/kb_config.py:101-102` ### 4.8 文件下载服务 [需要解决] `kb_config.py:117` 中 `DOWNLOAD_HOST_CK` 指向 `http://106.3.149.154:8081/cast_getfile`,原公司旧服务器。 `kb_config.py:165` 中图片服务也指向旧 IP: `http://106.3.149.154:8081/chat_backend_ck/get-image?file_name={}`。 ### 4.9 Python 依赖中的本机路径 [需要解决] `kb_config.py` 中多处引用原开发者路径: ```python # kb_config.py:164 GENERATED_IMAGES_BASE_PATH = "/home/albert/workspaces/modelSpaces/models/text_to_pic/generated_images" # kb_config.py:166 KB_CHAT_TEMP_DIR = "/home/albert/workspaces/modelSpaces/models/tmp" # kb_config.py:168 CHROME_DIR = "/home/albert/workspaces/modelSpaces/models/chrome" ``` 这些路径在当前服务器上不存在,相关功能会报错。 ### 4.10 日志和上传路径 [建议解决] 需要确保以下目录存在并有写入权限: - `/opt/apps/logs/chat-server-backend-cast` (日志) - `/opt/logs/metal_llm/access` (访问日志) - `/opt/upload/metal_llm` (文件上传) --- ## 五、给客户新服务器部署的完整检查清单 ### 第一步:基础环境准备 - [ ] 安装 Docker 和 Docker Compose - [ ] 安装 Java 11 (OpenJDK) - [ ] 安装 Python 3.8+ 和 Conda - [ ] 安装 Node.js 16+ 和 npm - [ ] 安装 Maven 3 - [ ] 确保服务器有足够磁盘空间(模型文件 + 向量数据,建议 50GB+) ### 第二步:数据库部署 - [ ] 启动 MySQL Docker (`mysql/docker-compose.yml`) - [ ] 导入数据库 Schema (`chat_web_backend/doc/sql/` 下的 SQL 文件) - [ ] 导入业务数据(如有转储文件) - [ ] 部署本地 Redis (新增 Docker 服务或单独安装) - [ ] 启动 Milvus 向量数据库 (`milvus/docker-compose.yml`) - [ ] 导入向量知识库数据 ### 第三步:配置修改 **Java 后端** (`chat_web_backend/src/main/resources/`): - [ ] 修改 MySQL 连接地址和密码(指向本地或客户数据库) - [ ] 修改 Redis 连接地址和密码(指向本地) - [ ] 替换阿里云 OSS Key/Secret(如需要) - [ ] 修改 `serverUrlPrefix` 为客户实际域名/IP - [ ] 确认 OAuth2 配置(关闭或对接客户 SSO) - [ ] 修改日志和上传路径 - [ ] 重新编译: `mvn clean package -DskipTests` **Python 后端** (`langchain-chat/configs/`): - [ ] `model_config.py`: 替换 LLM API Key(通义千问、DeepSeek) - [ ] `model_config.py`: 确认 `MODEL_ROOT_PATH` 路径正确 - [ ] `kb_config.py`: 修改搜索服务 URL 或关闭搜索功能 - [ ] `kb_config.py`: 修改画图服务 URL 或关闭画图功能 - [ ] `kb_config.py`: 修改 MySQL 连接配置 (`ck_mysql_config`) - [ ] `kb_config.py`: 修改 `GENERATED_IMAGES_BASE_PATH`, `KB_CHAT_TEMP_DIR`, `CHROME_DIR` 路径 - [ ] `kb_config.py`: 修改 `DOWNLOAD_HOST_CK` 和 `IMAGE_SERVER_URL_TEMPLATE` - [ ] `oss_config.py`: 替换阿里云 OSS 凭证 **前端** (`chat_web_front/`): - [ ] `.env`: 修改 `VITE_GLOB_FRONT_CTX` (前端上下文路径) - [ ] `.env`: 修改 `VITE_GLOB_API_DEV_IP` (后端 API 地址) - [ ] 生产环境需要 Nginx 反向代理配置 **Java 源码中的硬编码** (需改代码并重新编译): - [ ] `KnowledgeBaseController.java`: 5 处 langchain-chat 地址硬编码 - [ ] `AliyunOSSUtil.java`: OSS Key/Secret/Endpoint/Bucket 硬编码 - [ ] `DocController.java`: IP 替换逻辑硬编码 ### 第四步:启动验证 按顺序启动: 1. MySQL Docker -> 验证数据库连接 2. Redis -> 验证缓存连接 3. Milvus Docker -> 验证向量库连接 4. langchain-chat Python 后端 -> 验证 API 和模型加载 5. chat_web_backend Java 后端 -> 验证业务 API 6. chat_web_front 前端 -> 验证页面访问 --- ## 六、二次开发可行性评估 ### 6.1 整体评估: 中等可行 (有一定门槛) | 维度 | 评分 | 说明 | |------|------|------| | 代码质量 | 中等 | 结构基本清晰,但存在大量硬编码,缺少注释 | | 架构设计 | 中等偏上 | 前后端分离 + Python AI 后端,三层架构合理 | | 可配置性 | 差 | 大量配置写死在代码/配置文件中,缺乏配置中心 | | 文档完整性 | 差 | 几乎没有开发文档、API 文档、部署文档 | | 技术栈现代性 | 中等 | Vue 3 较新,Spring Boot 2.3.7 偏旧,Python 部分合理 | | 测试覆盖 | 差 | 未发现单元测试和集成测试 | | 安全性 | 差 | API Key 明文硬编码、密码明文存储、Jasypt 密钥泄露 | ### 6.2 二次开发的优势 1. **三层架构清晰**: 前端、Java 后端、Python AI 后端职责分明,可以独立修改 2. **主流技术栈**: Vue 3、Spring Boot、FastAPI、LangChain 都是主流框架,开发人员容易上手 3. **模块化设计**: 知识库管理、对话管理、写作辅助等功能模块相对独立 4. **LLM 模型可替换**: 通过配置可以切换不同的在线 LLM 模型 (通义千问/DeepSeek/智谱等) 5. **SQL 脚本齐全**: 数据库建表脚本完整,可以在新环境重建 6. **嵌入模型已包含**: `models/` 目录下已有 `bge-m3` 和 `bge-reranker-large` 模型文件 ### 6.3 二次开发的风险和难点 1. **配置管理混乱**: 6 个 Spring Profile 配置文件 (dev/test/prod/yj/yjprod/ck),每个都有不同的硬编码,难以统一管理 2. **Java 代码中硬编码**: `KnowledgeBaseController.java` 和 `AliyunOSSUtil.java` 中的硬编码需要改源码 3. **Python 配置散落**: Python 端配置分散在多个 py 文件中,修改需要理解每个配置的作用 4. **缺乏 API 文档**: 前后端交互接口没有文档(没有 Swagger 等),需要阅读源码 5. **缺乏测试**: 修改代码后无法通过自动化测试验证正确性 6. **行业耦合度高**: 知识库名称、分类等与冶金行业强绑定(如 "冶金行业新闻库"、"冶金中文期刊库" 等),如果客户是其他行业需要大量修改 7. **第三方依赖**: 搜索服务、画图服务等外部依赖没有源码,需要自行实现或替代 8. **Jasypt 加密**: 生产配置使用了 Jasypt 加密,需要理解加密机制才能修改生产配置 9. **自定义 JAR 包**: `lib/` 目录下有两个非公开 JAR (`aspose-words-21.1-jdk17.jar`, `app-sign-sdk-0.0.2.jar`),无源码,功能不明确 ### 6.4 建议的二次开发优先级 **P0 - 必须首先完成 (部署基础)**: 1. 将所有远程服务替换为本地服务 (MySQL、Redis) 2. 替换所有第三方 API Key 为客户自有 3. 将 Java 源码中的硬编码 URL 改为可配置 **P1 - 尽快完成 (稳定性)**: 1. 统一配置管理,清理不需要的 Profile 2. 将敏感信息移入环境变量 3. 添加 Nginx 反向代理配置 4. 编写部署文档 **P2 - 按需完成 (功能增强)**: 1. 根据客户行业修改知识库分类和名称 2. 替换或重新实现搜索服务 3. 添加 API 文档 (Swagger/OpenAPI) 4. 添加基本的单元测试 --- ## 七、各配置文件完整 IP/凭证清单 以下是需要检查和替换的所有外部依赖的完整清单: ### 原公司 IP 地址 | IP | 出现文件 | 需要改为 | |-----|---------|---------| | `123.57.146.97` | application-dev.yml, application-yj.yml, application-test.yml | 本地 MySQL/Redis 地址 | | `123.56.15.82` | application-prod.yml, kb_config.py | 客户服务器 IP 或删除 | | `39.97.197.219` | application-test.yml | 客户测试服务器或删除 | | `192.168.56.123` | application-prod.yml, kb_config.py | 客户内网 AI 服务器或删除 | | `192.168.56.188` | DocController.java | 客户图片服务地址或删除 | | `106.3.149.154` | DocController.java, kb_config.py | 客户文件服务地址或删除 | | `172.17.119.151` | kb_config.py | 客户搜索服务地址或删除 | ### 凭证清单 | 凭证 | 类型 | 文件 | 操作 | |------|------|------|------| | `LTAI5tKV3JEn6EX6eVeQjrYN` | 阿里云 OSS AK | 多处 | 替换为客户 AK | | `CtMmajeabIVU6xjCVt6KCcWp9IcgD1` | 阿里云 OSS SK | 多处 | 替换为客户 SK | | `sk-672f9d1fc4404674bf1a713dfd130a14` | 通义千问 Key | model_config.py | 替换为客户 Key | | `sk-26858b50690a49828766fcfcf3290de9` | DeepSeek Key | model_config.py | 替换为客户 Key | | `Redis_897653` | Redis 密码 | 多个 yml | 替换为本地密码 | | `MYSQL!@#89765` | 远程 MySQL 密码 | 多个 yml | 替换为本地密码 | | `1234567890` | 本地 MySQL 密码 | application-dev.yml, docker-compose | 建议修改为强密码 | | `HadIuTIooXd0C93` | Jasypt 加密密钥 | JasyptConfiguration.java | 如需 Jasypt 则更换密钥 | | `Z4d5vrOSlASf0MX` | Jasypt 加密密钥 | JasyptConfiguration.java | 如需 Jasypt 则更换密钥 | | `nstlBj454x93w6n8rll3` | OAuth2 Client ID | application-yjprod.yml | 替换或删除 | | `minioadmin/minioadmin` | MinIO 凭证 | milvus/docker-compose.yml | 建议修改 | --- ## 八、运行时启动测试结果 (2026-02-26 实测) 以下是在 10.200.3.10 服务器上实际启动全部服务后的测试结果。 ### 8.1 基础设施状态 | 组件 | 状态 | 说明 | |------|------|------| | MySQL (Docker, 33306) | 正常运行 | 数据库 `chat_gpt_yj` 已有 21 张表,含业务数据 | | Redis (Docker portal-redis, 6379) | 正常运行 | 本地运行,无密码,但 Java 后端配置未指向本地 | | Milvus (Docker, 19530) | 正常运行 | 健康检查通过,但核心知识库集合缺失 | | MinIO (Docker, 9002/9003) | 正常运行 | Milvus 依赖 | | etcd (Docker, 2379) | 正常运行 | Milvus 依赖 | ### 8.2 三大服务启动状态 | 服务 | 端口 | 状态 | 问题 | |------|------|------|------| | langchain-chat (Python) | 7861 | 正常运行 | API 服务正常;WebUI (Streamlit) 未安装,8501 不可用 | | chat_web_backend (Java) | 8099 | 运行但有报错 | 启动正常,但 Redis 连远程导致部分 API 返回 500 | | chat_web_front (Vue) | 3000 | 正常运行 | http://10.200.3.10:3000/metalinfo 可访问 | ### 8.3 实际 API 测试结果 #### 登录测试 | 测试项 | 结果 | 说明 | |--------|------|------| | 登录端点 | `/app/api/oauth/token` (GET) | 需要 `client-id: app` 请求头 | | 新手机号自动注册 | 部分成功 | 用户会被创建到 `gpt_user` 表,但 Spring Security 认证有时序问题 | | 已有手机号登录 | 需正确密码 | `loginByTel` 对已存在用户不校验密码直接返回,但 Spring Security 会校验 BCrypt | | loginType | `3`=手机号, `4`=用户名密码 | 前端使用 loginType=3 | #### 逐项 API 实测结果 (curl 调用验证) **模块一: 问答** | 功能 | 测试方式 | 实际返回 | 结论 | |------|----------|----------|------| | 新建对话 | `POST /gpt/chat` prompt="什么是碳达峰" | code=200, 返回 chatNumber | 正常 | | 历史对话 | `GET /gpt/chat/listbyuserid` | code=200, data=[] (新用户无数据) | 正常 | | 多轮对话 | `POST 7861/chat/chat_test` history=[] | 返回 DeepSeek 回答 + Q1/Q2/Q3 推荐 | 正常 | | 术语解释 | `POST 7861/word_explain` word="碳中和" | 返回碳中和详细解释(流式) | 正常 | | 政策问答 | `POST 7861/chat/knowledge_base_chat` kb=t_policy_total_bge_new_v2 | **404: 未找到知识库** | 不可用 | | 大模型切换 | `POST 7861/llm_model/list_config_models` | 返回 qwen-max/deepseek-chat/deepseek-reasoner 三个模型 | 正常 | | 深度思考 | `POST 7861/chat/chat_test` model=deepseek-reasoner | 返回回答+推荐问题+摘要 | 正常 | | 问题推荐 | 包含在 chat_test 返回中 | 返回 Q1/Q2/Q3 三个推荐问题 | 正常 | | 知识库列表 | `GET /knowledgeChat/knowledgeBaseList` | 返回报告库/政策库/期刊论文 3 条配置 | 正常(但 Milvus 中无实际数据) | **模块二: 写作** | 功能 | 测试方式 | 实际返回 | 结论 | |------|----------|----------|------| | AI编辑器(Java→Python) | `POST /writer/answer` type=1 | **500: 生成失败** (Python返回422参数不匹配) | 不可用 | | 智能大纲 | `POST /outlines/getOutlines` title="钢铁行业碳达峰" | 流式返回 Markdown 大纲内容 | 正常 | | 续写 | `POST 7861/rewrite/con_rewrite` | 返回续写段落(约200字) | 正常 | | 扩写 | `POST 7861/rewrite/exp_write` | 返回扩写内容 | 正常 | | 缩写 | `POST 7861/rewrite/abb_write` | 返回异常(仅返回"缩写"两字) | 有 Bug | | 风格调整(正式) | `POST 7861/rewrite/formal_style` | 返回提示模板文本而非转换结果 | 有 Bug | | 关键词提取 | `POST 7861/gen_keywords` | 返回 "钢铁, 粗钢产量, 高耗能, 高排放" | 正常 | | 章节解析 | `POST 7861/gen_paragraph` | 返回结构化的三章解析 | 正常 | **模块三: 研读** | 功能 | 测试方式 | 实际返回 | 结论 | |------|----------|----------|------| | 关键词提取 | `POST 7861/gen_keywords` | 正确返回关键词列表 | 正常 | | 章节解析 | `POST 7861/gen_paragraph` | 正确返回章节结构 | 正常 | | 名词解释 | `POST 7861/word_explain` | 返回碳中和详细解释 | 正常 | | 引用问答 | `POST 7861/chat/self_kb_chat` quote=文本 | 返回基于引用文本的分析 | 正常 | | 翻译 | `POST 7861/chat/translate_text` | 调用成功但返回格式异常(返回query值) | 有 Bug | | 笔记 | `POST /gpt/file/addFileNote` | code=400 需要笔记位置参数 | 接口存在,参数复杂 | **模块四: 应用广场** | 功能 | 测试方式 | 实际返回 | 结论 | |------|----------|----------|------| | 实用工具 | `GET /config/getConfig?type=0` | code=200, data=[] (空数组) | 页面框架有,配置数据为空 | | 知识应用 | 同上 | 空 | 无数据无实现 | #### 关键发现的运行时问题 **问题 1: Redis 配置不匹配 [导致 500 错误]** 本地已有 Redis 服务 (portal-redis, 端口 6379, 无密码),但 `application-dev.yml` 中 Redis 配置仍指向远程: ```yaml # application-dev.yml:29-31 当前配置 (错误) host: 123.57.146.97 port: 6379 password: Redis_897653 ``` 应改为: ```yaml # 正确的本地配置 host: 127.0.0.1 port: 6379 password: "" # 本地 Redis 无密码 database: 0 # 本地 Redis 使用 database 0 而非 13 ``` **影响范围**: 历史对话列表、登录日志保存、Session 管理等依赖 Redis 的功能全部返回 500 错误。 **问题 2: Milvus 核心知识库缺失 [导致知识问答不可用]** Milvus 当前仅有 3 个集合,均非核心业务库: - `samples` (示例数据) - `p_d6c3b2030a094a84ad5f626eecfd13b4` (个人知识库) - `p_43ea5da26f504a838e10cf09d68bb68d` (个人知识库) **缺失的核心知识库** (MySQL `knowledge_base_config` 表中配置的): | 集合名 | 用途 | 状态 | |--------|------|------| | `t_policy_total_bge_new_v2` | 政策库 | 不存在 | | `t_strategy_report_bge_v2` | 报告库 | 不存在 | | `t_journal_article_bge_v1` | 期刊论文库 | 不存在 | 知识库问答调用会直接返回 `404: 未找到知识库`。 **问题 3: Java 后端 MySQL 连接池告警** Java 后端自 2026-02-05 启动至今已运行 3 周,Druid 连接池出现大量 `Communications link failure` 错误(连接超时断开)。建议定期重启或配置连接池保活参数。 **问题 4: Python WebUI (Streamlit) 未安装** Python 后端的 WebUI 进程启动失败:`FileNotFoundError: No such file or directory: 'streamlit'`。需要在 conda 环境中安装:`pip install streamlit`。WebUI 仅用于调试,不影响核心 API。 **问题 5: 岗位智能体无数据** 数据库中 `gpt_assistant` 和 `gpt_assistant_type` 表均为空,岗位智能体功能完全不可用。需要配置智能体类型和预设智能体数据。 ### 8.4 MySQL 数据库数据量统计 | 表名 | 记录数 | 说明 | |------|--------|------| | sys_user | 149 | 系统管理员账户 | | gpt_user | 226 | 前台用户 (手机号注册) | | gpt_chat | 3,931 | 对话会话 | | gpt_chat_message | 12,126 | 对话消息 | | gpt_upload_file | 403 | 上传文件 | | gpt_knowledge_base | 330 | 知识库记录 | | outlines | 956 | 写作大纲 | | writer_docs | 235 | 写作文档 | | gpt_assistant | 0 | 智能体 (空) | | gpt_assistant_type | 0 | 智能体类型 (空) | | knowledge_base_config | 3 | 知识库配置 (报告库/政策库/期刊) | 数据库已有大量业务数据,说明转储文件 `dump-chat_gpt_yj-202503051410.sql` 已成功导入。 --- ## 九、业务需求表 vs 代码实现功能对比 以下对比基于客户提供的业务需求表(4 大模块 39 项功能)与代码实际实现情况。 ### 9.1 模块一:问答 | 序号 | 功能 | 代码实现 | 运行时状态 | 差距分析 | |------|------|----------|------------|----------| | 1 | 新建对话 | 已实现 - `ChatController` + `chat_test.py` | 正常 | 无差距 | | 2 | 历史对话 | 已实现 - `ChatHistory.vue` + `ChatController.listChatByUserId()` | **不可用** | Redis 连接失败导致 500 错误;修复 Redis 配置即可恢复 | | 3 | 内容溯源 | 部分实现 - `knowledge_base_chat.py` 返回 `source_documents` | **不可用** | 依赖知识库问答,Milvus 集合缺失 | | 4 | 多轮对话 | 已实现 - `ChatMessage.parentMessageId` + 历史对话缓冲 | 正常 | 无差距 | | 5 | 文档问答 | 已实现 - `FileController.fileTalk()` + `file_chat.py` + `self_kb_chat.py` | 正常 | 支持 Word/PDF/Excel/图片上传和问答 | | 6 | 术语解释 | 已实现 - `word_explain.py` 端点 `/word_explain` | 正常 | 无差距 | | 7 | 选题推荐 | 已实现 - `policy_fun_iast.py` 的 `question_recommend` 模板 | 部分可用 | 与知识库关联的推荐不可用 | | 8 | 政策问答 | 部分实现 - `policy_fun_iast.py` + 编译的 `policy_fun.so` | **不可用** | 政策库 `t_policy_total_bge_new_v2` 在 Milvus 中不存在,互联网实时数据搜索服务 (123.56.15.82) 不可达 | | 9 | 大模型切换 | 已实现 - `/llm_model/change` + 前端模型选择 | 正常 | 需求表要求 Qwen3+DeepSeek;当前配置 qwen-max+deepseek-chat+deepseek-reasoner,基本满足 | | 10 | 深度思考 | 部分实现 - `thinking_generator()` + 前端 `thinkContent` 显示 | 部分可用 | 仅 deepseek-reasoner 模型支持,需要通过 `enable_thinking` 标志触发 | | 11 | 岗位智能体 | 框架存在 - `AgentController` + `agent_chat.py` | **不可用** | `gpt_assistant` 和 `gpt_assistant_type` 表为空,无预设智能体数据,需要配置"战略咨询助理""办公辅助"等角色 | | 12 | 问题推荐 | 已实现 - 对话结束后推荐 3 个相关问题 (Q1/Q2/Q3) | 正常 | 无差距 | **问答模块总结**: 12 项功能中,5 项正常可用,2 项部分可用,5 项不可用。核心问题是 Milvus 知识库缺失和 Redis 配置错误。 ### 9.2 模块二:写作 | 序号 | 功能 | 代码实现 | 运行时状态 | 差距分析 | |------|------|----------|------------|----------| | 1 | AI编辑器 | 部分实现 - `DocWriting.vue` + UEditor 集成 | 部分可用 | 编辑器基础功能可用,但 AI 辅助写作依赖的部分功能受限 | | 2 | 智能大纲 | 已实现 - `OutlinesController` + `write_article.py`,支持 3 种模板 | 正常 | 需求要求 3 种大纲模板,代码已支持 | | 3 | 内容生成 | 已实现 - `write_article.py` 根据大纲自动生成报告章节 | 正常 | 流式响应实时生成 | | 4 | 要点提炼 | 已实现 - `gen_abstract.py` 端点 `/gen_abstract` | 正常 | 无差距 | | 5 | 风格调整 | 已实现 - `/rewrite/formal_style`, `/rewrite/party_style`, `/rewrite/col_style` | 正常 | 需求要求"政风/学术/口语/自定义"4种,代码有正式/党政/口语 3 种,缺少"学术风格"和"自定义风格" | | 6 | 段落推荐 | 已实现 - `sentence_reference.py` 端点 `/sentence_reference` | 部分可用 | 依赖知识库检索,Milvus 集合缺失时退化为纯 LLM 生成 | | 7 | 合写续写 | 已实现 - `con_rewrite.py` 端点 `/rewrite/con_rewrite` | 正常 | 无差距 | | 8 | 扩写缩写 | 已实现 - `exp_rewrite.py` + `abb_rewrite.py` | 正常 | 无差距 | | 9 | 文档溯源 | 部分实现 - `relevant_articles.py` | 部分可用 | 溯源功能依赖知识库数据 | | 10 | 报告导出 | 已实现 - `FileController.downloadFile()` 导出 Word | 正常 | 使用 Aspose-Words 库生成 docx;注意该库为商业授权 | **写作模块总结**: 10 项功能中,7 项正常可用,3 项部分可用。整体完成度较高。 ### 9.3 模块三:研读 | 序号 | 功能 | 代码实现 | 运行时状态 | 差距分析 | |------|------|----------|------------|----------| | 1 | 要点提炼 | 已实现 - `gen_abstract.py`,结果存入 `UploadFile.articleAbstract` | 正常 | 无差距 | | 2 | 关键词提取 | 已实现 - `gen_keywords.py` 端点 `/gen_keywords` | 正常 | 无差距 | | 3 | 全文章节解析 | 已实现 - `gen_paragraph.py` 端点 `/gen_paragraph` | 正常 | 无差距 | | 4 | 语言翻译 | 已实现 - `translate.py` + `FileTranslateController`,支持 25+ 语言 | 正常 | 自动语种识别 + 文件翻译均已实现 | | 5 | 名词解释 | 已实现 - `word_explain.py` | 正常 | 无差距 | | 6 | 相关文献 | 已实现 - `relevant_articles.py` | 部分可用 | 依赖知识库向量检索,Milvus 缺失时仅靠 LLM 生成 | | 7 | 引用问答 | 已实现 - `self_kb_chat.py` 端点 `/chat/self_kb_chat`,支持 `quote` 参数 | 正常 | 无差距 | | 8 | 复制 | 已实现 - 前端各组件均有复制按钮 | 正常 | 无差距 | | 9 | 个人文献库 | 已实现 - `FileController` + `KnowledgeBase` 实体,CRUD 完整 | 正常 | 支持上传/删除/下载/批量操作 | | 10 | 笔记 | 已实现 - `FileNoteController` 端点 `/gpt/file/addFileNote` | 正常 | CRUD 完整 | **研读模块总结**: 10 项功能中,9 项正常可用,1 项部分可用。完成度最高的模块。 ### 9.4 模块四:应用广场 | 序号 | 功能 | 代码实现 | 运行时状态 | 差距分析 | |------|------|----------|------------|----------| | 1 | 实用工具 | 仅有框架 - `applications/index.vue` 页面存在 | **不可用** | 需求要求"战略决策咨询、实用科研工具、标准库、AI 应用工具集",代码仅有页面壳子,无实际工具实现 | | 2 | 知识应用 | 未实现 | **不可用** | 需求要求"行业专用知识工具和应用",代码中完全没有找到对应实现 | **应用广场模块总结**: 2 项功能均不可用。此模块基本未开发。 ### 9.5 功能覆盖率总结 | 模块 | 总功能数 | 正常可用 | 部分可用 | 不可用 | 覆盖率 | |------|----------|----------|----------|--------|--------| | 问答 | 12 | 5 | 2 | 5 | 42% (运行时) | | 写作 | 10 | 7 | 3 | 0 | 70% (运行时) | | 研读 | 10 | 9 | 1 | 0 | 90% (运行时) | | 应用广场 | 2 | 0 | 0 | 2 | 0% | | **合计** | **34** | **21** | **6** | **7** | **62% (运行时)** | > 注:"部分可用"指代码已实现但因 Milvus 数据缺失等依赖问题导致功能降级。 > 如果修复 Redis 配置 + 导入 Milvus 知识库数据,覆盖率可提升至约 **80%**。 > 剩余 20% 主要差距在:岗位智能体无数据、应用广场未开发、风格调整缺少学术/自定义选项。 ### 9.6 修复优先级(提升覆盖率的最快路径) 1. **修复 Redis 配置** (影响: +3 项功能恢复) - 将 `application-dev.yml` 中 Redis 指向本地 `127.0.0.1:6379`,去掉密码 2. **导入 Milvus 知识库数据** (影响: +5 项功能恢复) - 需要原始文档 + 重新向量化入库,或从原公司获取 Milvus 备份 3. **配置岗位智能体** (影响: +1 项功能) - 在 `gpt_assistant_type` 和 `gpt_assistant` 表中插入预设数据 4. **开发应用广场** (影响: +2 项功能) - 需要从零开发实用工具和知识应用模块 --- ## 十、总结 这个项目的核心问题在于**配置管理极度混乱**:大量外部依赖以硬编码方式分散在 Java 源码、YAML 配置文件、Python 配置文件中,没有统一的配置管理方案。交接时也没有提供完整的数据迁移方案和部署文档。 给客户新服务器部署时,最大的坑是: 1. **Redis 没有本地部署方案**,仍依赖原公司远程服务 2. **Milvus 向量数据缺失**,知识库功能无法使用 3. **Java 源码中有硬编码**,改配置不够还需要改代码重新编译 4. **所有第三方 API Key 都是原公司的**,需要全部替换 5. **搜索服务、画图服务等外部依赖完全不可用**,需要自行解决 二次开发是可行的,但需要先花精力解决上述配置和基础设施问题。建议在动手开发新功能之前,先完成一次完整的配置治理和独立部署验证。 --- ## 十一、AI 编辑器详细问题分析 ### 当前状态 AI 编辑器模块存在以下层次: 1. **前端 UI**: `DocWriting.vue` + UEditor 富文本编辑器集成 -- **存在** 2. **Java 后端**: `WriterAssistantController.writerAnswer()` -- **存在但有 Bug** 3. **Python API**: `/rewrite/con_rewrite`, `/rewrite/exp_write`, `/gen_abstract` 等 -- **部分可用** ### 核心 Bug: Java→Python 参数格式不匹配 Java 后端 `WriterAssistantController` 在调用 Python API 时,将参数包装在 `{"data": {...}}` 结构中: ```java // WriterAssistantController.java:77-78 Map map = new HashMap(); map.put("data", writerAnswerVo); // Python端期望的是扁平参数,不是嵌套在data字段里 ``` 但 Python 端各 endpoint 期望的是扁平参数格式(如 `{"context":"...", "paragraph_content":"...", "query":"..."}`),导致 Python 返回 `422 Unprocessable Entity`。 **影响**: 通过 Java 后端调用的所有写作辅助功能(续写、扩写、缩写、风格调整、要点提炼等)全部返回 500。 **但直接调用 Python API 的续写、扩写功能是正常的**。说明 Python 端代码没问题,是 Java→Python 的对接层出了问题。 ### 可能的原因 1. 原公司的 Python 后端可能有一个中间件来解析 `data` 字段,而我们部署的版本缺少这个中间件 2. 或者 `HttpUtil1.post()` 方法在原版本中有不同的参数序列化方式 3. 或者 Python API 在某次更新中改了参数格式但 Java 端没有同步更新 ### 修复难度: 中等 需要修改 `WriterAssistantController.java` 的参数组装方式,使之匹配 Python API 的预期格式,然后重新编译 Java 后端。 --- ## 十二、自行部署 vs 需要原公司支持的问题清单 ### 我们自己能解决的问题 | 问题 | 解决方式 | 难度 | |------|----------|------| | Redis 配置错误 | 修改 `application-dev.yml` 指向本地 Redis (127.0.0.1:6379, 无密码) | 简单 | | Java→Python 参数不匹配 (AI编辑器) | 修改 `WriterAssistantController.java` 参数格式,重新编译 | 中等 | | `KnowledgeBaseController.java` 硬编码 URL | 改为从配置文件读取 `chat.host`,重新编译 | 简单 | | `AliyunOSSUtil.java` 硬编码 Key | 改为从配置文件读取或使用环境变量,重新编译 | 简单 | | `DocController.java` IP 硬编码 | 改为可配置,重新编译 | 简单 | | Python 路径硬编码 (`/home/albert/...`) | 修改 `kb_config.py` 中的路径 | 简单 | | 日志/上传路径不存在 | 创建目录或修改配置 | 简单 | | LLM API Key 替换 | 客户注册通义千问/DeepSeek 账户,修改 `model_config.py` | 简单 | | 阿里云 OSS 替换 | 客户准备自己的 OSS 账户,修改配置 | 简单 | | 缩写/风格调整等 Python API Bug | 调试 Python 端参数解析逻辑 | 中等 | | 翻译功能返回格式异常 | 调试 `translate.py` 参数映射 | 中等 | | 岗位智能体无数据 | 自行设计角色并插入 `gpt_assistant_type` 和 `gpt_assistant` 表 | 中等 | | 应用广场无数据 | 自行设计工具卡片数据插入 `common_config` 表 | 中等 | | Streamlit WebUI 缺失 | `pip install streamlit` (非核心, 仅调试用) | 简单 | | Java 连接池超时告警 | 定期重启或优化 Druid 保活配置 | 简单 | | OAuth2/SSO 配置 | 关闭或对接客户自己的 SSO | 中等 | | Nginx 反向代理 | 自行编写 Nginx 配置文件 | 简单 | | Docker 镜像源问题 | 替换为客户可访问的镜像源或提前拉取 | 简单 | ### 一定需要原公司支持(或需要客户提供内容)的问题 | 问题 | 为什么需要 | 替代方案 | |------|-----------|----------| | **Milvus 向量知识库数据** | 三个核心知识库(政策库、报告库、期刊论文库)的向量数据是原公司用行业文档通过 bge-m3 模型向量化后存入 Milvus 的。我们没有原始文档。 | **替代方案 A**: 要求原公司提供 Milvus 数据备份(最快);**替代方案 B**: 要求原公司提供原始文档(PDF/Word),我们用本地 bge-m3 模型重新向量化入库(代码已有 `/knowledge_base/upload_docs` 接口);**替代方案 C**: 客户自己收集行业文档,从零建库(最慢但完全自主) | | **搜索服务** | 原公司自建的搜索服务 (`123.56.15.82:10326/search`),我们没有源码 | 可以用第三方搜索 API(如 Bing Search API)替代,或者直接去掉搜索功能 | | **画图服务** | 原公司部署在内网的 AI 画图服务 (`192.168.56.123:5000`),我们没有源码 | 可以接入其他 AI 画图 API(如通义万相、Stable Diffusion API),或去掉画图功能 | | **`policy_fun.so` 编译文件** | 政策问答的核心逻辑被编译为 `.so` 文件,无法修改 | 有对应的 `policy_fun_iast.py` 可作为替代,功能基本等价 | | **`aspose-words-21.1-jdk17.jar`** | 商业授权的 Word 文档处理库,用于报告导出 | 需要客户购买 Aspose 授权,或替换为免费的 Apache POI | | **`app-sign-sdk-0.0.2.jar`** | 无源码的签名 SDK,功能不明 | 需要确认是否在 dev 环境实际使用 | ### 关于知识库的详细说明 这是**最核心**的依赖项。知识库问答(政策问答、内容溯源、段落推荐、相关文献等)占业务需求表的约 30% 功能。 **当前状态**: - 本地 Milvus 已部署并运行正常 - 嵌入模型 bge-m3 已在 `/home/gc/gangyan/models/bge-m3` 目录 - Python 端有完整的向量化入库代码 (`/knowledge_base/upload_docs`) - **缺的只是原始文档内容** **自建知识库的可行性**: - 技术上完全可行:langchain-chat 已有文档上传→分段→向量化→入库的完整流程 - 但**行业文档本身需要客户提供**:政策文件、行业报告、期刊论文等 - 如果客户能提供 PDF/Word 格式的行业文档,我们可以自行完成向量化入库 - 预计需要数百到数千份文档才能达到原系统的知识库规模 **建议向原公司索要的最小数据集**: 1. Milvus 的数据备份(volumes 目录打包),或 2. 原始文档文件列表及文件本身,或 3. 至少提供知识库的文档来源说明(从哪些网站/数据库采集的) --- ## 十三、功能覆盖率修正 (基于实测数据) 之前的覆盖率评估部分基于代码分析推断,现修正为实际 API 调用验证的结果: | 模块 | 总功能 | 实测正常 | 有 Bug 但可修 | 依赖缺失不可用 | 未实现 | |------|--------|----------|---------------|----------------|--------| | 问答 | 12 | 6 | 0 | 5(知识库/智能体) | 1(内容溯源) | | 写作 | 10 | 3 | 4(Java→Python对接Bug) | 2(溯源/段落推荐依赖KB) | 1(报告导出未测) | | 研读 | 10 | 5 | 2(翻译Bug/笔记参数) | 1(相关文献依赖KB) | 2(复制/文献库未测) | | 应用广场 | 2 | 0 | 0 | 0 | 2 | | **合计** | **34** | **14(41%)** | **6(18%)** | **8(23%)** | **6(18%)** | **解读**: - **41% 可直接使用**: 普通对话、多轮对话、深度思考、大模型切换、术语解释、问题推荐、智能大纲、续写、扩写、关键词提取、章节解析、名词解释、引用问答 等 - **18% 有 Bug 但我们可以自行修复**: AI编辑器参数对接、缩写/风格调整的Python参数、翻译返回格式等 - **23% 因知识库/智能体数据缺失不可用**: 政策问答、知识库问答、内容溯源、段落推荐、相关文献、岗位智能体等 -- 需要原始文档数据 - **18% 未实现或未充分测试**: 应用广场2项完全未开发,报告导出/复制/文献库管理未在API层面验证