Documentation Index
Fetch the complete documentation index at: https://docs.jinba.io/llms.txt
Use this file to discover all available pages before exploring further.
Jinbaベクトル検索は、ベクトル埋め込みを使用してナレッジベースの意味検索機能を提供します。このツールはOpenAIのtext-embedding-3-largeを使用してクエリをベクトル化し、類似度スコアに基づいてナレッジベースから関連データを取得し、強力なRAG(Retrieval-Augmented Generation)機能を提供します。
主要機能
- 意味検索: 完全一致だけでなく、概念的に類似したコンテンツを検索
- ナレッジベース統合: アップロードされたドキュメントとファイル全体を検索
- 類似度スコア: 類似度の閾値によって結果をフィルタリング
- 設定可能な結果: 返される結果の数を制御
- RAGサポート: 質問応答と情報取得ワークフローの構築に最適
このツールは、ナレッジベースにアクセスするためにJinba APIトークンが必要です。
必要な設定:
token (string): Jinba APIトークン(シークレットとして保存)
入力パラメータ
| パラメータ | 型 | 必須 | デフォルト | 説明 |
|---|
query | string | はい | - | 意味検索のための検索クエリ |
knowledgeBaseId | string | はい | - | 検索するナレッジベースのID |
topK | number | いいえ | 3 | 返すトップ結果の数(1-50) |
threshold | number | いいえ | 0.3 | 結果をフィルタリングする類似度の閾値(0-1) |
出力構造
以下の情報を含む検索結果の配列を返します:
| フィールド | 型 | 説明 |
|---|
chunk | object | ID、ファイルID、コンテンツ、メタデータを含むコンテンツチャンク |
score | number | 類似度スコア(0-1、高いほど類似) |
file | object | ファイル名とコンテンツタイプを含むファイル情報 |
query | string | 元の検索クエリ |
totalResults | number | 見つかった結果の総数 |
例: ドキュメント Q&A システム
- id: search_knowledge_base
name: search_knowledge_base
tool: JINBA_VECTOR_SEARCH
config:
- name: token
value: "{{secrets.JINBA_API_TOKEN}}"
input:
- name: query
value: "当社の返品ポリシーは何ですか?"
- name: knowledgeBaseId
value: "{{secrets.KNOWLEDGE_BASE_ID}}"
- name: topK
value: 5
- name: threshold
value: 0.4
- id: generate_answer
name: generate_answer
tool: OPENAI_INVOKE
config:
- name: version
value: gpt-4
input:
- name: prompt
value: |
ナレッジベースからの以下の検索結果に基づいて、返品ポリシーに関するユーザーの質問に答えてください。
検索結果:
{{#each steps.search_knowledge_base.results}}
**ソース: {{file.filename}}**
内容: {{chunk.content}}
類似度: {{score}}
{{/each}}
質問: {{steps.search_knowledge_base.query}}
上記の検索結果に基づいて包括的な回答を提供してください。
例: リサーチアシスタント
- id: research_query
name: research_query
tool: INPUT_TEXT
input:
- name: description
value: "研究質問を入力してください"
- id: search_research_base
name: search_research_base
tool: JINBA_VECTOR_SEARCH
config:
- name: token
value: "{{secrets.JINBA_API_TOKEN}}"
input:
- name: query
value: "{{steps.research_query.result}}"
- name: knowledgeBaseId
value: "{{secrets.RESEARCH_KB_ID}}"
- name: topK
value: 10
- name: threshold
value: 0.3
- id: analyze_findings
name: analyze_findings
tool: PYTHON_SANDBOX_RUN
input:
- name: code
value: |
import json
results = {{steps.search_research_base.results}}
print("=== 研究結果 ===")
print(f"クエリ: {results['query']}")
print(f"合計結果: {results['totalResults']}")
print()
# ソースファイルごとに結果をグループ化
sources = {}
for result in results['results']:
filename = result['file']['filename']
if filename not in sources:
sources[filename] = []
sources[filename].append({
'content': result['chunk']['content'][:200] + "...",
'score': result['score']
})
print("=== 見つかったソース ===")
for filename, chunks in sources.items():
print(f"\n📄 {filename}")
for i, chunk in enumerate(chunks[:3]): # ファイルごとに上位3つのチャンク
print(f" {i+1}. スコア: {chunk['score']:.3f}")
print(f" {chunk['content']}")
# 平均類似度を計算
avg_score = sum(r['score'] for r in results['results']) / len(results['results'])
print(f"\n📊 平均類似度: {avg_score:.3f}")
- id: synthesize_response
name: synthesize_response
tool: ANTHROPIC_INVOKE
config:
- name: token
value: "{{secrets.ANTHROPIC_API_KEY}}"
input:
- name: prompt
value: |
あなたは研究アシスタントです。以下の検索結果を包括的な回答に統合してください。
元のクエリ: {{steps.search_research_base.query}}
検索結果:
{{#each steps.search_research_base.results}}
**ソース: {{file.filename}}** (類似度: {{score}})
{{chunk.content}}
---
{{/each}}
以下を提供してください:
1. 質問への直接的な回答
2. 複数のソースからの重要な洞察
3. 見つかった矛盾する情報
4. さらなる研究への提案
例: コンテンツ推薦
- id: get_user_interests
name: get_user_interests
tool: INPUT_TEXT
input:
- name: description
value: "興味のあるトピックやコンテンツを説明してください"
- id: find_related_content
name: find_related_content
tool: JINBA_VECTOR_SEARCH
config:
- name: token
value: "{{secrets.JINBA_API_TOKEN}}"
input:
- name: query
value: "{{steps.get_user_interests.result}}"
- name: knowledgeBaseId
value: "{{secrets.CONTENT_KB_ID}}"
- name: topK
value: 8
- name: threshold
value: 0.25
- id: format_recommendations
name: format_recommendations
tool: PYTHON_SANDBOX_RUN
input:
- name: code
value: |
results = {{steps.find_related_content.results}}
print("🔍 **コンテンツ推薦**")
print(f"基準: *{results['query']}*\n")
recommendations = []
for i, result in enumerate(results['results'][:5], 1):
chunk = result['chunk']
file_info = result['file']
score = result['score']
# 最初の文または100文字を抽出
content_preview = chunk['content'][:100].split('.')[0] + "..."
recommendations.append({
'rank': i,
'title': file_info['filename'],
'preview': content_preview,
'relevance': f"{score:.1%}",
'content_type': file_info['contentType']
})
for rec in recommendations:
print(f"**{rec['rank']}. {rec['title']}**")
print(f" 📋 {rec['preview']}")
print(f" 🎯 関連度: {rec['relevance']}")
print(f" 📄 タイプ: {rec['content_type']}")
print()
if len(results['results']) == 0:
print("関連するコンテンツが見つかりませんでした。検索語を調整するか、閾値を下げてみてください。")
ベストプラクティス
クエリ最適化
- 自然言語を使用: 人間に尋ねるような自然な文でクエリを作成
- 具体的に: より具体的なクエリの方が良い結果が得られることが多い
- コンテキストを含める: 関連するキーワードとコンテキスト語を追加
閾値の選択
- 0.7-1.0: 非常に高い類似度、完全または準完全一致
- 0.4-0.7: 高い類似度、密接に関連するコンテンツ
- 0.2-0.4: 中程度の類似度、潜在的に関連するコンテンツ
- 0.0-0.2: 低い類似度、間接的に関連するコンテンツを含む可能性
パフォーマンスのコツ
- topKを制限: 必要以上に多くの結果を取得しない
- 閾値を調整: 高い閾値 = より少ない、より関連性の高い結果
- メタデータを活用: 追加のフィルタリングにチャンクメタデータを活用
ナレッジベースの設定
ベクトル検索を使用する前に、ナレッジベースに関連ドキュメントが含まれていることを確認してください:
- ドキュメントのアップロード: PDF、テキストファイル、その他のサポートされる形式を追加
- 処理: ドキュメントのチャンク化とベクトル化の時間を確保
- クエリのテスト: データを理解するためにシンプルなクエリから開始
- 反復: 結果に基づいてクエリと閾値を調整
使用事例
- カスタマーサポート: ユーザーの質問に関連する文書を検索
- 研究アシスタント: 関連する研究論文や文書を発見
- コンテンツ発見: 類似の記事やリソースを推薦
- FAQ自動化: 一般的な質問に自動回答
- ドキュメント分析: 大きなドキュメントセットから特定情報を検索
- ナレッジマネジメント: 組織知識への迅速なアクセス
- 法的研究: 契約書や法的文書の検索
- 製品情報: 技術仕様やマニュアルの検索