autosnippet
Version:
Extract code patterns into a knowledge base for AI coding assistants
110 lines (109 loc) • 3.94 kB
TypeScript
/**
* ConsolidationAdvisor — 提交前融合顾问
*
* 解决问题:Agent 逐条提交 Recipe 导致碎片化、低价值条目激增。
*
* 设计思路:在新知识提交前分析已有知识库,给出 4 种建议之一:
* create — 独立有价值,正常新建(走正常可信度判断)
* merge — 与 1 条 Recipe 相似,将候选内容合并到已有 Recipe,合并后 Recipe → staging
* reorganize — 与多条 Recipe 交叉重叠,将候选功能拆分到已有 Recipe 上,被修改的 Recipe → staging
* insufficient — 独立价值不足且已有足够 Recipe 覆盖,交给 Agent 与开发者决定
*
* 分析维度:
* 1. 结构相似度 — 复用 RedundancyAnalyzer 的 4 维算法
* 2. 语义域覆盖 — category + trigger 是否落在已有 Recipe 管辖范围
* 3. 独立价值 — 内容长度、具体性、是否有独立 coreCode
*/
import type KnowledgeRepositoryImpl from '../../repository/knowledge/KnowledgeRepository.impl.js';
/** 提交候选的必要字段 */
export interface CandidateForConsolidation {
title: string;
description?: string;
doClause?: string;
dontClause?: string;
coreCode?: string;
category?: string;
trigger?: string;
whenClause?: string;
kind?: string;
content?: {
pattern?: string;
markdown?: string;
[key: string]: unknown;
};
}
/** 建议类型 */
export type ConsolidationAction = 'create' | 'merge' | 'reorganize' | 'insufficient';
/** 融合方向分析 — 描述候选能为已有 Recipe 补充什么 */
export interface MergeDirection {
/** 候选提供的新维度(已有 Recipe 缺失的) */
addedDimensions: string[];
/** 融合建议摘要 */
summary: string;
}
/** 融合分析结果 */
export interface ConsolidationAdvice {
action: ConsolidationAction;
confidence: number;
reason: string;
/** action=merge 时,将候选内容合并到的目标 Recipe */
targetRecipe?: {
id: string;
title: string;
similarity: number;
};
/** action=merge 时,候选能为目标 Recipe 补充的新维度 */
mergeDirection?: MergeDirection;
/** action=reorganize 时,需要重新组织的 Recipe 列表 */
reorganizeTargets?: {
id: string;
title: string;
similarity: number;
}[];
/** action=insufficient 时,已覆盖该领域的 Recipe */
coveredBy?: {
id: string;
title: string;
similarity: number;
}[];
/** 需要 Agent 关注的上下文 */
relatedRecipes?: {
id: string;
title: string;
similarity: number;
}[];
}
/** 批量分析结果 — 每个候选一条分析 + 批次内重叠检测 */
export interface BatchConsolidationResult {
items: {
index: number;
advice: ConsolidationAdvice;
}[];
/** 批次内部候选之间的重叠 */
internalOverlaps: {
indexA: number;
indexB: number;
similarity: number;
}[];
}
export declare class ConsolidationAdvisor {
#private;
constructor(knowledgeRepo: KnowledgeRepositoryImpl);
/**
* 分析候选知识与现有知识库的关系,返回融合建议。
*
* @param candidate - 待提交的候选数据
* @returns ConsolidationAdvice — 建议 + 理由 + 上下文
*/
analyze(candidate: CandidateForConsolidation): Promise<ConsolidationAdvice>;
/**
* 批量分析候选知识与现有知识库的关系。
*
* 除了对每个候选独立运行 analyze() 外,
* 还检测批次内部候选之间的重叠(防止批量提交碎片化)。
*
* @param candidates - 待提交的候选数组
* @returns BatchConsolidationResult — 每条分析 + 批次内重叠
*/
analyzeBatch(candidates: CandidateForConsolidation[]): Promise<BatchConsolidationResult>;
}