diff --git a/astrbot/core/knowledge_base/kb_manager_lifecycle.py b/astrbot/core/knowledge_base/kb_manager_lifecycle.py
index 97ed80437..0768874fa 100644
--- a/astrbot/core/knowledge_base/kb_manager_lifecycle.py
+++ b/astrbot/core/knowledge_base/kb_manager_lifecycle.py
@@ -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):
diff --git a/astrbot/core/knowledge_base/manager.py b/astrbot/core/knowledge_base/manager.py
index 497f64ac7..c4d31ba45 100644
--- a/astrbot/core/knowledge_base/manager.py
+++ b/astrbot/core/knowledge_base/manager.py
@@ -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)
diff --git a/astrbot/core/knowledge_base/models.py b/astrbot/core/knowledge_base/models.py
index 28adbaa0d..6ec77ad93 100644
--- a/astrbot/core/knowledge_base/models.py
+++ b/astrbot/core/knowledge_base/models.py
@@ -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),
diff --git a/dashboard/src/views/knowledge-base/components/RetrievalTab.vue b/dashboard/src/views/knowledge-base/components/RetrievalTab.vue
index f041d94f1..2bc5e6346 100644
--- a/dashboard/src/views/knowledge-base/components/RetrievalTab.vue
+++ b/dashboard/src/views/knowledge-base/components/RetrievalTab.vue
@@ -45,6 +45,9 @@
density="compact"
persistent-hint
/>
+
+ 如果没有配置重排序模型提供商,将跳过重排序步骤
+
@@ -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([])
const hasSearched = ref(false)
diff --git a/dashboard/src/views/knowledge-base/components/SessionsTab.vue b/dashboard/src/views/knowledge-base/components/SessionsTab.vue
index 8cc4a3a33..c5c0e56e9 100644
--- a/dashboard/src/views/knowledge-base/components/SessionsTab.vue
+++ b/dashboard/src/views/knowledge-base/components/SessionsTab.vue
@@ -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')
diff --git a/dashboard/src/views/knowledge-base/components/SettingsTab.vue b/dashboard/src/views/knowledge-base/components/SettingsTab.vue
index 7eba48d02..e0f10936f 100644
--- a/dashboard/src/views/knowledge-base/components/SettingsTab.vue
+++ b/dashboard/src/views/knowledge-base/components/SettingsTab.vue
@@ -68,8 +68,14 @@
+
+ 当前没有可用的重排序模型提供商,请先在提供商管理中添加支持 rerank 的模型
+
@@ -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 || ''
}