后端:新增自包含 deerflow.knowledge 模块(models/repository/schemas/ extractor/sources/markdown_vault/manifest/obsidian_adapter/exporter/ search/service),通过 deps.py 装配为 app.state.knowledge_service, 挂载 /api/knowledge 路由;config.yaml 增加 knowledge 配置段, AppConfig 注册 KnowledgeConfig,ORM 注册 4 张 knowledge_* 表。 前端:新增知识库页面(KnowledgeBasePage/KnowledgeGraphPage)、 core/knowledge api/hooks/types、聊天侧 knowledge-save-trigger, 侧边栏增加「知识库」入口。 知识库为全局共享,不做 user_id 隔离,写入记录 created_by/updated_by 作为审计。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
"""Product knowledge base module (obsidian-wiki compatible).
|
|
|
|
Self-contained: knowledge ingestion, storage (DB mirror + Markdown vault),
|
|
search and graph export all live here. The Gateway only depends on
|
|
:class:`KnowledgeService` via :func:`make_knowledge_service`.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING
|
|
|
|
from deerflow.knowledge.obsidian_adapter import ObsidianWikiAdapter
|
|
from deerflow.knowledge.repository import KnowledgeRepository
|
|
from deerflow.knowledge.service import EmptyThreadError, KnowledgeService
|
|
|
|
if TYPE_CHECKING:
|
|
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker
|
|
|
|
from deerflow.config.knowledge_config import KnowledgeConfig
|
|
|
|
__all__ = [
|
|
"EmptyThreadError",
|
|
"KnowledgeRepository",
|
|
"KnowledgeService",
|
|
"ObsidianWikiAdapter",
|
|
"make_knowledge_service",
|
|
]
|
|
|
|
|
|
def make_knowledge_service(
|
|
session_factory: async_sessionmaker[AsyncSession] | None,
|
|
config: KnowledgeConfig,
|
|
) -> KnowledgeService | None:
|
|
"""Build the knowledge service.
|
|
|
|
Returns ``None`` when persistence is memory-only (no session factory) or
|
|
the feature is disabled — the router then responds 503.
|
|
"""
|
|
if session_factory is None or not config.enabled:
|
|
return None
|
|
return KnowledgeService(KnowledgeRepository(session_factory), config)
|