feat: Pass session context (session_name) to knowledge engine retrieval filters.

Allow KnowledgeEngine plugins to filter retrieval results by session,enabling per-session memory isolation in plugin-based knowledge bases
This commit is contained in:
youhuanghe
2026-03-10 12:27:50 +00:00
parent 9ae0c263dc
commit a048369b38
2 changed files with 18 additions and 2 deletions

View File

@@ -74,7 +74,13 @@ class LocalAgentRunner(runner.RequestRunner):
self.ap.logger.warning(f'Knowledge base {kb_uuid} not found, skipping') self.ap.logger.warning(f'Knowledge base {kb_uuid} not found, skipping')
continue continue
result = await kb.retrieve(user_message_text) result = await kb.retrieve(
user_message_text,
settings={
'sender_id': str(query.sender_id),
'session_name': f'{query.session.launcher_type.value}_{query.session.launcher_id}',
},
)
if result: if result:
all_results.extend(result) all_results.extend(result)

View File

@@ -321,13 +321,23 @@ class RuntimeKnowledgeBase(KnowledgeBaseInterface):
if not plugin_id: if not plugin_id:
raise ValueError(f'No RAG plugin ID configured for KB {kb.uuid}. Retrieval failed.') raise ValueError(f'No RAG plugin ID configured for KB {kb.uuid}. Retrieval failed.')
# Extract session context before building retrieval_context
sender_id = settings.pop('sender_id', None)
session_name = settings.pop('session_name', None)
filters = settings.pop('filters', {})
if sender_id is not None:
filters['sender_id'] = sender_id
if session_name is not None:
filters['session_name'] = session_name
retrieval_context = { retrieval_context = {
'query': query, 'query': query,
'knowledge_base_id': kb.uuid, 'knowledge_base_id': kb.uuid,
'collection_id': kb.collection_id or kb.uuid, 'collection_id': kb.collection_id or kb.uuid,
'retrieval_settings': settings, 'retrieval_settings': settings,
'creation_settings': kb.creation_settings or {}, 'creation_settings': kb.creation_settings or {},
'filters': settings.pop('filters', {}), 'filters': filters,
} }
result = await self.ap.plugin_connector.call_rag_retrieve( result = await self.ap.plugin_connector.call_rag_retrieve(