or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

agents.mdcaches.mdcallbacks.mddocuments.mdembeddings.mdindex.mdlanguage-models.mdmemory-storage.mdmessages.mdoutput-parsers.mdprompts.mdretrievers.mdrunnables.mdtools.mdvectorstores.md
tile.json

vectorstores.mddocs/

0

# Vector Stores

1

2

Document storage and similarity search functionality for retrieval-augmented generation (RAG) applications. Vector stores enable semantic search over document collections using embedding vectors.

3

4

## Capabilities

5

6

### Vector Store

7

8

Abstract base class for all vector store implementations.

9

10

```typescript { .api }

11

/**

12

* Abstract base class for vector storage and similarity search

13

*/

14

abstract class VectorStore {

15

/** Embedding model for generating vectors */

16

embeddings: EmbeddingsInterface;

17

/** Filter type for this vector store */

18

FilterType: object | string;

19

20

constructor(embeddings: EmbeddingsInterface, dbConfig: Record<string, unknown>);

21

22

/** Get vector store type identifier */

23

abstract _vectorstoreType(): string;

24

25

/** Add pre-computed vectors with documents */

26

abstract addVectors(vectors: number[][], documents: Document[], options?: Record<string, unknown>): Promise<string[] | void>;

27

28

/** Add documents (will be embedded automatically) */

29

abstract addDocuments(documents: Document[], options?: Record<string, unknown>): Promise<string[] | void>;

30

31

/** Delete documents by ID or filter */

32

abstract delete?(params: { ids?: string[]; filter?: this["FilterType"] }): Promise<void>;

33

34

/** Similarity search using vectors with scores */

35

abstract similaritySearchVectorWithScore(query: number[], k: number, filter?: this["FilterType"]): Promise<[Document, number][]>;

36

37

/** Similarity search using text query */

38

async similaritySearch(query: string, k?: number, filter?: this["FilterType"], callbacks?: Callbacks): Promise<Document[]>;

39

40

/** Similarity search with relevance scores */

41

async similaritySearchWithScore(query: string, k?: number, filter?: this["FilterType"], callbacks?: Callbacks): Promise<[Document, number][]>;

42

43

/** Maximum marginal relevance search */

44

maxMarginalRelevanceSearch?(query: string, options: MaxMarginalRelevanceSearchOptions<this["FilterType"]>, callbacks?: Callbacks): Promise<Document[]>;

45

46

/** Convert to retriever interface */

47

asRetriever(kOrFields?: number | VectorStoreRetrieverInput<this>, filter?: this["FilterType"], callbacks?: Callbacks, tags?: string[], metadata?: Record<string, unknown>, verbose?: boolean): VectorStoreRetriever<this>;

48

49

/** Create vector store from text documents */

50

static fromTexts(texts: string[], metadatas: Record<string, unknown>[] | Record<string, unknown>, embeddings: EmbeddingsInterface, dbConfig: Record<string, unknown>): Promise<VectorStore>;

51

52

/** Create vector store from Document objects */

53

static fromDocuments(docs: Document[], embeddings: EmbeddingsInterface, dbConfig: Record<string, unknown>): Promise<VectorStore>;

54

}

55

```

56

57

**Usage Examples:**

58

59

```typescript

60

import { Document } from "@langchain/core/documents";

61

import { Embeddings } from "@langchain/core/embeddings";

62

63

// Example vector store implementation

64

class MyVectorStore extends VectorStore {

65

_vectorstoreType(): string {

66

return "my_vectorstore";

67

}

68

69

async addVectors(vectors: number[][], documents: Document[]): Promise<void> {

70

// Store vectors and documents in your database

71

for (let i = 0; i < vectors.length; i++) {

72

await this.db.insert({

73

vector: vectors[i],

74

content: documents[i].pageContent,

75

metadata: documents[i].metadata

76

});

77

}

78

}

79

80

async addDocuments(documents: Document[]): Promise<void> {

81

// Embed documents and store

82

const texts = documents.map(doc => doc.pageContent);

83

const vectors = await this.embeddings.embedDocuments(texts);

84

await this.addVectors(vectors, documents);

85

}

86

87

async similaritySearchVectorWithScore(query: number[], k: number): Promise<[Document, number][]> {

88

// Perform vector similarity search

89

const results = await this.db.similaritySearch(query, k);

90

return results.map(r => [

91

new Document({ pageContent: r.content, metadata: r.metadata }),

92

r.score

93

]);

94

}

95

}

96

97

// Using a vector store

98

const embeddings = new MyEmbeddings();

99

const vectorStore = new MyVectorStore(embeddings, {});

100

101

// Add documents

102

await vectorStore.addDocuments([

103

new Document({ pageContent: "LangChain is a framework for building applications with LLMs" }),

104

new Document({ pageContent: "Vector stores enable semantic search over documents" })

105

]);

106

107

// Search

108

const results = await vectorStore.similaritySearch("What is LangChain?", 2);

109

console.log(results);

110

```

111

112

### Saveable Vector Store

113

114

Vector store that supports persistence to disk.

115

116

```typescript { .api }

117

/**

118

* Vector store with save/load capabilities

119

*/

120

abstract class SaveableVectorStore extends VectorStore {

121

/** Save vector store to directory */

122

abstract save(directory: string): Promise<void>;

123

124

/** Load vector store from directory */

125

static load(directory: string, embeddings: EmbeddingsInterface): Promise<SaveableVectorStore>;

126

}

127

```

128

129

### Vector Store Retriever

130

131

Retriever implementation that wraps a vector store.

132

133

```typescript { .api }

134

/**

135

* Retriever wrapper for vector stores

136

* @template V - Type of the wrapped vector store

137

*/

138

class VectorStoreRetriever<V extends VectorStore = VectorStore> extends BaseRetriever {

139

/** Wrapped vector store */

140

vectorStore: V;

141

/** Number of documents to retrieve */

142

k: number;

143

/** Search type: similarity or maximum marginal relevance */

144

searchType: "similarity" | "mmr";

145

/** Additional search parameters for MMR */

146

searchKwargs?: VectorStoreRetrieverMMRSearchKwargs;

147

/** Filter to apply to search results */

148

filter?: V["FilterType"];

149

150

constructor(fields: VectorStoreRetrieverInput<V> & BaseRetrieverInput);

151

152

/** Core retrieval implementation */

153

async _getRelevantDocuments(query: string, runManager?: CallbackManagerForRetrieverRun): Promise<Document[]>;

154

155

/** Add documents to the underlying vector store */

156

async addDocuments(documents: Document[], options?: Record<string, unknown>): Promise<string[] | void>;

157

}

158

```

159

160

**Usage Examples:**

161

162

```typescript

163

import { VectorStoreRetriever } from "@langchain/core/vectorstores";

164

165

// Create retriever from vector store

166

const retriever = vectorStore.asRetriever({

167

k: 3,

168

searchType: "similarity"

169

});

170

171

// Or with MMR search

172

const mmrRetriever = vectorStore.asRetriever({

173

k: 5,

174

searchType: "mmr",

175

searchKwargs: {

176

fetchK: 10,

177

lambda: 0.5

178

}

179

});

180

181

// Use retriever

182

const documents = await retriever.invoke("What is machine learning?");

183

console.log(documents);

184

185

// Add more documents through retriever

186

await retriever.addDocuments([

187

new Document({ pageContent: "Machine learning enables computers to learn from data" })

188

]);

189

```

190

191

## Search Options

192

193

### Maximum Marginal Relevance Search

194

195

```typescript { .api }

196

interface MaxMarginalRelevanceSearchOptions<FilterType = Record<string, unknown>> {

197

/** Number of documents to return */

198

k: number;

199

/** Number of documents to initially fetch */

200

fetchK?: number;

201

/** Diversity parameter (0 = maximum diversity, 1 = minimum diversity) */

202

lambda?: number;

203

/** Filter to apply to search */

204

filter?: FilterType;

205

}

206

207

interface VectorStoreRetrieverMMRSearchKwargs {

208

/** Number of documents to initially fetch for MMR */

209

fetchK?: number;

210

/** Diversity parameter for MMR algorithm */

211

lambda?: number;

212

}

213

```

214

215

### Vector Store Retriever Configuration

216

217

```typescript { .api }

218

type VectorStoreRetrieverInput<V extends VectorStore> =

219

| {

220

/** Vector store to wrap */

221

vectorStore: V;

222

/** Number of documents to retrieve */

223

k?: number;

224

/** Use similarity search */

225

searchType?: "similarity";

226

/** Filter for search results */

227

filter?: V["FilterType"];

228

}

229

| {

230

/** Vector store to wrap */

231

vectorStore: V;

232

/** Number of documents to retrieve */

233

k?: number;

234

/** Use maximum marginal relevance search */

235

searchType: "mmr";

236

/** MMR search parameters */

237

searchKwargs?: VectorStoreRetrieverMMRSearchKwargs;

238

/** Filter for search results */

239

filter?: V["FilterType"];

240

};

241

```

242

243

## Document Management

244

245

### Add Document Options

246

247

```typescript { .api }

248

type AddDocumentOptions = Record<string, unknown>;

249

250

interface DeleteOptions {

251

/** Document IDs to delete */

252

ids?: string[];

253

/** Filter for documents to delete */

254

filter?: Record<string, unknown>;

255

}

256

```

257

258

**Usage Examples:**

259

260

```typescript

261

// Add documents with options

262

await vectorStore.addDocuments(

263

documents,

264

{

265

batchSize: 100,

266

metadata: { source: "import_2024" }

267

}

268

);

269

270

// Delete documents by ID

271

await vectorStore.delete?.({ ids: ["doc1", "doc2"] });

272

273

// Delete documents by filter

274

await vectorStore.delete?.({

275

filter: { source: "outdated_data" }

276

});

277

```

278

279

## Static Factory Methods

280

281

```typescript { .api }

282

/**

283

* Create vector store from array of texts

284

*/

285

static fromTexts(

286

texts: string[],

287

metadatas: Record<string, unknown>[] | Record<string, unknown>,

288

embeddings: EmbeddingsInterface,

289

dbConfig: Record<string, unknown>

290

): Promise<VectorStore>;

291

292

/**

293

* Create vector store from Document objects

294

*/

295

static fromDocuments(

296

docs: Document[],

297

embeddings: EmbeddingsInterface,

298

dbConfig: Record<string, unknown>

299

): Promise<VectorStore>;

300

```

301

302

**Usage Examples:**

303

304

```typescript

305

// Create from texts

306

const vectorStore1 = await MyVectorStore.fromTexts(

307

["Text 1", "Text 2", "Text 3"],

308

[{ id: 1 }, { id: 2 }, { id: 3 }],

309

embeddings,

310

{ connectionString: "..." }

311

);

312

313

// Create from documents

314

const documents = [

315

new Document({ pageContent: "Content 1", metadata: { type: "article" } }),

316

new Document({ pageContent: "Content 2", metadata: { type: "blog" } })

317

];

318

319

const vectorStore2 = await MyVectorStore.fromDocuments(

320

documents,

321

embeddings,

322

{ connectionString: "..." }

323

);

324

```

325

326

## Types

327

328

```typescript { .api }

329

interface VectorStoreInterface extends Serializable {

330

addVectors(vectors: number[][], documents: Document[], options?: Record<string, unknown>): Promise<string[] | void>;

331

addDocuments(documents: Document[], options?: Record<string, unknown>): Promise<string[] | void>;

332

similaritySearchVectorWithScore(query: number[], k: number, filter?: unknown): Promise<[Document, number][]>;

333

similaritySearch(query: string, k?: number, filter?: unknown): Promise<Document[]>;

334

similaritySearchWithScore(query: string, k?: number, filter?: unknown): Promise<[Document, number][]>;

335

}

336

337

interface VectorStoreRetrieverInterface<V extends VectorStore> extends BaseRetrieverInterface {

338

vectorStore: V;

339

addDocuments(documents: Document[], options?: Record<string, unknown>): Promise<string[] | void>;

340

}

341

```