+
+ {citation.showFavicon && }
+ handleLinkClick(citation.url, e)}>
+ {citation.title}
+
+
+ {citation.content && truncateText(citation.content, 100)}
+
)
const OpenButton = styled(Button)`
@@ -177,9 +180,10 @@ const PreviewIcon = styled.div`
display: flex;
align-items: center;
justify-content: center;
- background: #fff;
- border: 1px solid #fff;
+ background: #f0f2f5;
+ border: 1px solid #e1e4e8;
margin-left: -8px;
+ color: var(--color-text-2);
&:first-child {
margin-left: 0;
diff --git a/src/renderer/src/services/KnowledgeService.ts b/src/renderer/src/services/KnowledgeService.ts
index f594a44d7f..19021bccb1 100644
--- a/src/renderer/src/services/KnowledgeService.ts
+++ b/src/renderer/src/services/KnowledgeService.ts
@@ -155,7 +155,7 @@ export const processKnowledgeSearch = async (
})
)
- const references = await Promise.all(
+ return await Promise.all(
processdResults.map(async (item, index) => {
// const baseItem = base.items.find((i) => i.uniqueId === item.metadata.uniqueLoaderId)
return {
@@ -166,7 +166,6 @@ export const processKnowledgeSearch = async (
} as KnowledgeReference
})
)
- return references
} catch (error) {
console.error(`Error searching knowledge base ${base.name}:`, error)
return []
@@ -177,9 +176,8 @@ export const processKnowledgeSearch = async (
const allReferencesRaw = resultsPerBase.flat().filter((ref): ref is KnowledgeReference => !!ref)
// 重新为引用分配ID
- const references = allReferencesRaw.map((ref, index) => ({
+ return allReferencesRaw.map((ref, index) => ({
...ref,
id: index + 1
}))
- return references
}
diff --git a/src/renderer/src/store/messageBlock.ts b/src/renderer/src/store/messageBlock.ts
index aa484e0bf3..561396fa43 100644
--- a/src/renderer/src/store/messageBlock.ts
+++ b/src/renderer/src/store/messageBlock.ts
@@ -187,14 +187,29 @@ const formatCitationsFromBlock = (block: CitationMessageBlock | undefined): Cita
// 3. Handle Knowledge Base References
if (block.knowledge && block.knowledge.length > 0) {
formattedCitations.push(
- ...block.knowledge.map((result, index) => ({
- number: index + 1,
- url: result.sourceUrl,
- title: result.sourceUrl,
- content: result.content,
- showFavicon: true,
- type: 'knowledge'
- }))
+ ...block.knowledge.map((result, index) => {
+ const filePattern = /\[(.*?)]\(http:\/\/file\/(.*?)\)/
+ const fileMatch = result.sourceUrl.match(filePattern)
+
+ let url = result.sourceUrl
+ let title = result.sourceUrl
+ let showFavicon = true
+
+ // 如果匹配文件链接格式 [filename](http://file/xxx)
+ if (fileMatch) {
+ title = fileMatch[1]
+ url = `http://file/${fileMatch[2]}`
+ }
+
+ return {
+ number: index + 1,
+ url: url,
+ title: title,
+ content: result.content,
+ showFavicon: showFavicon,
+ type: 'knowledge'
+ }
+ })
)
}
// 4. Deduplicate by URL and Renumber Sequentially