From a048369b38b63b2dda0b38ec30132cf8e3adc524 Mon Sep 17 00:00:00 2001 From: youhuanghe <1051233107@qq.com> Date: Tue, 10 Mar 2026 12:27:50 +0000 Subject: [PATCH] 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 --- src/langbot/pkg/provider/runners/localagent.py | 8 +++++++- src/langbot/pkg/rag/knowledge/kbmgr.py | 12 +++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/langbot/pkg/provider/runners/localagent.py b/src/langbot/pkg/provider/runners/localagent.py index f444529b..52e78b9d 100644 --- a/src/langbot/pkg/provider/runners/localagent.py +++ b/src/langbot/pkg/provider/runners/localagent.py @@ -74,7 +74,13 @@ class LocalAgentRunner(runner.RequestRunner): self.ap.logger.warning(f'Knowledge base {kb_uuid} not found, skipping') 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: all_results.extend(result) diff --git a/src/langbot/pkg/rag/knowledge/kbmgr.py b/src/langbot/pkg/rag/knowledge/kbmgr.py index 5831da30..6d7f76b4 100644 --- a/src/langbot/pkg/rag/knowledge/kbmgr.py +++ b/src/langbot/pkg/rag/knowledge/kbmgr.py @@ -321,13 +321,23 @@ class RuntimeKnowledgeBase(KnowledgeBaseInterface): if not plugin_id: 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 = { 'query': query, 'knowledge_base_id': kb.uuid, 'collection_id': kb.collection_id or kb.uuid, 'retrieval_settings': settings, 'creation_settings': kb.creation_settings or {}, - 'filters': settings.pop('filters', {}), + 'filters': filters, } result = await self.ap.plugin_connector.call_rag_retrieve(