Typesense
このセクションでは、ドキュメントの埋め込みを保存し、類似性検索を実行するための TypesenseVectorStore
のセットアップについて説明します。
Typesense (英語) Typesense は、直感的な開発者エクスペリエンスを提供しながら、50 ミリ秒未満の即時検索に最適化されている、オープンソースの型ミス耐性のある検索エンジンです。
前提条件
Typesense インスタンス
Typesense クラウド (英語) (推奨)
Docker (英語) イメージ typesense/typesense:latest
EmbeddingModel
インスタンスを使用してドキュメントの埋め込みを計算します。いくつかのオプションが利用可能です:必要に応じて、EmbeddingModel が
TypesenseVectorStore
によって保存される埋め込みを生成するための API キー。
自動構成
Spring AI は、Typesense Vector Sore の Spring Boot 自動構成を提供します。これを有効にするには、プロジェクトの Maven pom.xml
ファイルに次の依存関係を追加します。
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-typesense-spring-boot-starter</artifactId>
</dependency>
または、Gradle build.gradle
ビルドファイルに保存します。
dependencies {
implementation 'org.springframework.ai:spring-ai-typesense-spring-boot-starter'
}
Spring AI BOM をビルドファイルに追加するには、"依存関係管理" セクションを参照してください。 |
マイルストーンおよび / またはスナップショットリポジトリをビルドファイルに追加するには、リポジトリセクションを参照してください。 |
さらに、設定済みの EmbeddingModel
Bean が必要です。詳細については、"EmbeddingModel" セクションを参照してください。
必要な Bean の例を次に示します。
@Bean
public EmbeddingModel embeddingModel() {
// Can be any other EmbeddingModel implementation.
return new OpenAiEmbeddingModel(new OpenAiApi(System.getenv("SPRING_AI_OPENAI_API_KEY")));
}
Typesense に接続するには、インスタンスのアクセス詳細を提供する必要があります。簡単な設定は、Spring Boot の application.yml を介して提供できます。
spring:
ai:
vectorstore:
typesense:
collectionName: "vector_store"
embeddingDimension: 1536
client:
protocl: http
host: localhost
port: 8108
apiKey: xyz
デフォルト値と構成オプションについては、ベクトルストアの構成パラメーターのリストを参照してください。
これで、Typesense ベクトルストアをアプリケーションに自動接続して使用できるようになりました。
@Autowired VectorStore vectorStore;
// ...
List <Document> documents = List.of(
new Document("Spring AI rocks!! Spring AI rocks!! Spring AI rocks!! Spring AI rocks!! Spring AI rocks!!", Map.of("meta1", "meta1")),
new Document("The World is Big and Salvation Lurks Around the Corner"),
new Document("You walk forward facing the past and you turn back toward the future.", Map.of("meta2", "meta2")));
// Add the documents to Typesense
vectorStore.add(documents);
// Retrieve documents similar to a query
List<Document> results = vectorStore.similaritySearch(SearchRequest.query("Spring").withTopK(5));
構成プロパティ
Spring Boot 構成で次のプロパティを使用して、Typesense ベクトルストアをカスタマイズできます。
プロパティ | 説明 | デフォルト値 |
---|---|---|
| HTTP プロトコル |
|
| ホスト名 |
|
| ポート |
|
| ApiKey |
|
| 必要なスキーマを初期化するかどうか |
|
| コレクション名 |
|
| 埋め込みディメンション |
|
メタデータのフィルタリング
TypesenseVectorStore
では、汎用的でポータブルなメタデータフィルターも活用できます。
例: 次のいずれかのテキスト式言語を使用できます。
vectorStore.similaritySearch(
SearchRequest
.query("The World")
.withTopK(TOP_K)
.withSimilarityThreshold(SIMILARITY_THRESHOLD)
.withFilterExpression("country in ['UK', 'NL'] && year >= 2020"));
または、プログラムで DSL という式を使用します。
FilterExpressionBuilder b = new FilterExpressionBuilder();
vectorStore.similaritySearch(
SearchRequest
.query("The World")
.withTopK(TOP_K)
.withSimilarityThreshold(SIMILARITY_THRESHOLD)
.withFilterExpression(b.and(
b.in("country", "UK", "NL"),
b.gte("year", 2020)).build()));
移植可能なフィルター式は自動的に Typesense 検索フィルター (英語) に変換されます。例: 次のポータブルフィルター式:
country in ['UK', 'NL'] && year >= 2020
Typesense フィルターに変換されます:
country: ['UK', 'NL'] && year: >=2020
手動構成
自動構成を使用しない場合は、Typesense ベクトルストアを手動で構成できます。Typesense ベクトルストアと Jedis の依存関係を追加します。
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-typesense</artifactId>
</dependency>
Spring AI BOM をビルドファイルに追加するには、"依存関係管理" セクションを参照してください。 |
次に、Spring 構成で TypesenseVectorStore
Bean を作成します。
@Bean
public VectorStore vectorStore(Client client, EmbeddingModel embeddingModel) {
TypesenseVectorStoreConfig config = TypesenseVectorStoreConfig.builder()
.withCollectionName("test_vector_store")
.withEmbeddingDimension(embeddingModel.dimensions())
.build();
return new TypesenseVectorStore(client, embeddingModel, config);
}
@Bean
public Client typesenseClient() {
List<Node> nodes = new ArrayList<>();
nodes
.add(new Node("http", typesenseContainer.getHost(), typesenseContainer.getMappedPort(8108).toString()));
Configuration configuration = new Configuration(nodes, Duration.ofSeconds(5), "xyz");
return new Client(configuration);
}
|
次に、メインコードでいくつかのドキュメントを作成します。
List<Document> documents = List.of(
new Document("Spring AI rocks!! Spring AI rocks!! Spring AI rocks!! Spring AI rocks!! Spring AI rocks!!", Map.of("country", "UK", "year", 2020)),
new Document("The World is Big and Salvation Lurks Around the Corner", Map.of()),
new Document("You walk forward facing the past and you turn back toward the future.", Map.of("country", "NL", "year", 2023)));
次に、ドキュメントをベクトルストアに追加します。
vectorStore.add(documents);
最後に、クエリに似たドキュメントを取得します。
List<Document> results = vectorStore.similaritySearch(
SearchRequest
.query("Spring")
.withTopK(5));
すべてがうまくいけば、"Spring AI rocks!!" というテキストを含むドキュメントを取得する必要があります。
ドキュメントが期待どおりの順序で取得されない場合、または検索結果が期待どおりでない場合は、使用している埋め込みモデルを確認してください。 埋め込みモデルは検索結果に大きな影響を与える可能性があります (つまり、データがスペイン語の場合は、スペイン語または多言語の埋め込みモデルを使用するようにしてください)。 |