@nahisaho/katashiro-rag 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/RAGEngine.d.ts +58 -0
- package/dist/RAGEngine.d.ts.map +1 -0
- package/dist/RAGEngine.js +97 -0
- package/dist/RAGEngine.js.map +1 -0
- package/dist/RAGPipeline.d.ts +162 -0
- package/dist/RAGPipeline.d.ts.map +1 -0
- package/dist/RAGPipeline.js +222 -0
- package/dist/RAGPipeline.js.map +1 -0
- package/dist/Retriever.d.ts +49 -0
- package/dist/Retriever.d.ts.map +1 -0
- package/dist/Retriever.js +96 -0
- package/dist/Retriever.js.map +1 -0
- package/dist/chunking/DocumentChunker.d.ts +47 -0
- package/dist/chunking/DocumentChunker.d.ts.map +1 -0
- package/dist/chunking/DocumentChunker.js +171 -0
- package/dist/chunking/DocumentChunker.js.map +1 -0
- package/dist/chunking/index.d.ts +5 -0
- package/dist/chunking/index.d.ts.map +1 -0
- package/dist/chunking/index.js +5 -0
- package/dist/chunking/index.js.map +1 -0
- package/dist/embedding/AzureOpenAIEmbeddingProvider.d.ts +63 -0
- package/dist/embedding/AzureOpenAIEmbeddingProvider.d.ts.map +1 -0
- package/dist/embedding/AzureOpenAIEmbeddingProvider.js +133 -0
- package/dist/embedding/AzureOpenAIEmbeddingProvider.js.map +1 -0
- package/dist/embedding/BaseEmbeddingProvider.d.ts +43 -0
- package/dist/embedding/BaseEmbeddingProvider.d.ts.map +1 -0
- package/dist/embedding/BaseEmbeddingProvider.js +98 -0
- package/dist/embedding/BaseEmbeddingProvider.js.map +1 -0
- package/dist/embedding/EmbeddingFactory.d.ts +75 -0
- package/dist/embedding/EmbeddingFactory.d.ts.map +1 -0
- package/dist/embedding/EmbeddingFactory.js +153 -0
- package/dist/embedding/EmbeddingFactory.js.map +1 -0
- package/dist/embedding/EmbeddingManager.d.ts +41 -0
- package/dist/embedding/EmbeddingManager.d.ts.map +1 -0
- package/dist/embedding/EmbeddingManager.js +93 -0
- package/dist/embedding/EmbeddingManager.js.map +1 -0
- package/dist/embedding/MockEmbeddingProvider.d.ts +54 -0
- package/dist/embedding/MockEmbeddingProvider.d.ts.map +1 -0
- package/dist/embedding/MockEmbeddingProvider.js +91 -0
- package/dist/embedding/MockEmbeddingProvider.js.map +1 -0
- package/dist/embedding/OllamaEmbeddingProvider.d.ts +69 -0
- package/dist/embedding/OllamaEmbeddingProvider.d.ts.map +1 -0
- package/dist/embedding/OllamaEmbeddingProvider.js +136 -0
- package/dist/embedding/OllamaEmbeddingProvider.js.map +1 -0
- package/dist/embedding/OpenAIEmbeddingProvider.d.ts +83 -0
- package/dist/embedding/OpenAIEmbeddingProvider.d.ts.map +1 -0
- package/dist/embedding/OpenAIEmbeddingProvider.js +150 -0
- package/dist/embedding/OpenAIEmbeddingProvider.js.map +1 -0
- package/dist/embedding/index.d.ts +16 -0
- package/dist/embedding/index.d.ts.map +1 -0
- package/dist/embedding/index.js +15 -0
- package/dist/embedding/index.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/reranking/LLMReranker.d.ts +147 -0
- package/dist/reranking/LLMReranker.d.ts.map +1 -0
- package/dist/reranking/LLMReranker.js +262 -0
- package/dist/reranking/LLMReranker.js.map +1 -0
- package/dist/reranking/index.d.ts +7 -0
- package/dist/reranking/index.d.ts.map +1 -0
- package/dist/reranking/index.js +7 -0
- package/dist/reranking/index.js.map +1 -0
- package/dist/types.d.ts +144 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/vectordb/FileVectorStore.d.ts +93 -0
- package/dist/vectordb/FileVectorStore.d.ts.map +1 -0
- package/dist/vectordb/FileVectorStore.js +218 -0
- package/dist/vectordb/FileVectorStore.js.map +1 -0
- package/dist/vectordb/InMemoryVectorStore.d.ts +48 -0
- package/dist/vectordb/InMemoryVectorStore.d.ts.map +1 -0
- package/dist/vectordb/InMemoryVectorStore.js +86 -0
- package/dist/vectordb/InMemoryVectorStore.js.map +1 -0
- package/dist/vectordb/index.d.ts +8 -0
- package/dist/vectordb/index.d.ts.map +1 -0
- package/dist/vectordb/index.js +6 -0
- package/dist/vectordb/index.js.map +1 -0
- package/package.json +37 -0
- package/src/RAGEngine.ts +127 -0
- package/src/RAGPipeline.ts +357 -0
- package/src/Retriever.ts +121 -0
- package/src/chunking/DocumentChunker.ts +207 -0
- package/src/chunking/index.ts +5 -0
- package/src/embedding/AzureOpenAIEmbeddingProvider.ts +208 -0
- package/src/embedding/BaseEmbeddingProvider.ts +133 -0
- package/src/embedding/EmbeddingFactory.ts +225 -0
- package/src/embedding/EmbeddingManager.ts +110 -0
- package/src/embedding/MockEmbeddingProvider.ts +123 -0
- package/src/embedding/OllamaEmbeddingProvider.ts +197 -0
- package/src/embedding/OpenAIEmbeddingProvider.ts +226 -0
- package/src/embedding/index.ts +33 -0
- package/src/index.ts +55 -0
- package/src/reranking/LLMReranker.ts +401 -0
- package/src/reranking/index.ts +15 -0
- package/src/types.ts +157 -0
- package/src/vectordb/FileVectorStore.ts +289 -0
- package/src/vectordb/InMemoryVectorStore.ts +121 -0
- package/src/vectordb/index.ts +9 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 nahisaho
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RAG Engine - RAGシステムのファサード
|
|
3
|
+
*
|
|
4
|
+
* @requirement REQ-RAG-005
|
|
5
|
+
* @design DES-KATASHIRO-003-RAG §3.5
|
|
6
|
+
*/
|
|
7
|
+
import type { Chunk, ChunkingConfig, Document, EmbeddingProvider, RAGEngineConfig, RetrieverConfig, SearchResult, VectorStore } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* RAGエンジン
|
|
10
|
+
* ドキュメント処理、インデックス作成、検索を統合したファサード
|
|
11
|
+
*/
|
|
12
|
+
export declare class RAGEngine {
|
|
13
|
+
private chunker;
|
|
14
|
+
private retriever;
|
|
15
|
+
constructor(embeddingProvider: EmbeddingProvider, vectorStore: VectorStore, config?: RAGEngineConfig);
|
|
16
|
+
/**
|
|
17
|
+
* ドキュメントをインデックスに追加
|
|
18
|
+
* チャンキング、埋め込み生成、インデックス追加を一括実行
|
|
19
|
+
*/
|
|
20
|
+
ingest(document: Document): Promise<Chunk[]>;
|
|
21
|
+
/**
|
|
22
|
+
* 複数ドキュメントをバッチでインデックスに追加
|
|
23
|
+
*/
|
|
24
|
+
ingestBatch(documents: Document[]): Promise<Chunk[]>;
|
|
25
|
+
/**
|
|
26
|
+
* クエリで関連チャンクを検索
|
|
27
|
+
*/
|
|
28
|
+
query(query: string): Promise<SearchResult[]>;
|
|
29
|
+
/**
|
|
30
|
+
* 複数クエリで検索
|
|
31
|
+
*/
|
|
32
|
+
queryMultiple(queries: string[]): Promise<SearchResult[]>;
|
|
33
|
+
/**
|
|
34
|
+
* チャンクを削除
|
|
35
|
+
*/
|
|
36
|
+
deleteChunk(chunkId: string): Promise<boolean>;
|
|
37
|
+
/**
|
|
38
|
+
* ドキュメントの全チャンクを削除
|
|
39
|
+
*/
|
|
40
|
+
deleteDocument(documentId: string, chunkCount: number): Promise<number>;
|
|
41
|
+
/**
|
|
42
|
+
* チャンキング設定を更新して新しいチャンカーを作成
|
|
43
|
+
*/
|
|
44
|
+
updateChunkingConfig(config: ChunkingConfig): void;
|
|
45
|
+
/**
|
|
46
|
+
* 検索設定を更新
|
|
47
|
+
*/
|
|
48
|
+
updateRetrieverConfig(config: Partial<RetrieverConfig>): void;
|
|
49
|
+
/**
|
|
50
|
+
* ドキュメントをチャンキングのみ実行(インデックス追加なし)
|
|
51
|
+
*/
|
|
52
|
+
chunk(document: Document): Chunk[];
|
|
53
|
+
/**
|
|
54
|
+
* 複数ドキュメントをチャンキングのみ実行
|
|
55
|
+
*/
|
|
56
|
+
chunkBatch(documents: Document[]): Chunk[];
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=RAGEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RAGEngine.d.ts","sourceRoot":"","sources":["../src/RAGEngine.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,KAAK,EACL,cAAc,EACd,QAAQ,EACR,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,SAAS,CAAY;gBAG3B,iBAAiB,EAAE,iBAAiB,EACpC,WAAW,EAAE,WAAW,EACxB,MAAM,GAAE,eAAoB;IAM9B;;;OAGG;IACG,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAMlD;;OAEG;IACG,WAAW,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAY1D;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAInD;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAI/D;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIpD;;OAEG;IACG,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAa7E;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAIlD;;OAEG;IACH,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;IAI7D;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,QAAQ,GAAG,KAAK,EAAE;IAIlC;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE;CAG3C"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RAG Engine - RAGシステムのファサード
|
|
3
|
+
*
|
|
4
|
+
* @requirement REQ-RAG-005
|
|
5
|
+
* @design DES-KATASHIRO-003-RAG §3.5
|
|
6
|
+
*/
|
|
7
|
+
import { DocumentChunker } from './chunking/DocumentChunker.js';
|
|
8
|
+
import { Retriever } from './Retriever.js';
|
|
9
|
+
/**
|
|
10
|
+
* RAGエンジン
|
|
11
|
+
* ドキュメント処理、インデックス作成、検索を統合したファサード
|
|
12
|
+
*/
|
|
13
|
+
export class RAGEngine {
|
|
14
|
+
chunker;
|
|
15
|
+
retriever;
|
|
16
|
+
constructor(embeddingProvider, vectorStore, config = {}) {
|
|
17
|
+
this.chunker = new DocumentChunker(config.chunking);
|
|
18
|
+
this.retriever = new Retriever(embeddingProvider, vectorStore, config.retriever);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* ドキュメントをインデックスに追加
|
|
22
|
+
* チャンキング、埋め込み生成、インデックス追加を一括実行
|
|
23
|
+
*/
|
|
24
|
+
async ingest(document) {
|
|
25
|
+
const chunks = this.chunker.chunk(document);
|
|
26
|
+
await this.retriever.addDocument(document, chunks);
|
|
27
|
+
return chunks;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 複数ドキュメントをバッチでインデックスに追加
|
|
31
|
+
*/
|
|
32
|
+
async ingestBatch(documents) {
|
|
33
|
+
const allChunks = [];
|
|
34
|
+
for (const document of documents) {
|
|
35
|
+
const chunks = this.chunker.chunk(document);
|
|
36
|
+
allChunks.push(...chunks);
|
|
37
|
+
await this.retriever.addDocument(document, chunks);
|
|
38
|
+
}
|
|
39
|
+
return allChunks;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* クエリで関連チャンクを検索
|
|
43
|
+
*/
|
|
44
|
+
async query(query) {
|
|
45
|
+
return this.retriever.search(query);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 複数クエリで検索
|
|
49
|
+
*/
|
|
50
|
+
async queryMultiple(queries) {
|
|
51
|
+
return this.retriever.searchMultiple(queries);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* チャンクを削除
|
|
55
|
+
*/
|
|
56
|
+
async deleteChunk(chunkId) {
|
|
57
|
+
return this.retriever.deleteChunk(chunkId);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* ドキュメントの全チャンクを削除
|
|
61
|
+
*/
|
|
62
|
+
async deleteDocument(documentId, chunkCount) {
|
|
63
|
+
let deleted = 0;
|
|
64
|
+
for (let i = 0; i < chunkCount; i++) {
|
|
65
|
+
const chunkId = `${documentId}_chunk_${i}`;
|
|
66
|
+
if (await this.retriever.deleteChunk(chunkId)) {
|
|
67
|
+
deleted++;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return deleted;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* チャンキング設定を更新して新しいチャンカーを作成
|
|
74
|
+
*/
|
|
75
|
+
updateChunkingConfig(config) {
|
|
76
|
+
this.chunker = new DocumentChunker(config);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* 検索設定を更新
|
|
80
|
+
*/
|
|
81
|
+
updateRetrieverConfig(config) {
|
|
82
|
+
this.retriever.updateConfig(config);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* ドキュメントをチャンキングのみ実行(インデックス追加なし)
|
|
86
|
+
*/
|
|
87
|
+
chunk(document) {
|
|
88
|
+
return this.chunker.chunk(document);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* 複数ドキュメントをチャンキングのみ実行
|
|
92
|
+
*/
|
|
93
|
+
chunkBatch(documents) {
|
|
94
|
+
return this.chunker.chunkBatch(documents);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=RAGEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RAGEngine.js","sourceRoot":"","sources":["../src/RAGEngine.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAY3C;;;GAGG;AACH,MAAM,OAAO,SAAS;IACZ,OAAO,CAAkB;IACzB,SAAS,CAAY;IAE7B,YACE,iBAAoC,EACpC,WAAwB,EACxB,SAA0B,EAAE;QAE5B,IAAI,CAAC,OAAO,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,iBAAiB,EAAE,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACnF,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,QAAkB;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,SAAqB;QACrC,MAAM,SAAS,GAAY,EAAE,CAAC;QAE9B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC5C,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;YAC1B,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,KAAa;QACvB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,OAAiB;QACnC,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,OAAe;QAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,UAAkB,EAAE,UAAkB;QACzD,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,GAAG,UAAU,UAAU,CAAC,EAAE,CAAC;YAC3C,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9C,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,MAAsB;QACzC,IAAI,CAAC,OAAO,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,qBAAqB,CAAC,MAAgC;QACpD,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAkB;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,SAAqB;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;CACF"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RAG Pipeline - End-to-End RAG処理パイプライン
|
|
3
|
+
*
|
|
4
|
+
* 検索→コンテキスト構築→回答生成を統合したパイプライン
|
|
5
|
+
*
|
|
6
|
+
* @requirement REQ-RAG-101
|
|
7
|
+
* @design DES-KATASHIRO-003-RAG §3.6
|
|
8
|
+
*/
|
|
9
|
+
import type { Document, Chunk, SearchResult, RAGEngineConfig, EmbeddingProvider, VectorStore } from './types.js';
|
|
10
|
+
interface LLMProviderLike {
|
|
11
|
+
generate(request: {
|
|
12
|
+
messages: Array<{
|
|
13
|
+
role: string;
|
|
14
|
+
content: string;
|
|
15
|
+
}>;
|
|
16
|
+
temperature?: number;
|
|
17
|
+
maxTokens?: number;
|
|
18
|
+
}): Promise<{
|
|
19
|
+
content: string;
|
|
20
|
+
usage?: {
|
|
21
|
+
promptTokens: number;
|
|
22
|
+
completionTokens: number;
|
|
23
|
+
totalTokens: number;
|
|
24
|
+
};
|
|
25
|
+
}>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* RAGパイプライン設定
|
|
29
|
+
*/
|
|
30
|
+
export interface RAGPipelineConfig extends RAGEngineConfig {
|
|
31
|
+
/** システムプロンプト */
|
|
32
|
+
systemPrompt?: string;
|
|
33
|
+
/** コンテキストテンプレート */
|
|
34
|
+
contextTemplate?: string;
|
|
35
|
+
/** 最大コンテキスト長(文字数) */
|
|
36
|
+
maxContextLength?: number;
|
|
37
|
+
/** 回答生成温度パラメータ */
|
|
38
|
+
temperature?: number;
|
|
39
|
+
/** 最大回答トークン数 */
|
|
40
|
+
maxAnswerTokens?: number;
|
|
41
|
+
/** デフォルトのtopK */
|
|
42
|
+
defaultTopK?: number;
|
|
43
|
+
/** 検索結果の最小スコア */
|
|
44
|
+
minSearchScore?: number;
|
|
45
|
+
/** ストリーミング有効化 */
|
|
46
|
+
enableStreaming?: boolean;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* RAGパイプライン結果
|
|
50
|
+
*/
|
|
51
|
+
export interface RAGPipelineResult {
|
|
52
|
+
/** 生成された回答 */
|
|
53
|
+
answer: string;
|
|
54
|
+
/** 使用されたコンテキスト */
|
|
55
|
+
contexts: string[];
|
|
56
|
+
/** 検索されたチャンク */
|
|
57
|
+
retrievedChunks: SearchResult[];
|
|
58
|
+
/** 使用されたクエリ */
|
|
59
|
+
query: string;
|
|
60
|
+
/** トークン使用量 */
|
|
61
|
+
tokenUsage?: {
|
|
62
|
+
promptTokens: number;
|
|
63
|
+
completionTokens: number;
|
|
64
|
+
totalTokens: number;
|
|
65
|
+
};
|
|
66
|
+
/** 処理時間(ミリ秒) */
|
|
67
|
+
processingTimeMs: number;
|
|
68
|
+
/** メタデータ */
|
|
69
|
+
metadata?: Record<string, unknown>;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* RAGパイプラインオプション(クエリごと)
|
|
73
|
+
*/
|
|
74
|
+
export interface RAGQueryOptions {
|
|
75
|
+
/** 検索件数 */
|
|
76
|
+
topK?: number;
|
|
77
|
+
/** 最小スコア */
|
|
78
|
+
minScore?: number;
|
|
79
|
+
/** 温度パラメータ */
|
|
80
|
+
temperature?: number;
|
|
81
|
+
/** 追加コンテキスト */
|
|
82
|
+
additionalContext?: string;
|
|
83
|
+
/** システムプロンプトオーバーライド */
|
|
84
|
+
systemPromptOverride?: string;
|
|
85
|
+
/** 会話履歴 */
|
|
86
|
+
conversationHistory?: Array<{
|
|
87
|
+
role: 'user' | 'assistant';
|
|
88
|
+
content: string;
|
|
89
|
+
}>;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* デフォルトのシステムプロンプト
|
|
93
|
+
*/
|
|
94
|
+
export declare const DEFAULT_RAG_SYSTEM_PROMPT = "\u3042\u306A\u305F\u306F\u4E0E\u3048\u3089\u308C\u305F\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u60C5\u5831\u306B\u57FA\u3065\u3044\u3066\u8CEA\u554F\u306B\u56DE\u7B54\u3059\u308B\u30A2\u30B7\u30B9\u30BF\u30F3\u30C8\u3067\u3059\u3002\n\u4EE5\u4E0B\u306E\u30EB\u30FC\u30EB\u306B\u5F93\u3063\u3066\u304F\u3060\u3055\u3044:\n1. \u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u306B\u542B\u307E\u308C\u308B\u60C5\u5831\u306E\u307F\u3092\u4F7F\u7528\u3057\u3066\u56DE\u7B54\u3057\u3066\u304F\u3060\u3055\u3044\n2. \u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u306B\u60C5\u5831\u304C\u306A\u3044\u5834\u5408\u306F\u3001\u305D\u306E\u65E8\u3092\u6B63\u76F4\u306B\u4F1D\u3048\u3066\u304F\u3060\u3055\u3044\n3. \u56DE\u7B54\u306F\u7C21\u6F54\u304B\u3064\u6B63\u78BA\u306B\u3057\u3066\u304F\u3060\u3055\u3044\n4. \u63A8\u6E2C\u3084\u4EEE\u5B9A\u3092\u907F\u3051\u3001\u4E8B\u5B9F\u306B\u57FA\u3065\u3044\u305F\u56DE\u7B54\u3092\u3057\u3066\u304F\u3060\u3055\u3044";
|
|
95
|
+
/**
|
|
96
|
+
* デフォルトのコンテキストテンプレート
|
|
97
|
+
*/
|
|
98
|
+
export declare const DEFAULT_CONTEXT_TEMPLATE = "## \u95A2\u9023\u60C5\u5831\n{{contexts}}\n\n## \u8CEA\u554F\n{{query}}\n\n\u4E0A\u8A18\u306E\u60C5\u5831\u306B\u57FA\u3065\u3044\u3066\u8CEA\u554F\u306B\u56DE\u7B54\u3057\u3066\u304F\u3060\u3055\u3044\u3002";
|
|
99
|
+
/**
|
|
100
|
+
* RAGパイプライン
|
|
101
|
+
* 検索→コンテキスト構築→回答生成を統合
|
|
102
|
+
*/
|
|
103
|
+
export declare class RAGPipeline {
|
|
104
|
+
private ragEngine;
|
|
105
|
+
private llmProvider;
|
|
106
|
+
private config;
|
|
107
|
+
private ragEngineConfig;
|
|
108
|
+
constructor(embeddingProvider: EmbeddingProvider, vectorStore: VectorStore, llmProvider: LLMProviderLike, config?: RAGPipelineConfig);
|
|
109
|
+
/**
|
|
110
|
+
* ドキュメントをインジェスト
|
|
111
|
+
*/
|
|
112
|
+
ingest(document: Document): Promise<Chunk[]>;
|
|
113
|
+
/**
|
|
114
|
+
* 複数ドキュメントをバッチインジェスト
|
|
115
|
+
*/
|
|
116
|
+
ingestBatch(documents: Document[]): Promise<Chunk[]>;
|
|
117
|
+
/**
|
|
118
|
+
* RAGクエリを実行(検索→回答生成)
|
|
119
|
+
*/
|
|
120
|
+
query(query: string, options?: RAGQueryOptions): Promise<RAGPipelineResult>;
|
|
121
|
+
/**
|
|
122
|
+
* 会話形式でクエリ(履歴を自動管理)
|
|
123
|
+
*/
|
|
124
|
+
chat(query: string, conversationHistory: Array<{
|
|
125
|
+
role: 'user' | 'assistant';
|
|
126
|
+
content: string;
|
|
127
|
+
}>, options?: Omit<RAGQueryOptions, 'conversationHistory'>): Promise<RAGPipelineResult>;
|
|
128
|
+
/**
|
|
129
|
+
* 検索のみ実行(回答生成なし)
|
|
130
|
+
*/
|
|
131
|
+
search(query: string, topK?: number): Promise<SearchResult[]>;
|
|
132
|
+
/**
|
|
133
|
+
* コンテキストを構築
|
|
134
|
+
*/
|
|
135
|
+
private buildContexts;
|
|
136
|
+
/**
|
|
137
|
+
* ユーザープロンプトを構築
|
|
138
|
+
*/
|
|
139
|
+
private buildUserPrompt;
|
|
140
|
+
/**
|
|
141
|
+
* コンテキストを最大長に切り詰め
|
|
142
|
+
*/
|
|
143
|
+
private truncateContext;
|
|
144
|
+
/**
|
|
145
|
+
* チャンクを削除
|
|
146
|
+
*/
|
|
147
|
+
deleteChunk(chunkId: string): Promise<boolean>;
|
|
148
|
+
/**
|
|
149
|
+
* ドキュメントを削除
|
|
150
|
+
*/
|
|
151
|
+
deleteDocument(documentId: string, chunkCount: number): Promise<number>;
|
|
152
|
+
/**
|
|
153
|
+
* 設定を更新
|
|
154
|
+
*/
|
|
155
|
+
updateConfig(config: Partial<RAGPipelineConfig>): void;
|
|
156
|
+
/**
|
|
157
|
+
* 現在の設定を取得
|
|
158
|
+
*/
|
|
159
|
+
getConfig(): Readonly<RAGPipelineConfig>;
|
|
160
|
+
}
|
|
161
|
+
export {};
|
|
162
|
+
//# sourceMappingURL=RAGPipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RAGPipeline.d.ts","sourceRoot":"","sources":["../src/RAGPipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RAG Pipeline - End-to-End RAG処理パイプライン
|
|
3
|
+
*
|
|
4
|
+
* 検索→コンテキスト構築→回答生成を統合したパイプライン
|
|
5
|
+
*
|
|
6
|
+
* @requirement REQ-RAG-101
|
|
7
|
+
* @design DES-KATASHIRO-003-RAG §3.6
|
|
8
|
+
*/
|
|
9
|
+
import { RAGEngine } from './RAGEngine.js';
|
|
10
|
+
/**
|
|
11
|
+
* デフォルトのシステムプロンプト
|
|
12
|
+
*/
|
|
13
|
+
export const DEFAULT_RAG_SYSTEM_PROMPT = `あなたは与えられたコンテキスト情報に基づいて質問に回答するアシスタントです。
|
|
14
|
+
以下のルールに従ってください:
|
|
15
|
+
1. コンテキストに含まれる情報のみを使用して回答してください
|
|
16
|
+
2. コンテキストに情報がない場合は、その旨を正直に伝えてください
|
|
17
|
+
3. 回答は簡潔かつ正確にしてください
|
|
18
|
+
4. 推測や仮定を避け、事実に基づいた回答をしてください`;
|
|
19
|
+
/**
|
|
20
|
+
* デフォルトのコンテキストテンプレート
|
|
21
|
+
*/
|
|
22
|
+
export const DEFAULT_CONTEXT_TEMPLATE = `## 関連情報
|
|
23
|
+
{{contexts}}
|
|
24
|
+
|
|
25
|
+
## 質問
|
|
26
|
+
{{query}}
|
|
27
|
+
|
|
28
|
+
上記の情報に基づいて質問に回答してください。`;
|
|
29
|
+
/**
|
|
30
|
+
* RAGパイプライン
|
|
31
|
+
* 検索→コンテキスト構築→回答生成を統合
|
|
32
|
+
*/
|
|
33
|
+
export class RAGPipeline {
|
|
34
|
+
ragEngine;
|
|
35
|
+
llmProvider;
|
|
36
|
+
config;
|
|
37
|
+
ragEngineConfig;
|
|
38
|
+
constructor(embeddingProvider, vectorStore, llmProvider, config = {}) {
|
|
39
|
+
const { systemPrompt, contextTemplate, maxContextLength, temperature, maxAnswerTokens, defaultTopK, minSearchScore, enableStreaming, ...ragEngineConfig } = config;
|
|
40
|
+
this.ragEngine = new RAGEngine(embeddingProvider, vectorStore, ragEngineConfig);
|
|
41
|
+
this.llmProvider = llmProvider;
|
|
42
|
+
this.ragEngineConfig = ragEngineConfig;
|
|
43
|
+
this.config = {
|
|
44
|
+
systemPrompt: systemPrompt ?? DEFAULT_RAG_SYSTEM_PROMPT,
|
|
45
|
+
contextTemplate: contextTemplate ?? DEFAULT_CONTEXT_TEMPLATE,
|
|
46
|
+
maxContextLength: maxContextLength ?? 8000,
|
|
47
|
+
temperature: temperature ?? 0.3,
|
|
48
|
+
maxAnswerTokens: maxAnswerTokens ?? 2048,
|
|
49
|
+
defaultTopK: defaultTopK ?? 5,
|
|
50
|
+
minSearchScore: minSearchScore ?? 0.3,
|
|
51
|
+
enableStreaming: enableStreaming ?? false,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* ドキュメントをインジェスト
|
|
56
|
+
*/
|
|
57
|
+
async ingest(document) {
|
|
58
|
+
return this.ragEngine.ingest(document);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* 複数ドキュメントをバッチインジェスト
|
|
62
|
+
*/
|
|
63
|
+
async ingestBatch(documents) {
|
|
64
|
+
return this.ragEngine.ingestBatch(documents);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* RAGクエリを実行(検索→回答生成)
|
|
68
|
+
*/
|
|
69
|
+
async query(query, options = {}) {
|
|
70
|
+
const startTime = Date.now();
|
|
71
|
+
// 1. 検索
|
|
72
|
+
const topK = options.topK ?? this.config.defaultTopK;
|
|
73
|
+
const minScore = options.minScore ?? this.config.minSearchScore;
|
|
74
|
+
this.ragEngine.updateRetrieverConfig({ topK, minScore });
|
|
75
|
+
const searchResults = await this.ragEngine.query(query);
|
|
76
|
+
// 2. コンテキスト構築
|
|
77
|
+
const contexts = this.buildContexts(searchResults);
|
|
78
|
+
const contextText = this.truncateContext(contexts.join('\n\n'));
|
|
79
|
+
// 3. プロンプト構築
|
|
80
|
+
const systemPrompt = options.systemPromptOverride ?? this.config.systemPrompt;
|
|
81
|
+
const userPrompt = this.buildUserPrompt(query, contextText, options.additionalContext);
|
|
82
|
+
// 4. メッセージ配列構築
|
|
83
|
+
const messages = [
|
|
84
|
+
{ role: 'system', content: systemPrompt },
|
|
85
|
+
];
|
|
86
|
+
// 会話履歴があれば追加
|
|
87
|
+
if (options.conversationHistory && options.conversationHistory.length > 0) {
|
|
88
|
+
for (const msg of options.conversationHistory) {
|
|
89
|
+
messages.push({ role: msg.role, content: msg.content });
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
messages.push({ role: 'user', content: userPrompt });
|
|
93
|
+
// 5. 回答生成
|
|
94
|
+
const temperature = options.temperature ?? this.config.temperature;
|
|
95
|
+
const response = await this.llmProvider.generate({
|
|
96
|
+
messages,
|
|
97
|
+
temperature,
|
|
98
|
+
maxTokens: this.config.maxAnswerTokens,
|
|
99
|
+
});
|
|
100
|
+
const processingTimeMs = Date.now() - startTime;
|
|
101
|
+
return {
|
|
102
|
+
answer: response.content,
|
|
103
|
+
contexts,
|
|
104
|
+
retrievedChunks: searchResults,
|
|
105
|
+
query,
|
|
106
|
+
tokenUsage: response.usage,
|
|
107
|
+
processingTimeMs,
|
|
108
|
+
metadata: {
|
|
109
|
+
topK,
|
|
110
|
+
minScore,
|
|
111
|
+
temperature,
|
|
112
|
+
searchResultCount: searchResults.length,
|
|
113
|
+
contextLength: contextText.length,
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* 会話形式でクエリ(履歴を自動管理)
|
|
119
|
+
*/
|
|
120
|
+
async chat(query, conversationHistory, options = {}) {
|
|
121
|
+
return this.query(query, { ...options, conversationHistory });
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* 検索のみ実行(回答生成なし)
|
|
125
|
+
*/
|
|
126
|
+
async search(query, topK) {
|
|
127
|
+
if (topK) {
|
|
128
|
+
this.ragEngine.updateRetrieverConfig({ topK });
|
|
129
|
+
}
|
|
130
|
+
return this.ragEngine.query(query);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* コンテキストを構築
|
|
134
|
+
*/
|
|
135
|
+
buildContexts(searchResults) {
|
|
136
|
+
return searchResults.map((result, index) => {
|
|
137
|
+
const metadata = result.chunk.metadata;
|
|
138
|
+
const source = metadata.source ?? metadata.documentId ?? 'unknown';
|
|
139
|
+
return `[情報源 ${index + 1}] (score: ${result.score.toFixed(2)}, source: ${source})\n${result.chunk.content}`;
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* ユーザープロンプトを構築
|
|
144
|
+
*/
|
|
145
|
+
buildUserPrompt(query, contextText, additionalContext) {
|
|
146
|
+
let prompt = this.config.contextTemplate
|
|
147
|
+
.replace('{{contexts}}', contextText)
|
|
148
|
+
.replace('{{query}}', query);
|
|
149
|
+
if (additionalContext) {
|
|
150
|
+
prompt = `## 追加情報\n${additionalContext}\n\n${prompt}`;
|
|
151
|
+
}
|
|
152
|
+
return prompt;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* コンテキストを最大長に切り詰め
|
|
156
|
+
*/
|
|
157
|
+
truncateContext(context) {
|
|
158
|
+
if (context.length <= this.config.maxContextLength) {
|
|
159
|
+
return context;
|
|
160
|
+
}
|
|
161
|
+
// 文境界で切り詰め
|
|
162
|
+
const truncated = context.slice(0, this.config.maxContextLength);
|
|
163
|
+
const lastSentenceEnd = Math.max(truncated.lastIndexOf('。'), truncated.lastIndexOf('.'), truncated.lastIndexOf('\n'));
|
|
164
|
+
if (lastSentenceEnd > this.config.maxContextLength * 0.8) {
|
|
165
|
+
return truncated.slice(0, lastSentenceEnd + 1) + '\n[...以下省略...]';
|
|
166
|
+
}
|
|
167
|
+
return truncated + '...\n[...以下省略...]';
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* チャンクを削除
|
|
171
|
+
*/
|
|
172
|
+
async deleteChunk(chunkId) {
|
|
173
|
+
return this.ragEngine.deleteChunk(chunkId);
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* ドキュメントを削除
|
|
177
|
+
*/
|
|
178
|
+
async deleteDocument(documentId, chunkCount) {
|
|
179
|
+
return this.ragEngine.deleteDocument(documentId, chunkCount);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* 設定を更新
|
|
183
|
+
*/
|
|
184
|
+
updateConfig(config) {
|
|
185
|
+
if (config.systemPrompt !== undefined) {
|
|
186
|
+
this.config.systemPrompt = config.systemPrompt;
|
|
187
|
+
}
|
|
188
|
+
if (config.contextTemplate !== undefined) {
|
|
189
|
+
this.config.contextTemplate = config.contextTemplate;
|
|
190
|
+
}
|
|
191
|
+
if (config.maxContextLength !== undefined) {
|
|
192
|
+
this.config.maxContextLength = config.maxContextLength;
|
|
193
|
+
}
|
|
194
|
+
if (config.temperature !== undefined) {
|
|
195
|
+
this.config.temperature = config.temperature;
|
|
196
|
+
}
|
|
197
|
+
if (config.maxAnswerTokens !== undefined) {
|
|
198
|
+
this.config.maxAnswerTokens = config.maxAnswerTokens;
|
|
199
|
+
}
|
|
200
|
+
if (config.defaultTopK !== undefined) {
|
|
201
|
+
this.config.defaultTopK = config.defaultTopK;
|
|
202
|
+
}
|
|
203
|
+
if (config.minSearchScore !== undefined) {
|
|
204
|
+
this.config.minSearchScore = config.minSearchScore;
|
|
205
|
+
}
|
|
206
|
+
// RAGEngine設定の更新
|
|
207
|
+
const { chunking, retriever } = config;
|
|
208
|
+
if (chunking) {
|
|
209
|
+
this.ragEngine.updateChunkingConfig(chunking);
|
|
210
|
+
}
|
|
211
|
+
if (retriever) {
|
|
212
|
+
this.ragEngine.updateRetrieverConfig(retriever);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* 現在の設定を取得
|
|
217
|
+
*/
|
|
218
|
+
getConfig() {
|
|
219
|
+
return { ...this.config, ...this.ragEngineConfig };
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=RAGPipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RAGPipeline.js","sourceRoot":"","sources":["../src/RAGPipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retriever - 検索エンジン
|
|
3
|
+
*
|
|
4
|
+
* @requirement REQ-RAG-004
|
|
5
|
+
* @design DES-KATASHIRO-003-RAG §3.4
|
|
6
|
+
*/
|
|
7
|
+
import type { Chunk, Document, EmbeddingProvider, RetrieverConfig, SearchResult, VectorStore } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* 検索エンジン
|
|
10
|
+
* Embedding生成とVector検索を統合
|
|
11
|
+
*/
|
|
12
|
+
export declare class Retriever {
|
|
13
|
+
private embeddingManager;
|
|
14
|
+
private vectorStore;
|
|
15
|
+
private config;
|
|
16
|
+
constructor(embeddingProvider: EmbeddingProvider, vectorStore: VectorStore, config?: RetrieverConfig);
|
|
17
|
+
/**
|
|
18
|
+
* ドキュメントをインデックスに追加
|
|
19
|
+
*/
|
|
20
|
+
addDocument(_document: Document, chunks: Chunk[]): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* 複数ドキュメントをバッチでインデックスに追加
|
|
23
|
+
*/
|
|
24
|
+
addDocuments(documents: Array<{
|
|
25
|
+
document: Document;
|
|
26
|
+
chunks: Chunk[];
|
|
27
|
+
}>): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* クエリで検索
|
|
30
|
+
*/
|
|
31
|
+
search(query: string): Promise<SearchResult[]>;
|
|
32
|
+
/**
|
|
33
|
+
* 複数クエリで検索(結果をマージ)
|
|
34
|
+
*/
|
|
35
|
+
searchMultiple(queries: string[]): Promise<SearchResult[]>;
|
|
36
|
+
/**
|
|
37
|
+
* チャンクを削除
|
|
38
|
+
*/
|
|
39
|
+
deleteChunk(chunkId: string): Promise<boolean>;
|
|
40
|
+
/**
|
|
41
|
+
* 検索設定を取得
|
|
42
|
+
*/
|
|
43
|
+
getConfig(): Required<RetrieverConfig>;
|
|
44
|
+
/**
|
|
45
|
+
* 検索設定を更新
|
|
46
|
+
*/
|
|
47
|
+
updateConfig(config: Partial<RetrieverConfig>): void;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=Retriever.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Retriever.d.ts","sourceRoot":"","sources":["../src/Retriever.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAUjH;;;GAGG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAA4B;gBAGxC,iBAAiB,EAAE,iBAAiB,EACpC,WAAW,EAAE,WAAW,EACxB,MAAM,GAAE,eAAoB;IAO9B;;OAEG;IACG,WAAW,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAWtE;;OAEG;IACG,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,MAAM,EAAE,KAAK,EAAE,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAa5F;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAQpD;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAmBhE;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIpD;;OAEG;IACH,SAAS,IAAI,QAAQ,CAAC,eAAe,CAAC;IAItC;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;CAGrD"}
|