feat(server): 扩展知识库服务,添加knowledge API端点和schema定义,前端新增knowledge服务模块

This commit is contained in:
caoxiaozhu
2026-05-15 06:56:17 +00:00
parent 7209c75ad8
commit 4b1dae7ebc
38 changed files with 774 additions and 8012 deletions

View File

@@ -1,5 +1,6 @@
from __future__ import annotations
from __future__ import annotations
from datetime import datetime
from typing import Any
from pydantic import BaseModel, ConfigDict, Field
@@ -28,17 +29,18 @@ class KnowledgePreviewPageRead(BaseModel):
blocks: list[KnowledgePreviewBlockRead] = Field(default_factory=list)
class KnowledgeDocumentRead(BaseModel):
id: str
name: str
folder: str
tag: str
time: str
version: str
state: str
stateTone: str
owner: str
icon: str
class KnowledgeDocumentRead(BaseModel):
id: str
name: str
folder: str
tag: str
time: str
version: str
stateCode: int = 1
state: str
stateTone: str
owner: str
icon: str
fileType: str
fileTypeLabel: str
summary: str
@@ -75,6 +77,106 @@ class KnowledgeLibraryRead(BaseModel):
documents: list[KnowledgeDocumentRead] = Field(default_factory=list)
class KnowledgeActionResponse(BaseModel):
ok: bool = True
detail: str
class KnowledgeActionResponse(BaseModel):
ok: bool = True
detail: str
class LlmWikiChunkRead(BaseModel):
chunk_id: str
title: str
content: str
source_page: int | None = None
word_count: int = 0
tags: list[str] = Field(default_factory=list)
class LlmWikiKnowledgeCandidateRead(BaseModel):
candidate_id: str
title: str
content: str
domain: str = "expense"
scenario: str = "reimbursement_policy"
tags: list[str] = Field(default_factory=list)
source_document_id: str
source_document_name: str
source_chunk_ids: list[str] = Field(default_factory=list)
evidence: list[str] = Field(default_factory=list)
confidence: float = 0.0
status: str = "draft"
created_by: str = "hermes"
created_at: datetime | None = None
class LlmWikiRuleCandidateRead(BaseModel):
candidate_id: str
source_type: str = "policy_document"
template_key: str
template_label: str
domain: str = "expense"
scenario: str = "reimbursement_policy"
suggested_rule_name: str
summary: str = ""
template_sections: dict[str, Any] = Field(default_factory=dict)
rule_markdown_draft: str
runtime_rule: dict[str, Any] = Field(default_factory=dict)
evidence: list[str] = Field(default_factory=list)
confidence: float = 0.0
source_document_id: str
source_document_name: str
source_chunk_ids: list[str] = Field(default_factory=list)
generated_asset_id: str | None = None
generated_asset_code: str | None = None
generated_version: str | None = None
validation_status: str = "valid"
validation_errors: list[str] = Field(default_factory=list)
status: str = "draft"
created_by: str = "hermes"
created_at: datetime | None = None
class LlmWikiDocumentRead(BaseModel):
document_id: str
document_name: str
folder: str
document_version: str = "v1.0"
checksum: str = ""
extracted_text_path: str
chunk_count: int = 0
knowledge_candidate_count: int = 0
rule_candidate_count: int = 0
updated_at: datetime | None = None
class LlmWikiDocumentDetailRead(LlmWikiDocumentRead):
knowledge_summary_markdown: str = ""
chunks: list[LlmWikiChunkRead] = Field(default_factory=list)
knowledge_candidates: list[LlmWikiKnowledgeCandidateRead] = Field(default_factory=list)
rule_candidates: list[LlmWikiRuleCandidateRead] = Field(default_factory=list)
class LlmWikiIndexRead(BaseModel):
documents: list[LlmWikiDocumentRead] = Field(default_factory=list)
sync_run_count: int = 0
class LlmWikiSyncWrite(BaseModel):
folder: str = Field(default="报销制度", min_length=1)
document_ids: list[str] = Field(default_factory=list)
force: bool = False
class LlmWikiSyncRead(BaseModel):
ok: bool = True
run_id: str
folder: str
document_count: int = 0
knowledge_candidate_count: int = 0
rule_candidate_count: int = 0
generated_rule_count: int = 0
generated_rule_asset_ids: list[str] = Field(default_factory=list)
summary: str = ""
class LlmWikiSummaryUpdateWrite(BaseModel):
knowledge_summary_markdown: str = Field(min_length=1)