feat: 更新知识库管理器以支持重排序模型提供商,调整相关组件的默认配置和提示信息
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 || ''
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user