feat: 更新知识库管理器以支持重排序模型提供商,调整相关组件的默认配置和提示信息

This commit is contained in:
lxfight
2025-10-20 22:38:06 +08:00
parent 2fc77aed15
commit a05868cc45
6 changed files with 38 additions and 11 deletions
@@ -177,6 +177,7 @@ class KnowledgeBaseManager:
storage_path=files_path,
parsers=parsers,
chunker=chunker,
provider_manager=self.provider_manager,
)
async def _init_retrieval_manager(self):
+20 -2
View File
@@ -34,6 +34,7 @@ class KBManager:
storage_path: str,
parsers: dict[str, BaseParser],
chunker: BaseChunker,
provider_manager=None,
):
self.db = db
self.vec_db = vec_db
@@ -42,6 +43,7 @@ class KBManager:
self.files_path = self.storage_path / "files"
self.parsers = parsers
self.chunker = chunker
self.provider_manager = provider_manager
# 确保目录存在
self.media_path.mkdir(parents=True, exist_ok=True)
@@ -63,7 +65,23 @@ class KBManager:
top_m_final: Optional[int] = None,
enable_rerank: Optional[bool] = None,
) -> KnowledgeBase:
"""创建知识库"""
"""创建知识库
Args:
enable_rerank: 是否启用重排序。
- 如果明确传入 True/False,则使用该值
- 如果为 None,则根据是否有可用的 rerank provider 自动决定
"""
# 智能决定 enable_rerank 的默认值
if enable_rerank is None:
# 检查是否有可用的 rerank provider
has_rerank_provider = (
self.provider_manager
and hasattr(self.provider_manager, 'rerank_provider_insts')
and len(self.provider_manager.rerank_provider_insts) > 0
)
enable_rerank = has_rerank_provider
kb = KnowledgeBase(
kb_name=kb_name,
description=description,
@@ -75,7 +93,7 @@ class KBManager:
top_k_dense=top_k_dense if top_k_dense is not None else 50,
top_k_sparse=top_k_sparse if top_k_sparse is not None else 50,
top_m_final=top_m_final if top_m_final is not None else 5,
enable_rerank=enable_rerank if enable_rerank is not None else True,
enable_rerank=enable_rerank,
)
async with self.db.get_db() as session:
session.add(kb)
+1 -1
View File
@@ -49,7 +49,7 @@ class KnowledgeBase(SQLModel, table=True):
top_k_dense: Optional[int] = Field(default=50, nullable=True)
top_k_sparse: Optional[int] = Field(default=50, nullable=True)
top_m_final: Optional[int] = Field(default=5, nullable=True)
enable_rerank: Optional[bool] = Field(default=True, nullable=True)
enable_rerank: Optional[bool] = Field(default=False, nullable=True)
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
updated_at: datetime = Field(
default_factory=lambda: datetime.now(timezone.utc),
@@ -45,6 +45,9 @@
density="compact"
persistent-hint
/>
<v-alert v-if="enableRerank" type="info" variant="tonal" class="mt-2" density="compact">
如果没有配置重排序模型提供商将跳过重排序步骤
</v-alert>
</v-card>
</v-col>
</v-row>
@@ -147,7 +150,7 @@ const props = defineProps<{
const loading = ref(false)
const query = ref('')
const topK = ref(5)
const enableRerank = ref(true)
const enableRerank = ref(false)
const results = ref<any[]>([])
const hasSearched = ref(false)
@@ -117,20 +117,19 @@ const headers = [
// 加载使用该知识库的会话
const loadSessions = async () => {
loading.value = true
console.log('[SessionsTab] 开始加载会话列表, kb_id:', props.kbId)
try {
const url = '/api/kb/session/config/list_by_kb'
const params = { kb_id: props.kbId }
console.log('[SessionsTab] 请求URL:', url, '参数:', params)
const response = await axios.get(url, { params })
console.log('[SessionsTab] 响应状态:', response.status)
console.log('[SessionsTab] 响应数据:', response.data)
if (response.data.status === 'ok') {
sessions.value = response.data.data.sessions
console.log('[SessionsTab] 成功加载会话列表, 数量:', sessions.value.length)
} else {
console.error('[SessionsTab] API返回错误:', response.data.message)
showSnackbar(response.data.message || t('sessions.loadFailed'), 'error')
@@ -68,8 +68,14 @@
<v-checkbox
v-model="formData.enable_rerank"
:label="t('settings.enableRerank')"
:hint="rerankProviders.length === 0 ? '未检测到可用的重排序模型提供商' : '使用重排序模型提高检索质量'"
:disabled="rerankProviders.length === 0"
color="primary"
persistent-hint
/>
<v-alert v-if="formData.enable_rerank && rerankProviders.length === 0" type="warning" variant="tonal" class="mt-2" density="compact">
当前没有可用的重排序模型提供商,请先在提供商管理中添加支持 rerank 的模型
</v-alert>
</v-col>
</v-row>
@@ -211,7 +217,7 @@ const formData = ref({
top_k_dense: 50,
top_k_sparse: 50,
top_m_final: 5,
enable_rerank: true,
enable_rerank: false,
embedding_provider_id: '',
rerank_provider_id: ''
})
@@ -225,7 +231,7 @@ watch(() => props.kb, (kb) => {
top_k_dense: kb.top_k_dense || 50,
top_k_sparse: kb.top_k_sparse || 50,
top_m_final: kb.top_m_final || 5,
enable_rerank: kb.enable_rerank !== false,
enable_rerank: kb.enable_rerank === true,
embedding_provider_id: kb.embedding_provider_id || '',
rerank_provider_id: kb.rerank_provider_id || ''
}