mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-01-04 20:00:00 +08:00
* refactor(reranker): 重构重排序功能以提高可维护性 - 将 BaseReranker 类中的公共逻辑提取到受保护的方法中 - 优化了 JinaReranker、SiliconFlowReranker 和 VoyageReranker 的实现 - 新增 getRerankUrl 和 getRerankResult 方法以提高代码复用性 - 简化了重排序结果的处理逻辑 * refactor(reranker): 将 formatErrorMessage 方法的访问权限改为受保护 - 将 formatErrorMessage 方法的访问权限从公共 (public) 改为受保护 (protected) - 这一更改限制了方法的访问范围,仅允许子类访问该方法 - 有助于提高代码的封装性和安全性
41 lines
1.2 KiB
TypeScript
41 lines
1.2 KiB
TypeScript
import { ExtractChunkData } from '@cherrystudio/embedjs-interfaces'
|
|
import { KnowledgeBaseParams } from '@types'
|
|
import axios from 'axios'
|
|
|
|
import BaseReranker from './BaseReranker'
|
|
|
|
export default class VoyageReranker extends BaseReranker {
|
|
constructor(base: KnowledgeBaseParams) {
|
|
super(base)
|
|
}
|
|
|
|
public rerank = async (query: string, searchResults: ExtractChunkData[]): Promise<ExtractChunkData[]> => {
|
|
const url = this.getRerankUrl()
|
|
|
|
const requestBody = {
|
|
model: this.base.rerankModel,
|
|
query,
|
|
documents: searchResults.map((doc) => doc.pageContent),
|
|
top_k: this.base.topN,
|
|
return_documents: false,
|
|
truncation: true
|
|
}
|
|
|
|
try {
|
|
const { data } = await axios.post(url, requestBody, {
|
|
headers: {
|
|
...this.defaultHeaders()
|
|
}
|
|
})
|
|
|
|
const rerankResults = data.data
|
|
return this.getRerankResult(searchResults, rerankResults)
|
|
} catch (error: any) {
|
|
const errorDetails = this.formatErrorMessage(url, error, requestBody)
|
|
|
|
console.error('Voyage Reranker API Error:', errorDetails)
|
|
throw new Error(`重排序请求失败: ${error.message}\n请求详情: ${errorDetails}`)
|
|
}
|
|
}
|
|
}
|