autosnippet
Version:
Extract code patterns into a knowledge base for AI coding assistants
55 lines (54 loc) • 1.63 kB
TypeScript
/**
* CrossEncoderReranker — AI 驱动的语义重排器
*
* 替代 Jaccard 相似度,使用 LLM 对 (query, document) 对进行语义相关性评分。
*
* 策略:
* 1. 将候选文档与 query 组成 pairs,批量送入 AI 评分
* 2. AI 返回每个 pair 的 relevance score (0.0-1.0)
* 3. 按 score 降序排列
*
* 优化:
* - 单次 API 调用批量评分(减少延迟和成本)
* - 文档截断至 MAX_DOC_LEN 控制 token 消耗
* - 候选上限 MAX_CANDIDATES,超出部分保留原始顺序
* - AI 不可用时自动降级到 Jaccard
*/
interface RerankCandidate {
title?: string;
trigger?: string;
description?: string;
summary?: string;
code?: string;
content?: string;
semanticScore?: number;
[key: string]: unknown;
}
export declare class CrossEncoderReranker {
#private;
constructor(opts?: {
aiProvider?: {
chatWithStructuredOutput: (prompt: string, opts: Record<string, unknown>) => Promise<unknown>;
} | null;
logger?: {
warn?: (...args: unknown[]) => void;
};
});
/**
* 对候选列表进行语义重排
*
* @param query 用户查询
* @param candidates Layer 1 输出的候选列表
* @returns 附带 semanticScore 的候选列表(降序)
*/
rerank(query: string, candidates: RerankCandidate[]): Promise<RerankCandidate[] | {
semanticScore: any;
title?: string;
trigger?: string;
description?: string;
summary?: string;
code?: string;
content?: string;
}[]>;
}
export {};