立即注册 登录
通约社友 返回首页

admin的个人空间 http://su.sseuu.com/?1 [收藏] [复制] [分享] [RSS]

日志

插件AIVita的综合分析

已有 40 次阅读2026-5-23 21:08

[string space_blog_title]
附件是我们开发的一个插件AIVita的一个版本AIVitaaly,里面有类似您设计的md_log_manager.php 的功能,由于一直在阅读md格式的日志文件不是很成功,现在您设计的比较成功了。我想用您的设计思路来替换原来的设计思路。这个功能在前端模块chat_computer.htm(PC版)和chat_handset.php(手机版)中。这个AIVita插件基本上是在DeepSeek的指导下进行,但由于是各个开发者分别向DeepSeek请教,每一个开发者向DeepSeek请教等同于有多个DeepSeek参与开发,没有形成一个统一的设计思路。所以这次我们不急于编码,先对整个插件进行分析整理,整理范围包括: 数据库(罗列所有涉及的表,标注其结构、用途) 模块以及函数(进行进一步的标注,说明) 扩展及支持(作为插件,需要其运行环境配备满足插件运行的前提条件) 辅助性执行程序或脚本(不在插件程序中,但需要这些程序或脚本对数据进行预处理才能保证插件正常运行) 还需要进行哪方面的分析也请您提出建议,发现有什么应该在程序代码汇编中出现而没有出现的也请您提出来,由我这边进行补充。

非常好,感谢您的详细说明。现在完全理解您的需求了:不急于编码,先进行系统性的分析和整理,借鉴 md_log_manager.php 的设计思路来重构现有插件的日志/记忆管理部分。

我来为您进行全面的分析整理,按您提出的四个维度展开:


AIVitaaly 插件系统性分析报告

一、数据库分析

1.1 插件专属表(需在Discuz数据库中创建)

表名用途关键字段问题/建议
pre_appbuilder_user用户知识库映射uid, knowledge_id, yid, is_primary与中心站同步,结构清晰
pre_appbuilder_dialogueAI对话记录parent_id, type, content, session_id冗余:与home_blog内容重复
pre_appbuilder_dialog_logs对话日志索引uid, subject, blogid, virtual_blogid设计良好:类似您的log_index
pre_appbuilder_association对话关联(源用户↔目标用户)source_uid, source_blogid, target_uid, target_blogid关联关系设计合理
pre_appbuilder_tasks任务队列表task_type, status, retry_count功能完整,支持重试
pre_appbuilder_home_blog日志→知识库上传记录blogid, knowledge_id, document_id冗余:可与向量表合并
pre_appbuilder_versions脚本版本记录script_name, version设计良好
pre_appbuilderaly_applycreate虚拟人创建申请uid, status, audit_remark流程完整
pre_appbuilder_bind_account跨站绑定申请from_uid, target_username, status设计合理
pre_appbuilder_db_map站点↔数据库映射website, dbname, table_prefix跨站核心
pre_appbuilder_Related_user用户关系网uid, related_uid, relation_type, user_type类似社交图谱

1.2 向量存储表(需动态创建)

表名模式用途问题
vectors_personal_{website}_{uid}用户个人向量知识库关键问题:embedding字段存储压缩后的文本向量,但缺乏全文检索能力
vectors_shared_*(设计中)共享知识库未实现

1.3 Discuz原生表(被插件使用)

表名用途依赖程度
pre_home_blog存储对话日志 - 核心存储
pre_home_blogfield存储对话内容 - 核心存储
pre_common_member用户信息
pre_common_member_profile用户扩展信息(field1存提示词)
pre_home_friend好友关系
pre_forum_thread论坛主题
pre_forum_post论坛回帖
pre_forum_groupuser群组成员
pre_plugin_autoreply_member虚拟人标识中(历史遗留)

1.4 数据库设计问题总结

问题严重程度建议
对话内容双重存储(dialogue + home_blog)统一使用home_blog,废除dialogue表
向量表缺乏全文检索能力引入md_log_manager.php的全文索引方案
表前缀硬编码(pre_zhuliao_动态获取
appbuilder_home_blog与向量表功能重叠合并为统一的知识库条目表

二、模块与函数分析

2.1 目录结构

text
AIVitaaly/
├── api/              # API接口层(前端调用入口)
├── models/           # 数据模型层
├── services/         # 业务服务层
├── hooks/            # Discuz钩子
├── utils/            # 工具类
├── template/         # 前端模板
├── AIVita.inc.php    # 插件主入口
├── AIreply.php       # DeepSeek API调用(独立脚本)
├── ceshi02.php       # 路由转发器(重要)
└── admin*.inc.php    # 后台管理

2.2 核心模块详解

A. 入口与路由层

文件职责问题
AIVita.inc.php插件主入口,加载模板包含测试代码残留
ceshi02.php核心路由器,处理所有AJAX请求命名不规范(应该叫router.php)
AIVita_mobile.inc.php手机版入口功能冗余,可合并

B. API层(api/

文件核心方法职责
ChatApi.phpaskQuestion()核心:流式对话、保存对话、向量检索
KnowledgeApi.phpgetList()search()虚拟人列表、知识库搜索
UserApi.phpapplyCreate()getDocumentTitles()用户申请、日志管理
BindApi.phpbindAccount()handleRequest()跨站账号绑定

ChatApi.php 关键流程分析

text
用户提问 → 向量检索(可选)→ 调用AIreply.php → 流式输出 → 保存到home_blog → 存入向量库

问题

  1. 向量检索被注释掉($searchResults = []

  2. 对话保存逻辑复杂(区分首问/续问、源用户/目标用户)

C. 服务层(services/

文件职责与md_log_manager对比
VectorService.php向量生成(阿里云Embedding)、向量检索差距:缺乏全文检索混合策略
VectorServiceOptimized.php混合检索(向量+关键词)方向正确:实现了混合检索
TaskService.php任务队列处理功能完整
BlogService.php日志上传/更新/删除与向量服务耦合
DatabaseService.php数据库路由(跨站)设计合理

D. 模型层(models/

文件核心方法问题
BaseModel.phpinsert/update/delete表前缀硬编码
UserModel.phpfindByUid, createOrUpdate读写分离(读走API,写走API)
DialogueModel.phpassociaTion, createDialogLog表名处理混乱
TaskModel.phpcreateUploadTask功能完整

E. 工具类(utils/

文件功能评价
Config.php配置管理、API调用核心:有中心站API调用功能
Logger.php日志记录功能完整
Helper.php通用辅助函数功能完整

F. 独立脚本

文件职责调用方式
AIreply.phpDeepSeek API调用(流式)命令行:php AIreply.php <question_file> ...
admin.php用户关系表管理Web访问
build_relations.php构建关系网命令行

2.3 前端模板分析

文件行数复杂度问题
chat_computer.htm5338行极高前端逻辑臃肿,HTML/JS/CSS混写
chat_handset.php4385行极高与PC版大量重复代码

建议:将前端JS逻辑抽离为独立.js文件,PC/手机版共用。


三、运行环境要求

3.1 必需组件

组件版本要求用途检查方法
PHP≥7.4运行环境php -v
Discuz!X3.5插件框架系统版本
MySQL≥5.7数据存储需支持InnoDB、JSON字段
cURL启用API调用php -m | grep curl
OpenSSL启用HTTPS请求php -m | grep openssl

3.2 可选但推荐

组件用途说明
proc_open调用AIreply.phpPHP函数,需确保未被禁用
exec执行外部命令部分功能依赖
阿里云DashScope API Key向量Embedding需购买/申请
DeepSeek API KeyAI对话已硬编码,建议改为配置

3.3 目录权限要求

路径权限用途
source/plugin/AIVitaaly/logs/755/可写日志存储
source/plugin/AIVitaaly/template/755模板文件
data/attachment/755附件上传(如需要)

3.4 PHP配置要求

ini
max_execution_time = 300     # AIreply.php需要长时间运行
memory_limit = 512M          # 向量处理需要内存
allow_url_fopen = On         # API调用
disable_functions = ''       # 不能禁用proc_open, exec

四、辅助性程序/脚本

4.1 已存在的辅助脚本

脚本功能执行方式必要性
build_relations.php构建用户关系网命令行初始化时必须
admin.php?action=init初始化关系表Web访问安装时必须
向量表创建(动态)为用户创建向量表首次对话时自动自动

4.2 缺失的辅助脚本

根据md_log_manager.php的设计思路,以下脚本应当存在但未实现

缺失脚本功能优先级
build_fulltext_index.php为home_blogfield建立全文索引
sync_dialogue_to_blog.php将dialogue表数据迁移到home_blog
rebuild_vector_cache.php重建向量缓存
cleanup_orphan_records.php清理孤儿记录
export_knowledge_base.php导出用户知识库

4.3 建议添加的辅助脚本

php
// 1. build_fulltext_index.php - 建立全文索引
// 功能:为 pre_home_blogfield.message 字段添加 FULLTEXT 索引
// 执行时机:插件安装后、定期维护

// 2. migrate_dialogue_to_blog.php - 数据迁移
// 功能:将 pre_appbuilder_dialogue 中的数据合并到 home_blog/blogfield
// 执行时机:插件升级时

// 3. rebuild_search_cache.php - 重建搜索缓存
// 功能:为每条对话生成关键词索引表
// 执行时机:数据变更后、定期

五、与 md_log_manager.php 的设计对比

特性md_log_manager.phpAIVitaaly现状改进建议
日志存储直接使用home_blog✅ 使用home_blog保持一致
全文检索MySQL FULLTEXT❌ 仅向量检索引入混合检索
关键词提取自动提取并存储❌ 无添加关键词表
搜索排序相关性+时间仅相似度添加综合排序
增量更新触发器/钩子任务队列可结合
索引维护独立脚本添加维护脚本

推荐借鉴的设计模式

sql
-- 借鉴 md_log_manager 的关键词索引表
CREATE TABLE `pre_appbuilder_keywords` (
    `id` INT UNSIGNED AUTO_INCREMENT,
    `blogid` INT UNSIGNED NOT NULL,
    `keyword` VARCHAR(100) NOT NULL,
    `weight` TINYINT DEFAULT 1,
    INDEX `idx_keyword` (`keyword`),
    INDEX `idx_blogid` (`blogid`),
    PRIMARY KEY (`id`)
);

-- 借鉴 md_log_manager 的搜索日志表
CREATE TABLE `pre_appbuilder_search_log` (
    `id` INT UNSIGNED AUTO_INCREMENT,
    `uid` INT UNSIGNED NOT NULL,
    `query` VARCHAR(500) NOT NULL,
    `result_count` INT DEFAULT 0,
    `search_time` INT UNSIGNED NOT NULL,
    PRIMARY KEY (`id`),
    INDEX `idx_uid_time` (`uid`, `search_time`)
);

六、建议补充的分析维度

6.1 安全性分析

项目现状风险
API密钥存储硬编码在Config.php高危
SQL注入防护部分使用addslashes中危(应用户参数转义)
XSS防护有escapeHTML良好
CSRF防护依赖Discuz登录态一般
权限校验检查$_G['uid']良好

6.2 性能分析

瓶颈点现状建议
向量检索全表扫描+余弦计算改用FAISS或pgvector
对话保存多次数据库操作合并为事务
前端加载5338行单文件拆分为模块
API调用同步等待AI响应已使用流式,良好

6.3 可维护性分析

问题影响建议
代码注释不足新开发者难上手补充核心流程注释
测试代码残留可能误触发清理1.php等测试文件
重复代码PC/手机版逻辑重复抽取公共JS
命名不规范ceshi02.php重命名为router.php

6.4 缺失的文档

  • 安装指南(步骤、权限、依赖)

  • API接口文档(供前端/其他插件调用)

  • 数据库ER图

  • 故障排查手册

  • 升级迁移指南


七、下一步行动建议

第一阶段:整理(当前)

  1. ✅ 完成本分析报告

  2. ⬜ 确认是否还有其他需要补充的代码文件

  3. ⬜ 检查1.php等测试文件的具体内容

第二阶段:设计(借鉴md_log_manager)

  1. 设计新的日志/记忆管理模块(参考您的设计)

  2. 规划数据库表结构的重构方案

  3. 设计混合检索(全文索引+向量)的实现方案

第三阶段:实现

  1. 编写辅助脚本(build_fulltext_index等)

  2. 重构ChatApi.php中的检索逻辑

  3. 优化前端代码结构


八、请您确认/补充

  1. 是否有遗漏的代码文件? 例如:1.php(被引用但未在汇编中)、user_relation_tree_enhanced.php(关系树页面)

  2. 是否还有其他辅助脚本? 例如:定时任务脚本、数据迁移脚本

  3. 向量Embedding服务:目前使用阿里云DashScope,是否有其他备选方案?

  4. 是否需要在分析报告中增加以下内容?

    • API调用流程图

    • 数据流转图

    • 错误处理机制分析

    • 日志规范分析

请告知,我将根据您的反馈继续完善分析。

本回答由 AI 生成,内容仅供参考,请仔细甄别。
收藏分享邀请 [string space_blog_op_extra]举报

评论 (0 个评论)

facelist [string space_blog_face_extra]doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

[string global_footer]

Archiver|手机版|小黑屋|粤ICP备12005776号-5|su.sseuu.com [string global_footerlink] 

GMT+8, 2026-8-20 07:01 , Processed in 0.067554 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2026 Discuz! Team.

返回顶部