---
title: あいまい検索用のベクトルテンプレートを用意する
description: コンテンツをベクトルデータに変換することで、あいまい検索を実装できます。検索キーワードとベクトルデータ化されたコンテンツとのベクトル間距離を利用することで、関連度の高い順にコンテンツをレスポンスします。
---

## 概要
コンテンツをベクトルデータに変換することで、あいまい検索を実装できます。  
検索キーワードとベクトルデータ化されたコンテンツとのベクトル間距離を利用することで、関連度の高い順にコンテンツをレスポンスします。

これにより、使用する単語の揺れがある場合の検索や、文章による検索が可能になります。

本ドキュメントではコンテンツに登録した社内文書を、あいまい検索します。

### 学べること
以下の手順でベクトルテンプレートの設定と確認をします。  
- [コンテンツの準備をする](#コンテンツの準備をする)
- [ベクトルテンプレートを設定する](#ベクトルテンプレートを設定する)
- [動作の確認をする](#動作の確認をする)

## コンテンツの準備をする
### AIを有効にする
[AI/RAG] -> [ベクトルデータ]をクリックします。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/4e47d56cef62185748d29321b79ba79d.png)

AIの項目を有効にして、[更新する]をクリックします。 

![Image from Gyazo](https://t.gyazo.com/teams/diverta/e166aac6a92486724a8354f73504e7d4.png)

### コンテンツ定義を追加する
ベクトル検索をする対象となるコンテンツ定義を登録します。  
[コンテンツ定義一覧](/ja/docs/management/content-structure-topics-group/)の画面から[追加]をクリックします。  
![Image from Gyazo](https://t.gyazo.com/teams/diverta/22303613bafe005dc86e92cf56be990c.png)

以下の内容で設定をします。  

**全般**

|項目|設定|
|:--|:--|
|名前|社内文書|

![Image from Gyazo](https://t.gyazo.com/teams/diverta/c0cc31848ee9ca86944b8b271ceb4c25.png)

**項目設定**

|項目|Slug|項目名|項目設定|
|:--|:--|:--|:--|
|ext_1|なし|WYSIWYG|WYSIWYG|

![Image from Gyazo](https://t.gyazo.com/teams/diverta/6ab3132fe663411dec3d1a0ac224d171.png)

**検索設定**

|項目|設定|
|:--|:--|
|ベクトルデータに変換する|有効にする|
|埋め込みモデル|text-embedding-3-small(OpenAI)|
|キーワードテンプレート(AI/Vector)|デフォルトのまま|

![Image from Gyazo](https://t.gyazo.com/teams/diverta/d0d572136f7e498addbe1371a469374e.png)

設定ができたら[追加する]をクリックしてコンテンツ定義を追加します。 

## ベクトルテンプレートを設定する

### テンプレートの確認
デフォルトでは、以下がベクトルデータへの変換対象となるテンプレートが入力されています。

- topics_id
- slug
- タイトル
- 内容
- カテゴリ
- 全ての拡張項目のテキスト部分

:::info
初期状態に戻したい場合は空で更新することで、自動的にデフォルトテンプレートが入力されます。
:::

### テンプレートの修正

任意の項目をテンプレートから除外したり、関連するメンバー情報をテンプレートに追加したりしたい場合は、テンプレートを修正します。  

本チュートリアルではデフォルトのまま進めます。  

#### リファレンス
利用できる変数は以下の通りです。

|変数名|型|説明|
|:---|:---|:---|
|$details|Object|コンテンツ詳細|
|$ext_config|Object|コンテンツ拡張設定|

Smartyの記述によって出力された文章がベクトルテンプレートとなります。

:::info
修正の例は以下のドキュメントも参照してください。
- [キーワード検索用文字列を用意する](/ja/docs/tutorials/how-to-implement-cutom-body-search/#検索対象文字列テンプレートの修正)
:::


## 動作の確認をする
コンテンツを追加して、Swagger UIから検索結果を確認します。

### コンテンツを追加する

[コンテンツ一覧](/ja/docs/management/content-structure-topics/)の画面から[追加]をクリックします。  
![Image from Gyazo](https://t.gyazo.com/teams/diverta/e09864c6c8ab391e1195725ef096f607.png)

ここでは例として以下の3コンテンツを追加しました。  

**リモートワークガイドライン**  
![Image from Gyazo](https://t.gyazo.com/teams/diverta/b53d8c1ea95d854992ffbe3ea9f093ea.png)

**福利厚生ガイドブック**  
![Image from Gyazo](https://t.gyazo.com/teams/diverta/d442635a9c6af986e7c1a5693102002f.png)

**連絡先**
![Image from Gyazo](https://t.gyazo.com/teams/diverta/cbf70948f9b5c00bc80e8e363f951309.png)

### ベクトルテンプレートを確認する
追加されたコンテンツの編集画面で、[その他] ボタンをクリックして選択肢が表示します。
[ベクトルテンプレート]をクリックすると、出力されたテンプレートを確認することが出来ます。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/d08505df37efae4cb212603d45206128.png)

:::caution
反映完了まで[ベクトルテンプレート]の選択肢が表示されません。
:::

テンプレート、サマリー、インデックスの確認ができます。  

![Image from Gyazo](https://t.gyazo.com/teams/diverta/fae388f9234dcab0edad77198f89c349.png)

### ベクトル検索用エンドポイントを用意する

[エンドポイントの設定方法](/ja/docs/tutorials/configure-endpoint/)を参考に、ベクトル検索用のエンドポイントを作成します。  

今回はパス・モデルを以下のように設定します。
- パス： vector_search
- カテゴリー: コンテンツ
- モデル：Topics, v1
- オペレーション：list
- topics_group_id：42 ([コンテンツ定義を追加する](#コンテンツ定義を追加する)で採番されたID)

![Image from Gyazo](https://t.gyazo.com/teams/diverta/ddde95e949dee04b17b46b06c7660cdb.png)

### Swagger UIで確認する
Swagger UI画面から[ベクトル検索用エンドポイントを用意する]で追加したエンドポイントにリクエストします。  
vector_searchの項目に`在宅勤務`と入力し、Executeをクリックします。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/2c0d3f94fd9d19b3fbed9adc7ecd5104.png)

コンテンツには`在宅勤務`の文字は登録されていませんが、関連度の高いリモートワークガイドラインのドキュメントがリストの最初にレスポンスされます。  

![Image from Gyazo](https://t.gyazo.com/teams/diverta/c6b429093b0f9b33394fdd915e459251.png)

:::tip
vector_distanceの項目が検索文字列とのベクトル間距離を表し、小さい順にレスポンスされます。  
:::

## 関連ドキュメント
- [コンテンツ定義を作成する](/ja/docs/tutorials/adding-a-topics/)
- [拡張項目設定](/ja/docs/management/extra-information/)
- [エンドポイントの設定方法](/ja/docs/tutorials/configure-endpoint/)