@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.
Files changed (102) hide show
  1. package/LICENSE +21 -0
  2. package/dist/RAGEngine.d.ts +58 -0
  3. package/dist/RAGEngine.d.ts.map +1 -0
  4. package/dist/RAGEngine.js +97 -0
  5. package/dist/RAGEngine.js.map +1 -0
  6. package/dist/RAGPipeline.d.ts +162 -0
  7. package/dist/RAGPipeline.d.ts.map +1 -0
  8. package/dist/RAGPipeline.js +222 -0
  9. package/dist/RAGPipeline.js.map +1 -0
  10. package/dist/Retriever.d.ts +49 -0
  11. package/dist/Retriever.d.ts.map +1 -0
  12. package/dist/Retriever.js +96 -0
  13. package/dist/Retriever.js.map +1 -0
  14. package/dist/chunking/DocumentChunker.d.ts +47 -0
  15. package/dist/chunking/DocumentChunker.d.ts.map +1 -0
  16. package/dist/chunking/DocumentChunker.js +171 -0
  17. package/dist/chunking/DocumentChunker.js.map +1 -0
  18. package/dist/chunking/index.d.ts +5 -0
  19. package/dist/chunking/index.d.ts.map +1 -0
  20. package/dist/chunking/index.js +5 -0
  21. package/dist/chunking/index.js.map +1 -0
  22. package/dist/embedding/AzureOpenAIEmbeddingProvider.d.ts +63 -0
  23. package/dist/embedding/AzureOpenAIEmbeddingProvider.d.ts.map +1 -0
  24. package/dist/embedding/AzureOpenAIEmbeddingProvider.js +133 -0
  25. package/dist/embedding/AzureOpenAIEmbeddingProvider.js.map +1 -0
  26. package/dist/embedding/BaseEmbeddingProvider.d.ts +43 -0
  27. package/dist/embedding/BaseEmbeddingProvider.d.ts.map +1 -0
  28. package/dist/embedding/BaseEmbeddingProvider.js +98 -0
  29. package/dist/embedding/BaseEmbeddingProvider.js.map +1 -0
  30. package/dist/embedding/EmbeddingFactory.d.ts +75 -0
  31. package/dist/embedding/EmbeddingFactory.d.ts.map +1 -0
  32. package/dist/embedding/EmbeddingFactory.js +153 -0
  33. package/dist/embedding/EmbeddingFactory.js.map +1 -0
  34. package/dist/embedding/EmbeddingManager.d.ts +41 -0
  35. package/dist/embedding/EmbeddingManager.d.ts.map +1 -0
  36. package/dist/embedding/EmbeddingManager.js +93 -0
  37. package/dist/embedding/EmbeddingManager.js.map +1 -0
  38. package/dist/embedding/MockEmbeddingProvider.d.ts +54 -0
  39. package/dist/embedding/MockEmbeddingProvider.d.ts.map +1 -0
  40. package/dist/embedding/MockEmbeddingProvider.js +91 -0
  41. package/dist/embedding/MockEmbeddingProvider.js.map +1 -0
  42. package/dist/embedding/OllamaEmbeddingProvider.d.ts +69 -0
  43. package/dist/embedding/OllamaEmbeddingProvider.d.ts.map +1 -0
  44. package/dist/embedding/OllamaEmbeddingProvider.js +136 -0
  45. package/dist/embedding/OllamaEmbeddingProvider.js.map +1 -0
  46. package/dist/embedding/OpenAIEmbeddingProvider.d.ts +83 -0
  47. package/dist/embedding/OpenAIEmbeddingProvider.d.ts.map +1 -0
  48. package/dist/embedding/OpenAIEmbeddingProvider.js +150 -0
  49. package/dist/embedding/OpenAIEmbeddingProvider.js.map +1 -0
  50. package/dist/embedding/index.d.ts +16 -0
  51. package/dist/embedding/index.d.ts.map +1 -0
  52. package/dist/embedding/index.js +15 -0
  53. package/dist/embedding/index.js.map +1 -0
  54. package/dist/index.d.ts +20 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +22 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/reranking/LLMReranker.d.ts +147 -0
  59. package/dist/reranking/LLMReranker.d.ts.map +1 -0
  60. package/dist/reranking/LLMReranker.js +262 -0
  61. package/dist/reranking/LLMReranker.js.map +1 -0
  62. package/dist/reranking/index.d.ts +7 -0
  63. package/dist/reranking/index.d.ts.map +1 -0
  64. package/dist/reranking/index.js +7 -0
  65. package/dist/reranking/index.js.map +1 -0
  66. package/dist/types.d.ts +144 -0
  67. package/dist/types.d.ts.map +1 -0
  68. package/dist/types.js +8 -0
  69. package/dist/types.js.map +1 -0
  70. package/dist/vectordb/FileVectorStore.d.ts +93 -0
  71. package/dist/vectordb/FileVectorStore.d.ts.map +1 -0
  72. package/dist/vectordb/FileVectorStore.js +218 -0
  73. package/dist/vectordb/FileVectorStore.js.map +1 -0
  74. package/dist/vectordb/InMemoryVectorStore.d.ts +48 -0
  75. package/dist/vectordb/InMemoryVectorStore.d.ts.map +1 -0
  76. package/dist/vectordb/InMemoryVectorStore.js +86 -0
  77. package/dist/vectordb/InMemoryVectorStore.js.map +1 -0
  78. package/dist/vectordb/index.d.ts +8 -0
  79. package/dist/vectordb/index.d.ts.map +1 -0
  80. package/dist/vectordb/index.js +6 -0
  81. package/dist/vectordb/index.js.map +1 -0
  82. package/package.json +37 -0
  83. package/src/RAGEngine.ts +127 -0
  84. package/src/RAGPipeline.ts +357 -0
  85. package/src/Retriever.ts +121 -0
  86. package/src/chunking/DocumentChunker.ts +207 -0
  87. package/src/chunking/index.ts +5 -0
  88. package/src/embedding/AzureOpenAIEmbeddingProvider.ts +208 -0
  89. package/src/embedding/BaseEmbeddingProvider.ts +133 -0
  90. package/src/embedding/EmbeddingFactory.ts +225 -0
  91. package/src/embedding/EmbeddingManager.ts +110 -0
  92. package/src/embedding/MockEmbeddingProvider.ts +123 -0
  93. package/src/embedding/OllamaEmbeddingProvider.ts +197 -0
  94. package/src/embedding/OpenAIEmbeddingProvider.ts +226 -0
  95. package/src/embedding/index.ts +33 -0
  96. package/src/index.ts +55 -0
  97. package/src/reranking/LLMReranker.ts +401 -0
  98. package/src/reranking/index.ts +15 -0
  99. package/src/types.ts +157 -0
  100. package/src/vectordb/FileVectorStore.ts +289 -0
  101. package/src/vectordb/InMemoryVectorStore.ts +121 -0
  102. package/src/vectordb/index.ts +9 -0
@@ -0,0 +1,93 @@
1
+ /**
2
+ * File-based Vector Store
3
+ *
4
+ * @requirement REQ-RAG-102
5
+ * @design DES-KATASHIRO-003-RAG §3.3
6
+ */
7
+ import type { Chunk, SearchResult, Vector, VectorStore } from '../types.js';
8
+ /**
9
+ * FileVectorStoreの設定
10
+ */
11
+ export interface FileVectorStoreConfig {
12
+ /** 保存先ファイルパス */
13
+ filePath: string;
14
+ /** 類似度しきい値(デフォルト: 0.7) */
15
+ similarityThreshold?: number;
16
+ /** 自動保存(デフォルト: true) */
17
+ autoSave?: boolean;
18
+ /** 保存間隔(ミリ秒、デフォルト: 1000) */
19
+ saveIntervalMs?: number;
20
+ }
21
+ /**
22
+ * ファイルベースのベクトルストア
23
+ * データをJSONファイルに永続化
24
+ */
25
+ export declare class FileVectorStore implements VectorStore {
26
+ readonly name = "file";
27
+ private entries;
28
+ private filePath;
29
+ private similarityThreshold;
30
+ private autoSave;
31
+ private saveIntervalMs;
32
+ private isDirty;
33
+ private saveTimer;
34
+ private createdAt;
35
+ private isInitialized;
36
+ constructor(config: FileVectorStoreConfig);
37
+ /**
38
+ * 格納エントリ数を取得
39
+ */
40
+ get size(): number;
41
+ /**
42
+ * ストアを初期化(ファイルから読み込み)
43
+ */
44
+ init(): Promise<void>;
45
+ add(chunk: Chunk, vector: Vector): Promise<void>;
46
+ addBatch(items: Array<{
47
+ chunk: Chunk;
48
+ vector: Vector;
49
+ }>): Promise<void>;
50
+ search(vector: Vector, topK: number): Promise<SearchResult[]>;
51
+ delete(chunkId: string): Promise<boolean>;
52
+ /**
53
+ * ストアをクリア
54
+ */
55
+ clear(): Promise<void>;
56
+ /**
57
+ * 指定IDのチャンクが存在するか確認
58
+ */
59
+ has(chunkId: string): Promise<boolean>;
60
+ /**
61
+ * 即座にファイルに保存
62
+ */
63
+ save(): Promise<void>;
64
+ /**
65
+ * 未保存の変更があるか確認
66
+ */
67
+ get dirty(): boolean;
68
+ /**
69
+ * ストアを閉じる(保留中の保存を実行)
70
+ */
71
+ close(): Promise<void>;
72
+ /**
73
+ * ファイルパスを取得
74
+ */
75
+ getFilePath(): string;
76
+ /**
77
+ * 初期化を確認
78
+ */
79
+ private ensureInitialized;
80
+ /**
81
+ * 変更をマーク
82
+ */
83
+ private markDirty;
84
+ /**
85
+ * 保存をスケジュール
86
+ */
87
+ private scheduleSave;
88
+ /**
89
+ * コサイン類似度を計算
90
+ */
91
+ private cosineSimilarity;
92
+ }
93
+ //# sourceMappingURL=FileVectorStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileVectorStore.d.ts","sourceRoot":"","sources":["../../src/vectordb/FileVectorStore.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI5E;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,wBAAwB;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4BAA4B;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAwBD;;;GAGG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACjD,QAAQ,CAAC,IAAI,UAAU;IAEvB,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAS;gBAElB,MAAM,EAAE,qBAAqB;IAQzC;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA6BrB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhD,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAsB7D,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS/C;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B;;OAEG;IACG,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK5C;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB3B;;OAEG;IACH,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAW5B;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;OAEG;YACW,iBAAiB;IAM/B;;OAEG;IACH,OAAO,CAAC,SAAS;IAQjB;;OAEG;IACH,OAAO,CAAC,YAAY;IAYpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAsBzB"}
@@ -0,0 +1,218 @@
1
+ /**
2
+ * File-based Vector Store
3
+ *
4
+ * @requirement REQ-RAG-102
5
+ * @design DES-KATASHIRO-003-RAG §3.3
6
+ */
7
+ import * as fs from 'node:fs';
8
+ import * as path from 'node:path';
9
+ /**
10
+ * ファイルベースのベクトルストア
11
+ * データをJSONファイルに永続化
12
+ */
13
+ export class FileVectorStore {
14
+ name = 'file';
15
+ entries = new Map();
16
+ filePath;
17
+ similarityThreshold;
18
+ autoSave;
19
+ saveIntervalMs;
20
+ isDirty = false;
21
+ saveTimer = null;
22
+ createdAt;
23
+ isInitialized = false;
24
+ constructor(config) {
25
+ this.filePath = path.resolve(config.filePath);
26
+ this.similarityThreshold = config.similarityThreshold ?? 0.7;
27
+ this.autoSave = config.autoSave ?? true;
28
+ this.saveIntervalMs = config.saveIntervalMs ?? 1000;
29
+ this.createdAt = new Date().toISOString();
30
+ }
31
+ /**
32
+ * 格納エントリ数を取得
33
+ */
34
+ get size() {
35
+ return this.entries.size;
36
+ }
37
+ /**
38
+ * ストアを初期化(ファイルから読み込み)
39
+ */
40
+ async init() {
41
+ if (this.isInitialized)
42
+ return;
43
+ if (fs.existsSync(this.filePath)) {
44
+ try {
45
+ const data = await fs.promises.readFile(this.filePath, 'utf-8');
46
+ const parsed = JSON.parse(data);
47
+ // データを読み込み
48
+ for (const entry of parsed.entries) {
49
+ this.entries.set(entry.chunkId, {
50
+ chunk: entry.chunk,
51
+ vector: entry.vector,
52
+ });
53
+ }
54
+ if (parsed.createdAt) {
55
+ this.createdAt = parsed.createdAt;
56
+ }
57
+ }
58
+ catch (error) {
59
+ // ファイルが壊れている場合は空で開始
60
+ console.warn(`Failed to load vector store from ${this.filePath}:`, error);
61
+ this.entries.clear();
62
+ }
63
+ }
64
+ this.isInitialized = true;
65
+ }
66
+ async add(chunk, vector) {
67
+ await this.ensureInitialized();
68
+ this.entries.set(chunk.id, { chunk, vector });
69
+ this.markDirty();
70
+ }
71
+ async addBatch(items) {
72
+ await this.ensureInitialized();
73
+ for (const item of items) {
74
+ this.entries.set(item.chunk.id, { chunk: item.chunk, vector: item.vector });
75
+ }
76
+ this.markDirty();
77
+ }
78
+ async search(vector, topK) {
79
+ await this.ensureInitialized();
80
+ const results = [];
81
+ for (const entry of this.entries.values()) {
82
+ const similarity = this.cosineSimilarity(vector, entry.vector);
83
+ if (similarity >= this.similarityThreshold) {
84
+ results.push({ entry, similarity });
85
+ }
86
+ }
87
+ // スコア降順でソート
88
+ results.sort((a, b) => b.similarity - a.similarity);
89
+ // topKに制限
90
+ return results.slice(0, topK).map(({ entry, similarity }) => ({
91
+ chunk: entry.chunk,
92
+ score: similarity,
93
+ }));
94
+ }
95
+ async delete(chunkId) {
96
+ await this.ensureInitialized();
97
+ const result = this.entries.delete(chunkId);
98
+ if (result) {
99
+ this.markDirty();
100
+ }
101
+ return result;
102
+ }
103
+ /**
104
+ * ストアをクリア
105
+ */
106
+ async clear() {
107
+ await this.ensureInitialized();
108
+ this.entries.clear();
109
+ this.markDirty();
110
+ }
111
+ /**
112
+ * 指定IDのチャンクが存在するか確認
113
+ */
114
+ async has(chunkId) {
115
+ await this.ensureInitialized();
116
+ return this.entries.has(chunkId);
117
+ }
118
+ /**
119
+ * 即座にファイルに保存
120
+ */
121
+ async save() {
122
+ await this.ensureInitialized();
123
+ // ディレクトリが存在しない場合は作成
124
+ const dir = path.dirname(this.filePath);
125
+ if (!fs.existsSync(dir)) {
126
+ await fs.promises.mkdir(dir, { recursive: true });
127
+ }
128
+ const data = {
129
+ version: '1.0.0',
130
+ createdAt: this.createdAt,
131
+ updatedAt: new Date().toISOString(),
132
+ entries: Array.from(this.entries.entries()).map(([chunkId, entry]) => ({
133
+ chunkId,
134
+ chunk: entry.chunk,
135
+ vector: entry.vector,
136
+ })),
137
+ };
138
+ await fs.promises.writeFile(this.filePath, JSON.stringify(data, null, 2), 'utf-8');
139
+ this.isDirty = false;
140
+ }
141
+ /**
142
+ * 未保存の変更があるか確認
143
+ */
144
+ get dirty() {
145
+ return this.isDirty;
146
+ }
147
+ /**
148
+ * ストアを閉じる(保留中の保存を実行)
149
+ */
150
+ async close() {
151
+ if (this.saveTimer) {
152
+ clearTimeout(this.saveTimer);
153
+ this.saveTimer = null;
154
+ }
155
+ if (this.isDirty) {
156
+ await this.save();
157
+ }
158
+ }
159
+ /**
160
+ * ファイルパスを取得
161
+ */
162
+ getFilePath() {
163
+ return this.filePath;
164
+ }
165
+ /**
166
+ * 初期化を確認
167
+ */
168
+ async ensureInitialized() {
169
+ if (!this.isInitialized) {
170
+ await this.init();
171
+ }
172
+ }
173
+ /**
174
+ * 変更をマーク
175
+ */
176
+ markDirty() {
177
+ this.isDirty = true;
178
+ if (this.autoSave) {
179
+ this.scheduleSave();
180
+ }
181
+ }
182
+ /**
183
+ * 保存をスケジュール
184
+ */
185
+ scheduleSave() {
186
+ if (this.saveTimer) {
187
+ clearTimeout(this.saveTimer);
188
+ }
189
+ this.saveTimer = setTimeout(() => {
190
+ this.save().catch((err) => {
191
+ console.error('Failed to auto-save vector store:', err);
192
+ });
193
+ }, this.saveIntervalMs);
194
+ }
195
+ /**
196
+ * コサイン類似度を計算
197
+ */
198
+ cosineSimilarity(a, b) {
199
+ if (a.length !== b.length) {
200
+ throw new Error(`Vector dimension mismatch: ${a.length} vs ${b.length}`);
201
+ }
202
+ let dotProduct = 0;
203
+ let normA = 0;
204
+ let normB = 0;
205
+ for (let i = 0; i < a.length; i++) {
206
+ const valA = a[i] ?? 0;
207
+ const valB = b[i] ?? 0;
208
+ dotProduct += valA * valB;
209
+ normA += valA * valA;
210
+ normB += valB * valB;
211
+ }
212
+ const denominator = Math.sqrt(normA) * Math.sqrt(normB);
213
+ if (denominator === 0)
214
+ return 0;
215
+ return dotProduct / denominator;
216
+ }
217
+ }
218
+ //# sourceMappingURL=FileVectorStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileVectorStore.js","sourceRoot":"","sources":["../../src/vectordb/FileVectorStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * In-Memory Vector Store
3
+ *
4
+ * @requirement REQ-RAG-002
5
+ * @design DES-KATASHIRO-003-RAG §3.2
6
+ */
7
+ import type { Chunk, SearchResult, Vector, VectorStore } from '../types.js';
8
+ /**
9
+ * インメモリベクトルストアの設定
10
+ */
11
+ export interface InMemoryVectorStoreConfig {
12
+ /** 類似度しきい値(デフォルト: 0.7) */
13
+ similarityThreshold?: number;
14
+ }
15
+ /**
16
+ * インメモリベクトルストア
17
+ * テスト用およびプロトタイピング用
18
+ */
19
+ export declare class InMemoryVectorStore implements VectorStore {
20
+ readonly name = "in-memory";
21
+ private entries;
22
+ private similarityThreshold;
23
+ constructor(config?: InMemoryVectorStoreConfig);
24
+ /**
25
+ * 格納エントリ数を取得
26
+ */
27
+ get size(): number;
28
+ add(chunk: Chunk, vector: Vector): Promise<void>;
29
+ addBatch(items: Array<{
30
+ chunk: Chunk;
31
+ vector: Vector;
32
+ }>): Promise<void>;
33
+ search(vector: Vector, topK: number): Promise<SearchResult[]>;
34
+ delete(chunkId: string): Promise<boolean>;
35
+ /**
36
+ * ストアをクリア
37
+ */
38
+ clear(): void;
39
+ /**
40
+ * 指定IDのチャンクが存在するか確認
41
+ */
42
+ has(chunkId: string): boolean;
43
+ /**
44
+ * コサイン類似度を計算
45
+ */
46
+ private cosineSimilarity;
47
+ }
48
+ //# sourceMappingURL=InMemoryVectorStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InMemoryVectorStore.d.ts","sourceRoot":"","sources":["../../src/vectordb/InMemoryVectorStore.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE5E;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,0BAA0B;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAUD;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,WAAW;IACrD,QAAQ,CAAC,IAAI,eAAe;IAE5B,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,mBAAmB,CAAS;gBAExB,MAAM,GAAE,yBAA8B;IAIlD;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAEK,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAqB7D,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI/C;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAsBzB"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * In-Memory Vector Store
3
+ *
4
+ * @requirement REQ-RAG-002
5
+ * @design DES-KATASHIRO-003-RAG §3.2
6
+ */
7
+ /**
8
+ * インメモリベクトルストア
9
+ * テスト用およびプロトタイピング用
10
+ */
11
+ export class InMemoryVectorStore {
12
+ name = 'in-memory';
13
+ entries = new Map();
14
+ similarityThreshold;
15
+ constructor(config = {}) {
16
+ this.similarityThreshold = config.similarityThreshold ?? 0.7;
17
+ }
18
+ /**
19
+ * 格納エントリ数を取得
20
+ */
21
+ get size() {
22
+ return this.entries.size;
23
+ }
24
+ async add(chunk, vector) {
25
+ this.entries.set(chunk.id, { chunk, vector });
26
+ }
27
+ async addBatch(items) {
28
+ for (const item of items) {
29
+ this.entries.set(item.chunk.id, { chunk: item.chunk, vector: item.vector });
30
+ }
31
+ }
32
+ async search(vector, topK) {
33
+ const results = [];
34
+ for (const entry of this.entries.values()) {
35
+ const similarity = this.cosineSimilarity(vector, entry.vector);
36
+ if (similarity >= this.similarityThreshold) {
37
+ results.push({ entry, similarity });
38
+ }
39
+ }
40
+ // スコア降順でソート
41
+ results.sort((a, b) => b.similarity - a.similarity);
42
+ // topKに制限
43
+ return results.slice(0, topK).map(({ entry, similarity }) => ({
44
+ chunk: entry.chunk,
45
+ score: similarity,
46
+ }));
47
+ }
48
+ async delete(chunkId) {
49
+ return this.entries.delete(chunkId);
50
+ }
51
+ /**
52
+ * ストアをクリア
53
+ */
54
+ clear() {
55
+ this.entries.clear();
56
+ }
57
+ /**
58
+ * 指定IDのチャンクが存在するか確認
59
+ */
60
+ has(chunkId) {
61
+ return this.entries.has(chunkId);
62
+ }
63
+ /**
64
+ * コサイン類似度を計算
65
+ */
66
+ cosineSimilarity(a, b) {
67
+ if (a.length !== b.length) {
68
+ throw new Error(`Vector dimension mismatch: ${a.length} vs ${b.length}`);
69
+ }
70
+ let dotProduct = 0;
71
+ let normA = 0;
72
+ let normB = 0;
73
+ for (let i = 0; i < a.length; i++) {
74
+ const valA = a[i] ?? 0;
75
+ const valB = b[i] ?? 0;
76
+ dotProduct += valA * valB;
77
+ normA += valA * valA;
78
+ normB += valB * valB;
79
+ }
80
+ const denominator = Math.sqrt(normA) * Math.sqrt(normB);
81
+ if (denominator === 0)
82
+ return 0;
83
+ return dotProduct / denominator;
84
+ }
85
+ }
86
+ //# sourceMappingURL=InMemoryVectorStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InMemoryVectorStore.js","sourceRoot":"","sources":["../../src/vectordb/InMemoryVectorStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Vector DB module exports
3
+ */
4
+ export { InMemoryVectorStore } from './InMemoryVectorStore.js';
5
+ export type { InMemoryVectorStoreConfig } from './InMemoryVectorStore.js';
6
+ export { FileVectorStore } from './FileVectorStore.js';
7
+ export type { FileVectorStoreConfig } from './FileVectorStore.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vectordb/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAE1E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Vector DB module exports
3
+ */
4
+ export { InMemoryVectorStore } from './InMemoryVectorStore.js';
5
+ export { FileVectorStore } from './FileVectorStore.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vectordb/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@nahisaho/katashiro-rag",
3
+ "version": "2.0.0",
4
+ "description": "RAG and VectorDB integration for KATASHIRO",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "type": "module",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "src"
17
+ ],
18
+ "dependencies": {
19
+ "@nahisaho/katashiro-core": "2.0.0",
20
+ "@nahisaho/katashiro-llm": "2.0.0"
21
+ },
22
+ "devDependencies": {
23
+ "typescript": "^5.6.3",
24
+ "@types/node": "^22.10.0"
25
+ },
26
+ "publishConfig": {
27
+ "access": "public"
28
+ },
29
+ "author": "nahisaho",
30
+ "license": "MIT",
31
+ "scripts": {
32
+ "build": "tsc",
33
+ "test": "vitest run",
34
+ "test:watch": "vitest",
35
+ "clean": "rm -rf dist"
36
+ }
37
+ }
@@ -0,0 +1,127 @@
1
+ /**
2
+ * RAG Engine - RAGシステムのファサード
3
+ *
4
+ * @requirement REQ-RAG-005
5
+ * @design DES-KATASHIRO-003-RAG §3.5
6
+ */
7
+
8
+ import { DocumentChunker } from './chunking/DocumentChunker.js';
9
+ import { Retriever } from './Retriever.js';
10
+ import type {
11
+ Chunk,
12
+ ChunkingConfig,
13
+ Document,
14
+ EmbeddingProvider,
15
+ RAGEngineConfig,
16
+ RetrieverConfig,
17
+ SearchResult,
18
+ VectorStore,
19
+ } from './types.js';
20
+
21
+ /**
22
+ * RAGエンジン
23
+ * ドキュメント処理、インデックス作成、検索を統合したファサード
24
+ */
25
+ export class RAGEngine {
26
+ private chunker: DocumentChunker;
27
+ private retriever: Retriever;
28
+
29
+ constructor(
30
+ embeddingProvider: EmbeddingProvider,
31
+ vectorStore: VectorStore,
32
+ config: RAGEngineConfig = {},
33
+ ) {
34
+ this.chunker = new DocumentChunker(config.chunking);
35
+ this.retriever = new Retriever(embeddingProvider, vectorStore, config.retriever);
36
+ }
37
+
38
+ /**
39
+ * ドキュメントをインデックスに追加
40
+ * チャンキング、埋め込み生成、インデックス追加を一括実行
41
+ */
42
+ async ingest(document: Document): Promise<Chunk[]> {
43
+ const chunks = this.chunker.chunk(document);
44
+ await this.retriever.addDocument(document, chunks);
45
+ return chunks;
46
+ }
47
+
48
+ /**
49
+ * 複数ドキュメントをバッチでインデックスに追加
50
+ */
51
+ async ingestBatch(documents: Document[]): Promise<Chunk[]> {
52
+ const allChunks: Chunk[] = [];
53
+
54
+ for (const document of documents) {
55
+ const chunks = this.chunker.chunk(document);
56
+ allChunks.push(...chunks);
57
+ await this.retriever.addDocument(document, chunks);
58
+ }
59
+
60
+ return allChunks;
61
+ }
62
+
63
+ /**
64
+ * クエリで関連チャンクを検索
65
+ */
66
+ async query(query: string): Promise<SearchResult[]> {
67
+ return this.retriever.search(query);
68
+ }
69
+
70
+ /**
71
+ * 複数クエリで検索
72
+ */
73
+ async queryMultiple(queries: string[]): Promise<SearchResult[]> {
74
+ return this.retriever.searchMultiple(queries);
75
+ }
76
+
77
+ /**
78
+ * チャンクを削除
79
+ */
80
+ async deleteChunk(chunkId: string): Promise<boolean> {
81
+ return this.retriever.deleteChunk(chunkId);
82
+ }
83
+
84
+ /**
85
+ * ドキュメントの全チャンクを削除
86
+ */
87
+ async deleteDocument(documentId: string, chunkCount: number): Promise<number> {
88
+ let deleted = 0;
89
+
90
+ for (let i = 0; i < chunkCount; i++) {
91
+ const chunkId = `${documentId}_chunk_${i}`;
92
+ if (await this.retriever.deleteChunk(chunkId)) {
93
+ deleted++;
94
+ }
95
+ }
96
+
97
+ return deleted;
98
+ }
99
+
100
+ /**
101
+ * チャンキング設定を更新して新しいチャンカーを作成
102
+ */
103
+ updateChunkingConfig(config: ChunkingConfig): void {
104
+ this.chunker = new DocumentChunker(config);
105
+ }
106
+
107
+ /**
108
+ * 検索設定を更新
109
+ */
110
+ updateRetrieverConfig(config: Partial<RetrieverConfig>): void {
111
+ this.retriever.updateConfig(config);
112
+ }
113
+
114
+ /**
115
+ * ドキュメントをチャンキングのみ実行(インデックス追加なし)
116
+ */
117
+ chunk(document: Document): Chunk[] {
118
+ return this.chunker.chunk(document);
119
+ }
120
+
121
+ /**
122
+ * 複数ドキュメントをチャンキングのみ実行
123
+ */
124
+ chunkBatch(documents: Document[]): Chunk[] {
125
+ return this.chunker.chunkBatch(documents);
126
+ }
127
+ }