Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
125 commits
Select commit Hold shift + click to select a range
32061c8
(WIP) feat: add Builtin Knowledge Server and settings integration
hllshiro Jun 18, 2025
fb14b0d
Merge branch 'dev' into feat-builtin-knowledge
hllshiro Jun 19, 2025
f2aa990
feat: add multiple languages translation
hllshiro Jun 19, 2025
e6abcb6
feat: enhance BuiltinKnowledgeSettings with model selection and updat…
hllshiro Jun 19, 2025
a85db7e
feat: update BuiltinKnowledgeSettings with enhanced configuration opt…
hllshiro Jun 19, 2025
bb80a7e
feat: update knowledge base settings to use 'builtinKnowledge' and en…
hllshiro Jun 19, 2025
8976ede
feat: enhance BuiltinKnowledgeSettings with model selection and error…
hllshiro Jun 20, 2025
dd28483
feat: add confirmation dialog and error messages for removing built-i…
hllshiro Jun 20, 2025
c9c7752
Merge branch 'dev' into feat-builtin-knowledge
hllshiro Jun 23, 2025
b4e1226
props
sqsyli Jun 23, 2025
226aaaf
[WIP] feat: implement KnowledgePresenter and related embedding functi…
hllshiro Jun 24, 2025
638bb7c
[WIP] feat: add KnowledgeConfHelper for managing knowledge base confi…
hllshiro Jun 24, 2025
ba9a31f
[WIP] feat: log new knowledge config additions in KnowledgePresenter
hllshiro Jun 24, 2025
a46611d
[WIP] feat: enhance knowledge base settings and descriptions across c…
hllshiro Jun 24, 2025
71ffa14
[WIP] feat: enhance Built-in Knowledge settings and descriptions, add…
hllshiro Jun 24, 2025
3d42d48
Merge branch 'feat-builtin-knowledge' of github.com:hllshiro/deepchat…
hllshiro Jun 24, 2025
54610c1
[WIP] feat: add dimensionsHelper to settings for better user guidance…
hllshiro Jun 25, 2025
16c5e44
[WIP] feat: add getDimensions method and update embedding handling ac…
hllshiro Jun 25, 2025
c18a71b
[wip] feat: enhance embedding handling by adding error handling and r…
hllshiro Jun 25, 2025
a056121
[WIP] feat: refactor embedding handling to use modelId and providerId…
hllshiro Jun 25, 2025
4e2b5bb
[WIP] feat: update KnowledgePresenter and LLMProviderPresenter to imp…
hllshiro Jun 25, 2025
dd0e3cf
[WIP] feat: enhance BuiltinKnowledgeSettings with additional paramete…
hllshiro Jun 25, 2025
394b0cf
[WIP] feat: enhance KnowledgePresenter to handle deleted configs and …
hllshiro Jun 26, 2025
3eaf865
[WIP] feat: update LLMProviderPresenter and OllamaProvider to enhance…
hllshiro Jun 26, 2025
0b6089b
[WIP] feat: enhance Ollama model integration by updating local models…
hllshiro Jun 26, 2025
258f6ef
[WIP] fix: update getRagApplication to include baseURL in Embeddings …
hllshiro Jun 26, 2025
3116785
[WIP] feat: update getDimensions method to return structured response…
hllshiro Jun 26, 2025
42c1af3
[WIP] feat: enhance BuiltinKnowledgeSettings with dynamic dimension d…
hllshiro Jun 26, 2025
02f8047
feat: add duration to toast notifications for improved user feedback
hllshiro Jun 26, 2025
a7c6370
feat: add BuiltinKnowledge file upload box
sqsyli Jun 27, 2025
03a2adb
feat: update TODO list with additional parameters and logic improveme…
hllshiro Jun 27, 2025
f7330fa
feat: add delay duration to tooltips for improved user experience
hllshiro Jun 27, 2025
a24b4ba
feat: add BuiltinKnowledge file reload button
sqsyli Jun 27, 2025
c03b8d1
feat: limit BuiltinKnowledge file types
sqsyli Jul 1, 2025
0572198
feat: add new BuiltinKnowledge form items
sqsyli Jul 1, 2025
4293582
fix: fix BuiltInKnowledge embedding modelId
sqsyli Jul 1, 2025
9474af3
还原lucide-vue-next版本提升的修改
hllshiro Jul 2, 2025
19784e8
fix: fix BuiltInKnowledge rerank form item
sqsyli Jul 2, 2025
f27262a
Merge branch 'feat-builtin-knowledge-form' into premerge-knowledge-form
hllshiro Jul 2, 2025
06e5a60
[WIP] refactor: update knowledge base configuration to use BuiltinKno…
hllshiro Jul 2, 2025
a81a775
chore: remove unused llm-tools embedjs dependencies from package.json
hllshiro Jul 2, 2025
a48fafb
feat: implement DuckDBPresenter for vector database operations (make …
hllshiro Jul 3, 2025
d1ab50d
refactor: update import statements to use default imports for fs and …
hllshiro Jul 3, 2025
c22a7a2
feat: add BuiltinKnowledge form Information display
sqsyli Jul 3, 2025
7beb224
refactor: restructure postinstall script for clarity and improved ext…
hllshiro Jul 3, 2025
b9ec8f1
Merge branch 'feat-builtin-knowledge-form' into feat-builtin-knowledge
hllshiro Jul 3, 2025
3dc96d9
Merge remote-tracking branch 'origin/feat-builtin-knowledge-file-sett…
hllshiro Jul 3, 2025
2324b59
refactor: update icon in BuiltinKnowledgeSettings and change v-show t…
hllshiro Jul 3, 2025
4e5167e
refactor: simplify file icon retrieval by centralizing logic in getMi…
hllshiro Jul 3, 2025
5bded53
refactor: enhance type safety for builtinKnowledgeDetail and improve …
hllshiro Jul 3, 2025
3ef0dfe
Merge pull request #1 from hllshiro/pre-merge-file-setting-to-feat-bu…
hllshiro Jul 3, 2025
7fb70ae
fix: add optional chaining for builtinKnowledgeDetail description to …
hllshiro Jul 3, 2025
2965a99
feat: add KnowledgeFileMessage type and file management methods to IK…
hllshiro Jul 3, 2025
96caa3f
feat: enhance DuckDBPresenter with file management methods and update…
hllshiro Jul 4, 2025
fc8af7a
refactor: rename methods and update table names in DuckDBPresenter fo…
hllshiro Jul 4, 2025
93eba17
feat: implement file management methods in RagPresenter and update IK…
hllshiro Jul 4, 2025
fcabba2
feat: access BuiltinKnowledge file interface
sqsyli Jul 4, 2025
a3acfb6
fix: fix prompt information error
sqsyli Jul 4, 2025
7e88c82
fix: improve error toast description for file upload failure
sqsyli Jul 4, 2025
a7b80ac
feat: add file management methods and enhance interfaces in presenter…
hllshiro Jul 7, 2025
f297ce5
Merge remote-tracking branch 'origin/feat-builtin-knowledge-file-sett…
hllshiro Jul 7, 2025
29167cb
feat: add RAG_EVENTS for file update notifications; implement vector …
hllshiro Jul 7, 2025
836cce1
feat: enhance LLM dimension handling and add normalization support; u…
hllshiro Jul 7, 2025
c2c9a0f
feat: update vector database handling to include normalization suppor…
hllshiro Jul 7, 2025
b7a06c8
feat: add dayjs dependency for time formatting
sqsyli Jul 7, 2025
8599b1d
feat: add a listener for FILE_UPDATED
sqsyli Jul 8, 2025
a64b0da
feat: change the params format
sqsyli Jul 8, 2025
b742488
feat: change callback function
sqsyli Jul 8, 2025
32e8b83
Merge remote-tracking branch 'refs/remotes/origin/pre-merge-view-from…
hllshiro Jul 8, 2025
0dd265a
fix: resolve merge conflicts in localization files
hllshiro Jul 8, 2025
e18923e
feat(knowledge): Implement file listing and fix embedding parameters
hllshiro Jul 8, 2025
2f6b0c9
feat: change loadlist after file upload and file delete
sqsyli Jul 8, 2025
f251845
fix(knowledge): correct timestamp storage and refactor database inter…
hllshiro Jul 8, 2025
ade6d82
Merge branch 'pre-merge-from-file-setting' of github.com:hllshiro/dee…
hllshiro Jul 8, 2025
c30a403
fix: remove unnecessary nextTick in reAddFile
sqsyli Jul 9, 2025
f596204
fix: remove duplicate loadList in deleteFile
sqsyli Jul 9, 2025
3740dad
feat(knowledge): enhance file handling with status updates and event …
hllshiro Jul 9, 2025
2dc9e28
Merge branch 'pre-merge-from-file-setting' of github.com:hllshiro/dee…
hllshiro Jul 9, 2025
60f6cb6
feat: add similarity query functionality to RagPresenter and DuckDBPr…
hllshiro Jul 9, 2025
898fc61
feat: implement similarity query in BuiltinKnowledgeServer and update…
hllshiro Jul 9, 2025
43aabaa
feat: enhance BuiltinKnowledge module with detailed architecture and …
hllshiro Jul 9, 2025
8d091c0
feat: remove part of builtinKnowledge base info display
sqsyli Jul 9, 2025
e592e11
fix: fix file status switching bug
sqsyli Jul 9, 2025
579e453
feat: add builtinKnowledge file search
sqsyli Jul 9, 2025
c1591ff
fix: reemove redundant div
sqsyli Jul 9, 2025
1479102
feat: enhance file handling process in BuiltinKnowledge design with d…
hllshiro Jul 10, 2025
93794d8
feat: update BuiltinKnowledge design document with refined file handl…
hllshiro Jul 10, 2025
93e2dec
feat: refactor BuiltinKnowledge module by replacing RagPresenter with…
hllshiro Jul 10, 2025
7c41c9c
feat: add builtinKnowledge file search score
sqsyli Jul 10, 2025
487c038
Merge remote-tracking branch 'origin/pre-merge-search-from-file-setti…
hllshiro Jul 10, 2025
1b1fb0d
feat: enhance error handling in file upload and re-upload processes i…
hllshiro Jul 10, 2025
3384fbe
fix: fix overly long file names
sqsyli Jul 10, 2025
8b96ad7
fix: fix overly long file names
sqsyli Jul 10, 2025
8bb8d91
refactor: simplify checkpoint logic in DuckDBPresenter open method
hllshiro Jul 10, 2025
4aec581
Merge remote-tracking branch 'origin/pre-merge-search-from-file-setti…
hllshiro Jul 10, 2025
e5de381
feat: add @langchain/core dependency to enhance functionality
hllshiro Jul 10, 2025
6a2a48c
fix: update file extension handling to use correct variable name
hllshiro Jul 10, 2025
3becdb4
feat: add crash reporter initialization for error tracking
hllshiro Jul 11, 2025
76e657b
fix: enhance logging and error handling in DuckDBPresenter methods
hllshiro Jul 11, 2025
555e62c
fix: move crash reporter initialization inside logging check
hllshiro Jul 11, 2025
be1df0d
Merge remote-tracking branch 'origin/dev' into pre-merge-feat-builtin…
hllshiro Jul 11, 2025
34aaf7f
feat: add toast messages for model status and L2 normalization suppor…
hllshiro Jul 14, 2025
c70da9d
refactor: simplify fileTask method by removing unnecessary promise wr…
hllshiro Jul 14, 2025
af9163d
refactor: update model handling by removing unnecessary ModelConfig r…
hllshiro Jul 14, 2025
5c86c50
fix: update company name format in crash reporter configuration
hllshiro Jul 14, 2025
dc1b1e6
fix: fix embedding model default settings and revert ModelConfigItem …
hllshiro Jul 14, 2025
cb43391
fix: cancel crash report
hllshiro Jul 14, 2025
88c3915
fix: fix pulling model type not assignable problem
hllshiro Jul 14, 2025
a883e9f
fix: remove unneccessary files
hllshiro Jul 14, 2025
3cfb171
fix: remove unnecessary files
hllshiro Jul 14, 2025
374bf45
fix: block option rerank model (not implemented yet)
hllshiro Jul 14, 2025
564a985
fix: dynamically decide whether to show model customization configura…
hllshiro Jul 14, 2025
dc849d7
Merge branch 'dev' into pre-merge-feat-builtin-knowledge
hllshiro Jul 14, 2025
9b5f8eb
fix: remove useless i18n translations
hllshiro Jul 14, 2025
bbaa9b2
Merge remote-tracking branch 'origin/pre-merge-feat-builtin-knowledge…
hllshiro Jul 14, 2025
54403d5
fix: remove useless dependencies and improve definitions
hllshiro Jul 14, 2025
dee1b7e
perf: imporve knowledgePresenter resource release
hllshiro Jul 14, 2025
aa2eaea
perf: convert to async function for better error handling
hllshiro Jul 14, 2025
85162bb
perf: convert to async function for better error handling
hllshiro Jul 14, 2025
8df6adc
perf: imporve vector utils
hllshiro Jul 14, 2025
014eb4b
fix: fix error words
hllshiro Jul 14, 2025
c514d99
perf: mark the interrupted task as a user-cancelled task when app sta…
hllshiro Jul 15, 2025
7166690
perf: add try-catch to enhance program stability
hllshiro Jul 15, 2025
fac2eb4
fix: declared but never read error
hllshiro Jul 15, 2025
25ef9cb
fix: missing attr file_id when insert vector(s)
hllshiro Jul 15, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
109 changes: 109 additions & 0 deletions docs/builtin-knowledge-architecture.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
# BuiltinKnowledge 架构文档

## 模块概述

BuiltinKnowledge(内置知识库)模块是 DeepChat 中负责本地知识存储、检索与管理的核心组件,主要功能包括:

1. **知识库生命周期管理**:创建、重置、删除、文件增删查、RAG 实例管理。
2. **配置驱动**:监听 MCP 配置变更事件,自动同步知识库配置。
3. **嵌入与向量检索**:集成本地嵌入模型与 DuckDB 向量数据库,支持高效检索。
4. **事件与状态**:通过 eventBus 监控配置和知识库状态,发布相关事件。

## 核心组件

```mermaid
classDiagram
class KnowledgePresenter {
-configPresenter: IConfigPresenter
-storageDir: string
-storePresenterCache: Map<string, KnowledgeStorePresenter>
+create()
+reset()
+delete()
+addFile()
+deleteFile()
+reAddFile()
+queryFile()
+listFiles()
+similarityQuery()
+closeAll()
}

class KnowledgeStorePresenter {
-vectorP: IVectorDatabasePresenter
-config: BuiltinKnowledgeConfig
+addFile()
+deleteFile()
+reAddFile()
+queryFile()
+listFiles()
+similarityQuery()
+reset()
+destroy()
+close()
}

class IVectorDatabasePresenter {
<<Interface>>
+initialize()
+open()
+close()
+insertFile()
+insertVectors()
+deleteVectorsByFile()
+deleteFile()
+queryFile()
+listFiles()
+similarityQuery()
+destroy()
}

KnowledgePresenter o-- KnowledgeStorePresenter : manages
KnowledgeStorePresenter o-- IVectorDatabasePresenter
```

## 数据流

### 1. 配置变更与知识库同步

```mermaid
sequenceDiagram
participant eventBus
participant KnowledgePresenter
participant ConfigPresenter

eventBus->>KnowledgePresenter: MCP_EVENTS.CONFIG_CHANGED
KnowledgePresenter->>ConfigPresenter: diffKnowledgeConfigs(configs)
KnowledgePresenter->>ConfigPresenter: setKnowledgeConfigs(configs)
KnowledgePresenter->>KnowledgePresenter: create/delete/reset等
```

### 2. 文件入库与检索流程

```mermaid
sequenceDiagram
participant User
participant KnowledgePresenter
participant KnowledgeStorePresenter
participant IVectorDatabasePresenter

User->>KnowledgePresenter: addFile(id, filePath)
KnowledgePresenter->>KnowledgeStorePresenter: addFile(filePath)
KnowledgeStorePresenter->>IVectorDatabasePresenter: insertFile/insertVectors
KnowledgeStorePresenter-->>KnowledgePresenter: 任务完成事件
KnowledgePresenter-->>User: 文件入库结果

User->>KnowledgePresenter: similarityQuery(id, key)
KnowledgePresenter->>KnowledgeStorePresenter: similarityQuery(key)
KnowledgeStorePresenter->>IVectorDatabasePresenter: similarityQuery
KnowledgeStorePresenter-->>KnowledgePresenter: 检索结果
KnowledgePresenter-->>User: 检索结果
```

## 关键设计

1. **分层架构**:接口层(IKnowledgePresenter)、管理层(KnowledgePresenter)、业务层(KnowledgeStorePresenter)、存储层(IVectorDatabasePresenter)、配置层(ConfigPresenter)。
2. **事件驱动**:通过 eventBus 监听 MCP 配置变更,自动同步知识库。
3. **高性能本地检索**:集成 DuckDB 向量数据库和本地嵌入模型。
4. **配置驱动与持久化**:所有知识库配置通过 ConfigPresenter 管理和持久化。
5. **健壮性**:事件回调均有校验和异常处理,防止脏数据和异常中断。
221 changes: 221 additions & 0 deletions docs/builtin-knowledge-design.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,221 @@
# BuiltinKnowledge 设计文档

## 1. 核心类设计

### 1.1 KnowledgePresenter

`KnowledgePresenter` (`src/main/presenter/knowledgePresenter/index.ts`) 是模块主入口,实现了 `IKnowledgePresenter` 接口,主要职责:

- 依赖 `IConfigPresenter` 获取和管理知识库配置。
- 监听 `MCP_EVENTS.CONFIG_CHANGED`,自动同步配置,按 diff 结果分别处理新增、删除、更新。
- 管理 RAG 实例缓存,负责知识库的创建、重置、删除、文件增删查、相似度检索等。
- 通过 eventBus 触发知识库相关事件。

**关键方法**:

- `create(config)`: 创建知识库(初始化 RAG 实例)。
- `reset(id)`: 重置知识库内容。
- `delete(id)`: 删除知识库及本地存储。
- `addFile(id, filePath)`: 添加文件到知识库。
- `deleteFile(id, fileId)`: 删除知识库中的文件。
- `reAddFile(id, fileId)`: 重新处理文件。
- `queryFile(id, fileId)`, `listFiles(id)`: 查询/列出知识库文件。
- `similarityQuery(id, key)`: 相似度检索。
- `closeAll()`: 关闭所有 RAG 实例。

### 1.2 KnowledgeStorePresenter

`KnowledgeStorePresenter` (`src/main/presenter/knowledgePresenter/KnowledgeStorePresenter.ts`) 负责知识库的核心业务逻辑:

- 文件分块、嵌入生成、向量入库、相似度检索。
- 依赖 `IVectorDatabasePresenter` 进行底层向量存储和检索。
- 处理文件状态、异步任务和异常。

**关键方法**:

- `addFile(filePath)`: 文件分块、嵌入、入库。
- `deleteFile(fileId)`: 删除文件及其向量。
- `reAddFile(fileId)`: 重新处理文件。
- `queryFile(fileId)`, `listFiles()`: 查询/列出文件。
- `similarityQuery(key)`: 相似度检索。
- `reset()`, `destroy()`, `close()`: 管理生命周期。

### 1.3 IVectorDatabasePresenter

`IVectorDatabasePresenter`(接口,DuckDBPresenter 实现)负责本地向量数据库操作:

- 初始化、打开、关闭数据库。
- 插入文件、插入/删除向量、文件查询、向量检索等。

### 1.4 ConfigPresenter

`ConfigPresenter` 负责知识库配置的持久化、读取、diff(增删改对比)等能力。

- `getKnowledgeConfigs()`, `setKnowledgeConfigs()`, `diffKnowledgeConfigs()` 等。

## 2. 文件入库流程

```mermaid
sequenceDiagram
participant User
participant KnowledgePresenter
participant KnowledgeStorePresenter
participant IVectorDatabasePresenter
participant LLMProvider
participant EventBus

User->>KnowledgePresenter: addFile(id, filePath)
KnowledgePresenter->>KnowledgeStorePresenter: addFile(filePath)
KnowledgeStorePresenter->>KnowledgeStorePresenter: 读取文件内容
KnowledgeStorePresenter->>IVectorDatabasePresenter: insertFile(fileMessage)
KnowledgeStorePresenter->>KnowledgeStorePresenter: 分块 (splitText)
loop 对每个chunk
KnowledgeStorePresenter->>LLMProvider: getEmbeddings(chunk)
LLMProvider-->>KnowledgeStorePresenter: vector
end
KnowledgeStorePresenter->>IVectorDatabasePresenter: insertVectors(vectors)
KnowledgeStorePresenter->>IVectorDatabasePresenter: updateFile(status=completed)
KnowledgeStorePresenter->>EventBus: RAG_EVENTS.FILE_UPDATED (文件处理完成)
KnowledgeStorePresenter-->>KnowledgePresenter: fileTask Promise resolve
KnowledgePresenter-->>User: 返回文件入库结果
Note over KnowledgeStorePresenter,IVectorDatabasePresenter: 异常时更新status=error并通知EventBus
```

## 3. 检索流程

```mermaid
sequenceDiagram
participant User
participant KnowledgePresenter
participant KnowledgeStorePresenter
participant LLMProvider
participant IVectorDatabasePresenter

User->>KnowledgePresenter: similarityQuery(id, key)
KnowledgePresenter->>KnowledgeStorePresenter: similarityQuery(key)
KnowledgeStorePresenter->>LLMProvider: getEmbeddings([key])
LLMProvider-->>KnowledgeStorePresenter: embedding
KnowledgeStorePresenter->>IVectorDatabasePresenter: similarityQuery(embedding)
IVectorDatabasePresenter-->>KnowledgeStorePresenter: 检索结果(相关片段、距离、元数据)
KnowledgeStorePresenter-->>KnowledgePresenter: 检索结果
KnowledgePresenter-->>User: 检索结果
```

## 4. 配置变更到知识库创建流程

当 MCP 配置变更(如新增/修改 builtinKnowledge 配置)时,系统自动同步并创建/更新本地知识库,流程如下:

```mermaid
sequenceDiagram
participant MCPConfHelper
participant EventBus
participant KnowledgePresenter
participant ConfigPresenter
participant KnowledgeStorePresenter
participant IVectorDatabasePresenter (DuckDB)

MCPConfHelper->>EventBus: send(MCP_EVENTS.CONFIG_CHANGED, { mcpServers, ... })
EventBus->>KnowledgePresenter: MCP_EVENTS.CONFIG_CHANGED
KnowledgePresenter->>ConfigPresenter: diffKnowledgeConfigs(configs)
KnowledgePresenter->>ConfigPresenter: setKnowledgeConfigs(configs)
alt 新增/变更
KnowledgePresenter->>KnowledgePresenter: create(config)
KnowledgePresenter->>KnowledgeStorePresenter: createKnowledgeStorePresenter(config)
KnowledgePresenter->>IVectorDatabasePresenter (DuckDB): getVectorDatabasePresenter(id, dimensions, normalized)
IVectorDatabasePresenter (DuckDB)-->>KnowledgePresenter: DuckDB 实例
KnowledgePresenter->>KnowledgeStorePresenter: new KnowledgeStorePresenter(db, config)
end
alt 删除
KnowledgePresenter->>KnowledgePresenter: delete(id)
KnowledgePresenter->>IVectorDatabasePresenter (DuckDB): 清理本地存储
end
```

**说明:**
- MCPConfHelper 负责监听和发出配置变更事件。
- KnowledgePresenter 监听事件,调用 ConfigPresenter 进行配置 diff 和持久化。
- 对于新增/变更,KnowledgePresenter 创建 KnowledgeStorePresenter,并初始化/获取 DuckDB 实例。
- 对于删除,KnowledgePresenter 清理本地存储和缓存。

## 5. 事件系统

BuiltinKnowledge 通过 eventBus 发出以下事件:

| 事件名称 | 触发时机 | 触发源 | 参数 |
| ---------------------------------- | -------------------------------- | ----------------- | ------------------------- |
| `MCP_EVENTS.CONFIG_CHANGED` | 配置变更 | eventBus | configs |
| `RAG_EVENTS.FILE_UPDATED` | 文件处理完成/状态变更 | KnowledgePresenter | KnowledgeFileMessage |

## 6. 配置管理

知识库相关配置通过 `ConfigPresenter` 管理,持久化存储。

**核心配置项**:

- `knowledgeConfigs`: `BuiltinKnowledgeConfig[]` - 所有知识库实例配置。

**`BuiltinKnowledgeConfig` 接口**:

```typescript
type BuiltinKnowledgeConfig = {
id: string
description: string
embedding: ModelProvider
dimensions: number
normalized: boolean
chunkSize?: number
chunkOverlap?: number
fragmentsNumber: number
enabled: boolean
}
```

## 7. 扩展指南

### 7.1 添加新向量数据库

1. 实现 `IVectorDatabasePresenter` 接口。
2. 在 `KnowledgePresenter` 中根据配置选择不同数据库实现。

### 7.2 支持新嵌入模型

1. 扩展 `ModelProvider` 类型和相关调用逻辑。
2. 在 `KnowledgeStorePresenter` 中适配新模型。

### 7.3 自定义事件与回调

1. 在 `KnowledgePresenter`/`KnowledgeStorePresenter` 中增加事件触发点。
2. 在前端 UI 层监听并响应相关事件。

## 8. DuckDBPresenter 主要流程与细节

DuckDBPresenter 作为本地向量数据库的实现,负责表结构初始化、向量插入、检索、文件元数据管理等。下图展示其主要方法调用和数据流:

```mermaid
flowchart TD
A[initialize] --> B[CreateTableAndIndex]
C[open] --> D[OpenDBConnection]
E[insertFile] --> F[InsertFileMetadata]
G[insertVectors] --> H[BatchInsertVectors]
I[updateFile] --> J[UpdateFileStatusOrMetadata]
K[deleteVectorsByFile] --> L[DeleteVectorsForFile]
M[deleteFile] --> N[DeleteFileMetadata]
O[similarityQuery] --> P[VectorANNQuery]
Q[queryFile] --> R[QueryFileMetadata]
S[listFiles] --> T[ListAllFiles]
U[destroyOrClose] --> V[CloseConnectionOrRelease]

%% Main data flow
G --> P
E --> Q
E --> S
K --> M
```

**说明:**
- `initialize` 负责表结构和索引的创建,支持多维度和不同度量方式(如 cosine、ip)。
- `insertFile`/`insertVectors` 分别管理文件元数据和向量数据,支持批量插入。
- `similarityQuery` 实现高效 ANN 检索,返回相关片段及距离。
- `deleteVectorsByFile`、`deleteFile` 支持文件级别的物理删除。
- `updateFile`、`queryFile`、`listFiles` 支持文件状态和元数据的维护。
- `destroy`/`close` 负责资源释放和连接关闭。
Loading