Поделиться через


Использование соединителя хранилища векторов JDBC

Обзор

Векторное хранилище JDBC — это функция, предназначенная для Java, доступная только для приложений Java.

Обзор

Векторное хранилище JDBC — это функция, предназначенная для Java, доступная только для приложений Java.

Обзор

Соединитель хранилища векторов JDBC можно использовать для доступа к данным в базах данных SQL и управления ими. Соединитель имеет следующие характеристики.

Область функций Поддержка
Коллекция сопоставляется с Таблицы базы данных SQL
Поддерживаемые источники данных SQL
  • PostgreSQL
  • MySQL
  • SQLite
  • HSQLDB
Поддерживаемые типы свойств ключей Строка
Поддерживаемые типы свойств данных
  • Строка
  • int, целое число
  • long, Long
  • double, Double
  • float, Float
  • boolean, Boolean
  • OffsetDateTime
Поддерживаемые типы свойств вектора Список<с плавающей запятой>
Поддерживаемые типы индексов
  • PostgreSQL: Hnsw, IVFlat, Flat
  • MySQL: плоская
  • SQLite: Flat
  • HSQLDB: неструктурированный
Поддерживаемые функции расстояния
  • CosineDistance
  • DotProductSimilarity
  • EuclideanDistance
Поддержка нескольких векторов в записи Да
поддерживается isFilterable? Да
поддерживается лиFullTextSearchable? No
поддерживается storageName? Нет, используйте @JsonProperty вместо этого.

Ограничения

PostgreSQL используется pgvector для индексирования и поиска векторов, уникально предлагая приблизительные возможности поиска. Другие поставщики не поддерживают индексирование, предоставляя только исчерпывающий векторный поиск.

Начало работы

Добавьте последнюю версию соединителя JDBC Семантического ядра в проект Maven, добавив в проект pom.xmlMaven следующую зависимость:

<dependency>
    <groupId>com.microsoft.semantic-kernel</groupId>
    <artifactId>semantickernel-data-jdbc</artifactId>
    <version>[LATEST]</version>
</dependency>

Затем можно создать экземпляр векторного хранилища с помощью JDBCVectorStore класса, имеющего источник данных в качестве параметра.

import com.microsoft.semantickernel.data.jdbc.JDBCVectorStore;
import com.microsoft.semantickernel.data.jdbc.JDBCVectorStoreOptions;
import com.microsoft.semantickernel.data.jdbc.JDBCVectorStoreRecordCollection;
import com.microsoft.semantickernel.data.jdbc.JDBCVectorStoreRecordCollectionOptions;
import com.microsoft.semantickernel.data.jdbc.mysql.MySQLVectorStoreQueryProvider;
import org.postgresql.ds.PGSimpleDataSource;

public class Main {
    public static void main(String[] args) {
        // Configure the data source
        PGSimpleDataSource dataSource = new PGSimpleDataSource();
        dataSource.setUrl("jdbc:postgresql://localhost:5432/sk");
        dataSource.setUser("postgres");
        dataSource.setPassword("root");

        // Build a query provider
        // Other available query providers are PostgreSQLVectorStoreQueryProvider, SQLiteVectorStoreQueryProvider
        // and HSQDBVectorStoreQueryProvider
        var queryProvider = MySQLVectorStoreQueryProvider.builder()
                .withDataSource(dataSource)
                .build();

        // Build a vector store
        var vectorStore = JDBCVectorStore.builder()
                .withDataSource(dataSource)
                .withOptions(JDBCVectorStoreOptions.builder()
                        .withQueryProvider(queryProvider)
                        .build())
                .build();
    }
}

Вы также можете создать коллекцию напрямую.

var collection = new JDBCVectorStoreRecordCollection<>(
    dataSource,
    "skhotels",
    JDBCVectorStoreRecordCollectionOptions.<Hotel>builder()
        .withRecordClass(Hotel.class)
        .build()
);