Skip to content

@happ-integ/vector

Vector Store сервис с автоматическим fallback между провайдерами.

Установка

bash
pnpm add @happ-integ/vector

Провайдеры

ПровайдерОписание
qdrantQdrant Vector Database
pineconePinecone
weaviateWeaviate

Использование

Базовое использование

typescript
import { VectorService } from "@happ-integ/vector";

const vector = new VectorService({
	primary: "qdrant",
	secondary: "pinecone", // fallback при ошибке
	qdrantUrl: env.QDRANT_URL,
	qdrantApiKey: env.QDRANT_API_KEY,
	qdrantCollection: "documents",
	pineconeApiKey: env.PINECONE_API_KEY,
	pineconeIndex: "my-index",
});

Upsert (добавление/обновление векторов)

typescript
await vector.upsert({
  vectors: [
    {
      id: "doc-1",
      values: [0.1, 0.2, ...], // embedding вектор
      metadata: {
        text: "Текст документа",
        source: "file.pdf",
      },
    },
    {
      id: "doc-2",
      values: [0.3, 0.4, ...],
      metadata: { text: "..." },
    },
  ],
});

Query (поиск похожих)

typescript
const results = await vector.query({
  vector: [0.1, 0.2, ...], // query embedding
  topK: 10,
  filter: {
    source: "file.pdf", // опционально
  },
});

// results = [
//   { id: "doc-1", score: 0.95, metadata: { text: "...", source: "..." } },
//   { id: "doc-2", score: 0.87, metadata: { ... } },
// ]

Delete

typescript
// По ID
await vector.deleteByIds({
	ids: ["doc-1", "doc-2"],
});

// По фильтру
await vector.deleteByFilter({
	filter: {
		source: "old-file.pdf",
	},
});

Автоматический Fallback

При ошибке primary провайдера автоматически используется secondary:

typescript
const vector = new VectorService({
	primary: "qdrant",
	secondary: "pinecone",
	// ...
});

// Если Qdrant недоступен → автоматически Pinecone
const results = await vector.query({ vector, topK: 10 });

API

VectorService

typescript
new VectorService(config: IVectorServiceConfig)

Config:

ПараметрТипОписание
primary"qdrant" | "pinecone" | "weaviate"Primary провайдер
secondary"qdrant" | "pinecone" | "weaviate"Fallback (опционально)
qdrantUrlstringQdrant URL
qdrantApiKeystringQdrant API Key
qdrantCollectionstringQdrant collection name
pineconeApiKeystringPinecone API Key
pineconeIndexstringPinecone index name
pineconeNamespacestringPinecone namespace (опционально)
weaviateUrlstringWeaviate URL
weaviateApiKeystringWeaviate API Key
weaviateClassstringWeaviate class name

Методы

upsert(params): Promise<void>

typescript
interface IVectorUpsertParams {
	vectors: Array<{
		id: string;
		values: number[];
		metadata?: Record<string, any>;
	}>;
}

query(params): Promise<IVectorQueryResult[]>

typescript
interface IVectorQueryParams {
	vector: number[];
	topK: number;
	filter?: Record<string, any>;
}

interface IVectorQueryResult {
	id: string;
	score: number;
	metadata?: Record<string, any>;
}

deleteByIds(params): Promise<void>

typescript
interface IVectorDeleteParams {
	ids: string[];
}

deleteByFilter(params): Promise<void>

typescript
interface IVectorFilterParams {
	filter: Record<string, any>;
}

Прямой доступ к провайдерам

typescript
import { QdrantService, PineconeService, WeaviateService } from "@happ-integ/vector";

const qdrant = new QdrantService({
	url: "...",
	apiKey: "...",
	collectionName: "documents",
});