🔍 Responses APIにおけるRAGサポート
組込み機能OpenAI Responses APIはRAG機能を直接サポートしており、複数の方法で外部知識を取り込むことができます。
🔎 Web検索ツールによるRAG
最新情報取得Web検索ツールはインターネットから最新情報を取得してモデルに提供する最も簡単なRAGの実装方法です。
# Python
import openai
openai.api_key = "YOUR_API_KEY"
response = openai.Response.create(
model="gpt-4.1",
instructions="最新の情報を含めて回答してください",
input="2025年の人工知能トレンドは?",
tools=[{"type": "web_search"}], # Web検索ツールを有効化
temperature=0.7
)
print(response.output_text) # 検索結果を含めた回答が返る
📄 ファイル検索ツールの活用
文書知識アップロードしたファイルから関連情報を検索し、モデルに提供する方法です。PDF、Word、テキストなど様々な形式に対応しています。
# Python - ファイルをアップロードしてIDを取得
file = openai.File.create(
file=open("company_data.pdf", "rb"),
purpose="file-search"
)
# ファイル検索ツールを使用して回答を生成
response = openai.Response.create(
model="gpt-4.1",
instructions="会社の資料に基づいて回答してください",
input="弊社の2024年度の売上目標は?",
tools=[{
"type": "file_search",
"file_ids": [file.id]
}],
temperature=0.3
)
🔢 ベクターストアとの連携
埋め込みベクトルOpenAIのVector Store APIを使用すると、テキストデータをベクトル化して保存・検索できます。これによりセマンティック検索を実現します。
# Python - ベクターストアを作成
vector_store = openai.VectorStore.create(
name="company_knowledge_base"
)
# テキストを埋め込み、ベクターストアに追加
batch = openai.VectorStore.Batch.create(
vector_store_id=vector_store.id,
inputs=[
{"text": "当社の主力商品はAIアシスタントです。"},
{"text": "2024年度の売上目標は前年比120%です。"}
]
)
# ベクターストア検索を使用して回答を生成
response = openai.Response.create(
model="gpt-4.1",
instructions="社内知識ベースに基づいて回答してください",
input="弊社の主力商品と今年度の売上目標を教えてください",
tools=[{
"type": "vector_store",
"vector_store_ids": [vector_store.id]
}],
temperature=0.3
)
⚙️ カスタムRAGパイプラインの実装
外部実装より柔軟なRAGを実現するため、独自の検索システムと連携するカスタム実装も可能です。
# Python - 外部検索システムからデータを取得し、コンテキストとして提供
def custom_rag_pipeline(user_query):
# 1. 外部検索システム(Elasticsearch、Pinecone、自社DBなど)から関連データを取得
search_results = external_search_system.search(user_query)
# 2. 検索結果を整形してコンテキストとして準備
context = format_search_results(search_results)
# 3. コンテキストを含めてResponses APIに送信
response = openai.Response.create(
model="gpt-4.1",
instructions="以下のコンテキスト情報に基づいて回答してください。",
input=f"コンテキスト情報:\n{context}\n\n質問: {user_query}",
temperature=0.3
)
return response.output_text
ユーザークエリを複数の検索クエリに展開し、より広範な情報を取得するテクニック
検索結果を再評価して関連性順に並べ替え、最も重要な情報を優先
長い検索結果を要約して重要なポイントのみを抽出し、トークン消費を節約
📈 マルチステップRAG
高度な手法より高度なRAG実装として、複数のステップや反復を組み込んだ拡張手法が効果的です。
初回の回答を生成後、不確かな点について追加検索を行い回答を洗練させる
複雑なクエリを段階的に処理し、推論ステップごとに必要な情報を検索
複数の検索エンジンや知識ソースを組み合わせ、より多角的な情報を統合
# Python - 反復RAGの実装例
def iterative_rag(user_query):
# 初回の回答を生成
initial_response = openai.Response.create(
model="gpt-4.1",
instructions="質問に答え、不確かな点や追加で調査すべき点を特定してください",
input=user_query,
tools=[{"type": "web_search"}]
)
# 不確かな点を抽出
uncertain_points = extract_uncertain_points(initial_response.output_text)
# 追加情報を検索
additional_context = ""
for point in uncertain_points:
search_results = perform_focused_search(point)
additional_context += f"追加情報({point}): {search_results}\n\n"
# 最終回答を生成
final_response = openai.Response.create(
model="gpt-4.1",
instructions="初回の回答と追加情報を基に、より正確で包括的な回答を提供してください",
input=f"初回回答: {initial_response.output_text}\n\n追加情報: {additional_context}\n\n質問: {user_query}",
temperature=0.3
)
return final_response.output_text
🚀 性能最適化のベストプラクティス
効率化RAGを効率的かつ費用対効果の高い方法で実装するためのベストプラクティスです。
✅ RAG応答の品質向上テクニック
精度向上検索結果を効果的に応答に反映させるための高度なテクニックです。
「提供されたコンテキスト情報を注意深く分析し、関連する事実のみを使用して回答してください」など、明確な指示を与える
検索結果に出典やメタデータを付与し、モデルが情報の信頼性を評価しやすくする
検索結果の信頼性や関連性に基づいて重み付けし、より重要な情報を優先させる
回答の各部分がどの検索結果に基づいているかを示す引用機能を実装
# 指示の最適化例 instructions = """ あなたは正確な情報提供を行うアシスタントです。以下のガイドラインに従ってください: 1. 提供されたコンテキスト情報のみに基づいて回答してください 2. コンテキストに情報がない場合は「その情報はコンテキストに含まれていません」と明示してください 3. 各情報の出典を[出典1]のように明記してください 4. コンテキスト情報の矛盾点があれば指摘してください 5. 確信が持てない場合は、その不確実性を伝えてください """
📋 その他のResponses API連携情報
連携事例RAGパイプラインをさらに強化するための追加情報です。
| 手法/機能 | 概要 | 適用場面 |
|---|---|---|
| ハイブリッドRAG | キーワード検索とセマンティック検索を組み合わせる | 専門用語が多い技術文書 |
| マルチモーダルRAG | テキスト+画像データの検索と生成 | 図表を含む説明が必要な場合 |
| Assistants API移行 | 既存のAssistants APIからResponses APIへの移行 | 新機能活用とコード簡素化 |
| LangChain連携 | 外部LLMフレームワークとの統合 | 複雑なRAGワークフロー実装 |