koishi-plugin-best-cave
Version:
功能强大、高度可定制的回声洞插件。支持丰富的媒体类型、内容查重、AI分析、人工审核、用户昵称、数据迁移以及本地/S3 双重文件存储后端。
100 lines (99 loc) • 4.34 kB
TypeScript
import { Context, Logger } from 'koishi';
import { Config, CaveObject } from './index';
import { FileManager } from './FileManager';
/**
* @description 定义了数据库 \`cave_meta\` 表的结构模型。
*/
export interface CaveMetaObject {
cave: number;
rating: number;
type: string;
keywords: string[];
}
declare module 'koishi' {
interface Tables {
cave_meta: CaveMetaObject;
}
}
/**
* @class AIManager
* @description AI 管理器,作为连接 AI 服务与回声洞功能的核心模块。
*/
export declare class AIManager {
private ctx;
private config;
private logger;
private fileManager;
private http;
private endpointIndex;
private retryTime;
/**
* @description 用于分析的 AI 系统提示词。
*/
private readonly ANALYSIS_SYSTEM_PROMPT;
/**
* @description 用于查重的 AI 系统提示词。
*/
private readonly DUPLICATE_SYSTEM_PROMPT;
/**
* @constructor
* @description AIManager 的构造函数。
* @param {Context} ctx - Koishi 的上下文对象。
* @param {Config} config - 插件的配置对象。
* @param {Logger} logger - 日志记录器实例。
* @param {FileManager} fileManager - 文件管理器实例。
*/
constructor(ctx: Context, config: Config, logger: Logger, fileManager: FileManager);
/**
* @description 注册与 AI 功能相关的管理命令。
* @param {any} cave - \`cave\` 命令的实例,用于挂载子命令。
*/
registerCommands(cave: any): void;
/**
* @description 检查新内容是否与数据库中已存在的回声洞重复。
* @param {CaveMetaObject} newAnalysis - 新内容经过 AI 分析后的元数据。
* @param {CaveObject} newCave - 待检查的新回声洞的完整对象。
* @returns {Promise<number[]>} - 一个 Promise,解析为重复的回声洞 ID 数组。如果不重复或检查失败,则为空数组。
*/
checkForDuplicates(newAnalysis: CaveMetaObject, newCave: CaveObject): Promise<number[]>;
/**
* @description 对一个或多个回声洞内容进行 AI 分析。
* @param {CaveObject[]} caves - 需要分析的回声洞对象数组。
* @param {{ fileName: string; buffer: Buffer }[]} [mediaBuffers] - 可选的媒体文件缓存。
* @returns {Promise<CaveMetaObject[]>} - 一个 Promise,解析为分析结果(\`CaveMetaObject\`)的数组。
*/
analyze(caves: CaveObject[], mediaBuffers?: {
fileName: string;
buffer: Buffer;
}[]): Promise<CaveMetaObject[]>;
/**
* @description 准备单个回声洞的内容(文本和图片)以供 AI 模型处理。
* @param {CaveObject} cave - 要处理的回声洞对象。
* @param {Map<string, Buffer>} [mediaMap] - 媒体文件的缓存 Map。
* @returns {Promise<any[] | null>} - 一个 Promise,解析为适合 AI 请求的 content 数组,如果回声洞为空则返回 null。
*/
private prepareContent;
/**
* @description 使用 AI 批量判断一个主要回声洞是否与一组候选回声洞中的任何一个重复。
* @param {CaveObject} mainCave - 主要的回声洞。
* @param {CaveObject[]} candidateCaves - 用于比较的候选回声洞数组。
* @returns {Promise<number[]>} - 一个 Promise,解析为重复的回声洞 ID 数组。如果不重复或检查失败,则为空数组。
*/
private IsDuplicate;
/**
* @description 计算两组关键词之间的相似度(Jaccard 相似系数)。
* @param {string[]} keywordsA - 第一组关键词。
* @param {string[]} keywordsB - 第二组关键词。
* @returns {number} - 返回 0 到 100 之间的相似度百分比。
*/
private calculateSimilarity;
/**
* @description 向配置的 AI 服务端点发送请求的通用方法。
* @template T - 期望从 AI 响应中解析出的 JSON 对象的类型。
* @param {any[]} messages - 发送给 AI 的消息数组。
* @param {string} systemPrompt - 系统提示词。
* @returns {Promise<T>} - 一个 Promise,解析为从 AI 响应中解析出的 JSON 对象。
* @throws {Error} - 如果 AI 服务持续失败或响应无法解析,则抛出错误。
*/
private requestAI;
}