feat: add knowledge markdown formatting and detail retrieval

- Implemented KnowledgeWebsiteMarkdownPrompt for formatting webpage content into Markdown.
- Added GetItemDetail method in KnowledgeHandler to retrieve knowledge item details.
- Introduced KnowledgeDetailDrawer component for displaying knowledge item details in the admin web interface.
- Created MarkdownPreview component for rendering Markdown content.
- Added knowledge chunking and URL parsing logic to handle webpage content extraction and formatting.
- Updated database schema to include markdown_content in knowledge_items table.
This commit is contained in:
2026-04-05 20:41:42 +08:00
parent 446f865cdf
commit dbd7747742
26 changed files with 1556 additions and 252 deletions
+30
View File
@@ -317,3 +317,33 @@ func KnowledgePromptIntroLines() []string {
func KnowledgeSnippetLabel(index int) string {
return fmt.Sprintf("知识片段 %d", index+1)
}
func KnowledgeWebsiteMarkdownPrompt(title, rawURL, content string, chunkIndex, chunkCount int) string {
scope := "以下是网页正文。"
if chunkCount > 1 {
scope = fmt.Sprintf("以下是网页正文的第 %d/%d 段。", chunkIndex+1, chunkCount)
}
var builder strings.Builder
builder.WriteString("你是知识库 Markdown 整理助手。\n")
builder.WriteString("任务:把给定网页正文整理为适合知识库只读预览的 Markdown。\n")
builder.WriteString("要求:\n")
builder.WriteString("1. 只根据原文整理,不要补充事实,不要总结扩写。\n")
builder.WriteString("2. 保留标题、列表、表格、编号、联系方式等关键信息。\n")
builder.WriteString("3. 如果原文明显是表格,请输出 Markdown 表格。\n")
builder.WriteString("4. 不要输出解释,不要输出代码块包裹,只输出 Markdown 正文。\n")
if strings.TrimSpace(title) != "" {
builder.WriteString("网页标题:")
builder.WriteString(title)
builder.WriteString("\n")
}
if strings.TrimSpace(rawURL) != "" {
builder.WriteString("网页地址:")
builder.WriteString(rawURL)
builder.WriteString("\n")
}
builder.WriteString(scope)
builder.WriteString("\n\n")
builder.WriteString(content)
return builder.String()
}