实现知识库领域模型,包括 KnowledgeBase 和 PromptDimension 实体,以及相关的业务逻辑方法。
任务要求:
属性:
id: EntityId - 唯一标识符name: str - 知识库名称description: str - 知识库描述created_at: Timestamp - 创建时间updated_at: Timestamp - 最后更新时间tags: Set[str] - 标签集合(默认为空集合)document_ids: List[str] - 文档 ID 列表(默认为空列表)业务规则:
核心方法:
文档管理:
add_document(document_id: str) - 添加文档到知识库remove_document(document_id: str) -> bool - 移除文档has_document(document_id: str) -> bool - 检查是否包含文档document_count() -> int - 获取文档数量标签管理:
add_tag(tag: str) - 添加标签remove_tag(tag: str) -> bool - 移除标签has_tag(tag: str) -> bool - 检查是否有标签clear_tags() - 清除所有标签tag_count() -> int - 获取标签数量更新操作:
update_name(new_name: str) - 更新名称update_description(new_description: str) - 更新描述验证和查询:
validate() -> bool - 验证知识库完整性is_empty() -> bool - 检查是否为空属性:
id: EntityId - 唯一标识符name: str - 维度名称description: str - 维度描述template: str - 提示词模板variables: List[str] - 变量列表(默认为空列表)业务规则:
核心方法:
变量管理:
add_variable(variable: str) - 添加变量remove_variable(variable: str) -> bool - 移除变量has_variable(variable: str) -> bool - 检查是否包含变量variable_count() -> int - 获取变量数量模板操作:
update_template(new_template: str) - 更新模板format(**kwargs) -> str - 格式化提示词模板验证:
validate() -> bool - 验证提示词维度完整性定义知识库的持久化操作接口:
save(knowledge_base) - 保存知识库find_by_id(knowledge_base_id) - 根据 ID 查找find_by_name(name) - 根据名称查找find_all() - 查找所有知识库find_by_tag(tag) - 根据标签查找find_by_document_id(document_id) - 根据文档 ID 查找delete(knowledge_base_id) - 删除知识库exists(knowledge_base_id) - 检查是否存在定义提示词维度的持久化操作接口:
save(prompt_dimension) - 保存提示词维度find_by_id(prompt_dimension_id) - 根据 ID 查找find_by_name(name) - 根据名称查找find_all() - 查找所有提示词维度delete(prompt_dimension_id) - 删除提示词维度exists(prompt_dimension_id) - 检查是否存在定义了知识库领域特定的异常:
KnowledgeBaseException - 知识库异常基类KnowledgeBaseNotFoundException - 知识库未找到异常PromptDimensionException - 提示词维度异常基类PromptDimensionNotFoundException - 提示词维度未找到异常PromptFormattingException - 提示词格式化异常创建了完整的模块文档,包括:
更新了 __init__.py 文件,导出核心实体:
from src.domain.knowledge_base.entities import KnowledgeBase, PromptDimension
__all__ = [
"KnowledgeBase",
"PromptDimension",
]
执行了基本功能测试,验证了:
KnowledgeBase 实体:
PromptDimension 实体:
导入验证:
创建的文件:
src/domain/knowledge_base/entities.py - 核心实体实现(约 800 行)src/domain/knowledge_base/repositories.py - 仓储接口定义(约 200 行)src/domain/knowledge_base/exceptions.py - 领域异常定义(约 150 行)src/domain/knowledge_base/README.md - 模块文档(约 300 行)修改的文件:
src/domain/knowledge_base/__init__.py - 更新模块导出✅ 完全符合:
✅ 完全符合:
根据任务列表,下一步应该是:
from src.domain.knowledge_base.entities import KnowledgeBase, PromptDimension
from src.domain.shared.value_objects import EntityId, Timestamp
# 创建知识库
kb = KnowledgeBase(
id=EntityId.generate(),
name="Technical Documentation",
description="All technical documentation",
created_at=Timestamp.now(),
updated_at=Timestamp.now()
)
# 添加文档和标签
kb.add_document("doc_123")
kb.add_document("doc_456")
kb.add_tag("important")
kb.add_tag("reviewed")
# 验证知识库
kb.validate()
# 创建提示词维度
prompt = PromptDimension(
id=EntityId.generate(),
name="Question Answering",
description="Template for QA tasks",
template="Answer the question: {question} based on context: {context}",
variables=["question", "context"]
)
# 格式化提示词
result = prompt.format(
question="What is Python?",
context="Python is a programming language"
)
print(result)
# 输出: Answer the question: What is Python? based on context: Python is a programming language
成功实现了知识库领域模型,包括:
实现遵循了领域驱动设计原则,具有清晰的职责边界、严格的验证逻辑和良好的可测试性。所有代码都通过了基本功能测试,可以进入下一阶段的单元测试编写。