このドキュメントでは、PAI-RAG サービスのバージョン v0.4.x について説明します。開発者が PAI-RAG の機能を迅速かつ効率的にアプリケーションに統合できるよう、API 定義、リクエスト例、およびコアコンセプトを提供します。
前提条件:エンドポイントとトークンの取得
API 経由で RAG サービスを呼び出すには、サービスのエンドポイントとトークンを取得する必要があります。すべての API リクエストには、HTTP Authorization ヘッダーに EAS_TOKEN を含める必要があります。
以下の API の説明に記載されている $EAS_SERVICE_URL と $EAS_TOKEN は環境変数です。使用する前に設定する必要があります。次の手順に従って取得してください。
-
PAI コンソールにログインします。ページ上部でリージョンを選択します。次に、目的のワークスペースを選択し、[Elastic Algorithm Service (EAS)] をクリックします。
-
対象のサービス名をクリックし、Basic Information セクションで View Endpoint Information をクリックします。
-
Invocation Method ページで、インターネット/VPC エンドポイント (EAS_SERVICE_URL) とトークン (EAS_TOKEN) を取得します。
重要-
EAS_SERVICE_URL の値から末尾のスラッシュ (/) を削除してください。
-
クライアントがパブリックインターネットにアクセスできる場合は、インターネットエンドポイントを使用してください。
-
クライアントが RAG サービスと同じ Virtual Private Cloud (VPC) 内にある場合にのみ、VPC エンドポイントを使用してください。
-
EAS_SERVICE_URL と EAS_TOKEN を取得したら、それらを環境変数として設定して、後続の API 呼び出しを簡素化します。
export EAS_SERVICE_URL="your_service_endpoint"
export EAS_TOKEN="your_token"
設定が完了すると、後続の curl コマンドで $EAS_SERVICE_URL と $EAS_TOKEN を使用できます。
Chat API
Chat API は、エージェントと Retrieval-Augmented Generation (RAG) をサポートするストリーミングチャットインターフェイスです。OpenAI 互換のチャットプロトコルを拡張し、ナレッジベースの取得、複数ステップの推論、ツール呼び出しなどの高度な機能を備えており、インテリジェントな会話システムや質疑応答ボットの構築に適しています。
Chat API を呼び出す推奨方法は、独自のチャットアプリケーションを設定することです。たとえば、my_assistant という名前のアプリケーションを作成し、そのナレッジベースと Web 検索設定を構成できます。
POST $EAS_SERVICE_URL/v1/chat/completions
説明:チャットリクエストを送信します。model パラメーターを使用して、ナレッジベース、Web 検索、またはその他のリソースにリンクされている可能性のある、事前に設定されたチャットアプリケーションを呼び出します。
リクエストボディ (application/json)
|
パラメーター |
タイプ |
必須 |
説明 |
|
|
String |
はい |
チャットアプリケーションの名前。 |
|
|
Array |
はい |
OpenAI フォーマットのメッセージのリストとしての会話履歴。 |
|
|
Boolean |
いいえ |
応答をストリーミングモードで返すかどうかを指定します。デフォルトは |
レスポンスボディ
応答フォーマットは OpenAI chat.completions API と互換性があります。
OpenAI クライアントの例:
from openai import OpenAI
import os
EAS_ENDPOINT = os.getenv("EAS_SERVICE_URL")
EAS_TOKEN = os.getenv("EAS_TOKEN")
client = OpenAI(
base_url=EAS_ENDPOINT,
api_key=EAS_TOKEN
)
response = client.chat.completions.create(
model="my_assistant", # ご利用のチャットアプリケーション名に置き換えてください
messages=[
{"role": "user", "content": "Hello"}
],
stream=True
)
for chunk in response:
print(chunk.choices[0].delta.content)
ナレッジベース管理
ナレッジベース
新しいナレッジベースを作成し、データチャンキング、埋め込み、取得の設定を構成します。
POST $EAS_SERVICE_URL/v1/config/knowledgebases
リクエスト |
|
リクエストヘッダー |
|
|
Content-Type リクエストのコンテンツタイプ。このパラメーターは |
|
|
Authorization リクエストの認証トークン。EAS_TOKEN を使用します。 |
|
リクエストボディ |
|
|
name ナレッジベースの名前。 |
|
|
description ナレッジベースの説明。 |
|
|
embedding_model 埋め込みモデルの名前またはパス。ローカルモデルとリモートモデルの両方がサポートされています。 |
|
|
chunk_config データチャンキングの設定。 |
|
|
retrieval_config 取得設定。 |
レスポンス例
ナレッジベースのリスト表示
現在のサービス内のナレッジベースのページ分割されたリストを取得します。
GET $EAS_SERVICE_URL/v1/config/knowledgebases?page=1&size=10
リクエスト |
|
リクエストヘッダー |
|
|
Authorization リクエストの認証トークン。EAS_TOKEN の値を使用します。 |
|
クエリパラメーター |
|
|
page 取得するページ番号。デフォルト値は |
|
|
size ページあたりのアイテム数。デフォルト値は |
レスポンス例
ナレッジベースの取得
ナレッジベースの詳細を取得します。
GET $EAS_SERVICE_URL/v1/config/knowledgebases/{kb_id}
リクエスト |
|
ヘッダー |
|
|
Authorization 認証トークン。ご利用の |
|
パスパラメーター |
|
|
kb_id ナレッジベースの一意の識別子。 |
レスポンス例
ナレッジベースの更新
既存のナレッジベースを更新します。
PUT $EAS_SERVICE_URL/v1/config/knowledgebases/{kb_id}
リクエスト |
|
リクエストヘッダー |
|
|
Content-Type このパラメーターは |
|
|
Authorization 認証トークン。EAS_TOKEN を使用します。 |
|
パスパラメーター |
|
|
kb_id ナレッジベースの一意の識別子。 |
|
リクエストボディ |
|
|
リクエストボディは、ナレッジベースを作成する操作と同じパラメーター (name、description、embedding_model、chunk_config、retrieval_config) を受け入れます。 |
レスポンス例
ナレッジベースの削除
指定されたナレッジベースとそのすべてのファイルおよびインデックスを完全に削除します。この操作は元に戻すことができません。注意して実行してください。
DELETE $EAS_SERVICE_URL/v1/config/knowledgebases/{kb_id}
リクエスト |
|
リクエストヘッダー |
|
|
Authorization リクエストの認証トークン。EAS_TOKEN を使用します。 |
|
パスパラメーター |
|
|
kb_id ナレッジベースの一意の識別子。 |
レスポンス例
ファイル管理
ファイルのアップロード
指定されたナレッジベースに 1 つ以上のファイルをアップロードします。この非同期 API はすぐにファイル情報を返します。解析とインデックス作成はバックグラウンドで行われます。サポートされているファイル形式は、PDF、DOCX、TXT です。
POST $EAS_SERVICE_URL/v1/config/knowledgebases/{kb_id}/files
リクエスト |
|
リクエストヘッダー |
|
|
Content-Type リクエストのコンテンツタイプ。このパラメーターは |
|
|
Authorization リクエストの認証トークン。ご利用の EAS_TOKEN を使用します。 |
|
パスパラメーター |
|
|
kb_id ナレッジベースの一意の識別子。 |
|
リクエストボディ |
|
|
files アップロードする 1 つ以上のファイル。 |
レスポンス例
ファイルのリスト表示
指定されたナレッジベースからファイルのページ分割されたリストを取得します。ファイル名と処理ステータスで結果をフィルタリングできます。
GET $EAS_SERVICE_URL/v1/config/knowledgebases/{kb_id}/files
リクエスト |
|
リクエストヘッダー |
|
|
Authorization 認証トークン。$EAS_TOKEN の値を使用します。 |
|
パスパラメーター |
|
|
kb_id ナレッジベースの ID。 |
|
クエリパラメーター |
|
|
query ファイル名のあいまい一致のための検索キーワード。 |
|
|
status 処理ステータスでファイルをフィルタリングします。省略した場合、API はすべてのステータスのファイルを返します。有効な値: |
|
|
page ページ番号。デフォルトは 1 です。 |
|
|
size ページごとに返す結果の数。デフォルトは 10 です。 |
レスポンス例
ファイル詳細の取得
単一ファイルの詳細情報を返します。このエンドポイントを使用して、ファイル処理ステータスをポーリングします。
GET $EAS_SERVICE_URL/v1/config/knowledgebases/{kb_id}/files/{file_id}
リクエスト |
|
ヘッダー |
|
|
Authorization 認証トークン。ご利用の |
|
パスパラメーター |
|
|
kb_id ナレッジベース ID。 |
|
|
file_id ファイル ID。 |
レスポンス例
ファイルの再処理
処理に失敗したファイルや更新されたファイルなどを再処理します。これは非同期操作で、新しい処理タスクを作成し、ファイルステータスを pending にリセットします。
PUT $EAS_SERVICE_URL/v1/config/knowledgebases/{kb_id}/files/{file_id}
リクエスト |
|
ヘッダー |
|
|
Content-Type リクエストのコンテンツタイプ。このパラメーターは |
|
|
Authorization リクエストの認証トークン。EAS_TOKEN を使用します。 |
|
パスパラメーター |
|
|
kb_id ナレッジベースの一意の識別子。 |
|
|
file_id ファイルの一意の識別子。 |
レスポンス例
ファイルの削除
ナレッジベースからファイルとその関連データチャンクおよびインデックスを削除します。
DELETE $EAS_SERVICE_URL/v1/config/knowledgebases/{kb_id}/files/{file_id}
リクエスト |
|
ヘッダー |
|
|
Authorization 認証トークン。ご利用の EAS_TOKEN を使用します。 |
|
パスパラメーター |
|
|
kb_id ナレッジベースの一意の識別子。 |
|
|
file_id ファイルの一意の識別子。 |
レスポンス例
データチャンク管理
ファイルチャンクのリスト表示
指定されたファイルからチャンクのページ分割されたリストを返します。
GET $EAS_SERVICE_URL/v1/config/knowledgebases/{kb_id}/files/{file_id}/chunks?page=1&size=10
リクエスト |
|
リクエストヘッダー |
|
|
Authorization リクエストを認証するためのトークン。EAS_TOKEN を使用します。 |
|
パスパラメーター |
|
|
kb_id ナレッジベースの一意の識別子。 |
|
|
file_id ファイルの一意の識別子。 |
|
クエリパラメーター |
|
|
page ページ番号。デフォルト値は 1 です。 |
|
|
size ページあたりのチャンク数。デフォルト値は 10 です。 |
レスポンス例
チャンクの更新
チャンクのコンテンツまたはステータスを更新します。たとえば、不適切に分割されたテキストを手動で修正したり、チャンクを無効にして取得から除外したりできます。
PUT $EAS_SERVICE_URL/v1/config/knowledgebases/{kb_id}/files/{file_id}/chunks/{chunk_id}
リクエスト |
|
リクエストヘッダー |
|
|
Authorization リクエストの認証トークン。EAS_TOKEN を使用します。 |
|
|
Content-Type application/json |
|
パスパラメーター |
|
|
kb_id ナレッジベースの一意の識別子。 |
|
|
file_id ファイルの一意の識別子。 |
|
|
chunk_id チャンクの一意の識別子。 |
|
リクエストボディ |
|
|
text チャンクの更新されたテキストコンテンツ。 |
|
|
active チャンクがアクティブかどうかを示します。false の場合、チャンクは取得から除外されます。 |
レスポンス例
チャンクの除外
更新操作を使用して、active フィールドを false に設定します。
メタデータ管理
メタデータはドキュメントに構造化された情報を追加し、取得時のより正確なフィルタリングを可能にします。たとえば、IT 部門が 2024 年以降に公開したドキュメントのみを取得できます。
メタデータフィールドの定義
ナレッジベースのメタデータフィールドのスキーマを定義します。これには、名前、値の型、説明が含まれます。
POST $EAS_SERVICE_URL/v1/config/knowledgebases/{kb_id}/metadata
リクエスト |
|
ヘッダー |
|
|
Authorization リクエストの認証トークン。 |
|
|
Content-Type application/json |
|
パスパラメーター |
|
|
kb_id ナレッジベース ID。 |
|
リクエストボディ |
|
|
kb_id ナレッジベース ID。 |
|
|
name メタデータフィールドの表示名。3〜50 文字である必要があります。 |
|
|
value_type フィールドの値の型。string、number、または datetime である必要があります。 |
|
|
description メタデータフィールドの説明。 |
レスポンス例
メタデータのリスト表示
指定されたナレッジベースに定義されているすべてのメタデータフィールドをリスト表示します。
GET $EAS_SERVICE_URL/v1/config/knowledgebases/{kb_id}/metadata
リクエスト |
|
ヘッダー |
|
|
Authorization リクエストの認証トークン。 |
|
パスパラメーター |
|
|
kb_id ナレッジベース ID。 |
レスポンス例
メタデータの削除
指定されたメタデータフィールドをナレッジベースから削除します。
DELETE $EAS_SERVICE_URL/v1/config/knowledgebases/{kb_id}/metadata/{metadata_id}
リクエスト |
|
ヘッダー |
|
|
Authorization リクエストの認証トークン。 |
|
パスパラメーター |
|
|
kb_id ナレッジベース ID。 |
|
|
metadata_id 削除するメタデータフィールドの ID。 |
レスポンス例
ファイルメタデータの設定
特定のファイルのメタデータを設定します。重要:この操作は、ファイルの既存のメタデータをすべて置き換えます。データ損失なしでメタデータを更新するには、まず GET リクエストで現在の値を取得し、それらを変更してから、このリクエストで完全な値のセットを送信します。
POST $EAS_SERVICE_URL/v1/config/knowledgebases/{kb_id}/files/{file_id}/metadata
リクエスト |
|
ヘッダー |
|
|
Authorization リクエストの認証トークン。 |
|
|
Content-Type application/json |
|
パスパラメーター |
|
|
kb_id ナレッジベース ID。 |
|
|
file_id ファイル ID。 |
|
リクエストボディ |
|
|
entries ファイルに設定するメタデータエントリの配列。 |
レスポンス例
Retrieval API
ハイブリッド取得 (テキスト + ベクトル + メタデータフィルタリング)
テキスト、ベクトル、メタデータフィルタリングを組み合わせて、指定されたナレッジベースでハイブリッド取得を実行します。
POST $EAS_SERVICE_URL/v1/retrieval
リクエスト |
|
ヘッダー |
|
|
Authorization リクエストの認証トークン。 |
|
|
Content-Type application/json |
|
リクエストボディ |
|
|
query クエリテキスト。 |
|
|
knowledge_id ナレッジベースの ID。 |
|
|
user_id パーソナライゼーションやロギングに使用されるユーザーの一意の識別子。 |
|
|
metadata_condition メタデータフィルタリングの条件を指定します。これには、 |
|
|
retrieval_setting ナレッジベースのデフォルト設定を上書きするリクエストごとの設定。 |
レスポンス例
コードサンドボックスの設定
サンドボックスの作成または更新
リクエスト |
|
リクエストヘッダー |
|
|
Content-Type リクエストのコンテンツタイプ。このパラメーターは |
|
|
Authorization リクエストの認証トークン。ご利用の EAS_TOKEN を使用します。 |
|
リクエストボディ |
|
|
type サンドボックスのタイプ。現在サポートされているのは Alibaba Cloud Function Compute (FC) サンドボックスのみであるため、これを |
|
|
aliyun_id ご利用の Alibaba Cloud アカウント ID。 |
|
|
interpreter_id コードインタープリター ID。 |
|
|
enabled サンドボックスを有効にするには |
サンドボックス設定の取得
curl -X GET "$EAS_SERVICE_URL/api/config/code_sandbox"
よくある質問 (FAQ) の設定
ベースパス:/v1/config/apps (アプリケーション設定)、/v1/faq-retrieval (FAQ 取得)
すべてのリクエストには権限付与が必要です (例:Authorization: Bearer YOUR_BEARER_TOKEN)。{EAS_SERVICE_URL} を実際のサービス URL に置き換えてください。
FAQ の有効化と設定
アプリケーション更新 API を使用して FAQ を有効にし、設定を適用します。
PUT {EAS_SERVICE_URL}/v1/config/apps/{id}
リクエスト |
|
ヘッダー |
|
|
Content-Type リクエストのコンテンツタイプ。このパラメーターは |
|
|
Authorization リクエストの認証トークン。ご利用の |
|
パスパラメーター |
|
|
id アプリケーションの一意の ID。アプリケーションのクエリ API を使用してこの ID を取得します。 |
|
リクエストボディ |
|
|
app_id アプリケーション ID。 |
|
|
description アプリケーションの説明。 |
|
|
model_id ベースモデルの ID。 |
|
|
kb_ids アプリケーションに関連付けられたナレッジベース ID の配列。 |
|
|
enable_faq FAQ 機能を有効または無効にします。 |
|
|
faq_config FAQ の設定。 |
アプリケーションのクエリ
curl -X GET "$EAS_SERVICE_URL/v1/config/apps?app_id=your_app_id" \
-H "Authorization: Bearer $EAS_TOKEN"
app_id は次のように取得します。コンソールのアプリケーション設定ページで、[チャットアプリケーション] タブを選択し、必須の [App ID] フィールドでアプリケーション ID の値 (例:chatbot) を見つけ、それをリクエストの app_id パラメーターの値として使用します。
FAQ の作成
curl -X POST "$EAS_SERVICE_URL/v1/config/apps/{app_id}/faqs" \
-H "Authorization: Bearer $EAS_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"question": "How do I reset my password?",
"answer": "On the sign-in page, click '\''Forgot Password'\'' and follow the prompts.",
"active": true
}'
FAQ のリスト表示
curl -X GET "$EAS_SERVICE_URL/v1/config/apps/{app_id}/faqs?page=1&size=100" \
-H "Authorization: Bearer $EAS_TOKEN"
FAQ の更新
curl -X PUT "$EAS_SERVICE_URL/v1/config/apps/{app_id}/faqs/{faq_item_id}" \
-H "Authorization: Bearer $EAS_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"question": "How do I change my password?",
"answer": "After signing in, go to Account Settings > Security to change your password.",
"active": true
}'
FAQ の削除
curl -X DELETE "$EAS_SERVICE_URL/v1/config/apps/{app_id}/faqs/{faq_item_id}" \
-H "Authorization: Bearer $EAS_TOKEN"
FAQ ファイルの一括アップロード
このリクエストは multipart/form-data を使用します。files フィールドを使用して 1 つ以上のファイルをアップロードします。オプションで table_config JSON 文字列を提供して、ヘッダーと列のインデックスをマッピングできます。サポートされているファイルタイプは .xlsx と .xls です。
curl -X POST "$EAS_SERVICE_URL/v1/config/apps/{app_id}/faq-files" \
-H "Authorization: Bearer $EAS_TOKEN" \
-F 'files=@/path/to/faq.xlsx' \
-F 'table_config={"header_index_max":0,"question_column_index":0,"answer_column_index":1}'
table_config パラメーター:
-
header_index_max:最後のヘッダー行の 0 から始まるインデックス。単一のヘッダー行の場合、これを 0 に設定します。 -
question_column_index:質問列の 0 から始まるインデックス。 -
answer_column_index:回答列の 0 から始まるインデックス。
FAQ 取得 (スタンドアロン)
会話を開始せずに、クエリに対する FAQ の結果を直接取得します。
curl -X POST "$EAS_SERVICE_URL/v1/faq-retrieval" \
-H "Authorization: Bearer $EAS_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"chatapp_id": "your_app_id",
"query": "User'\''s input query"
}'
任意のリクエストフィールド:user_id と retrieval_setting (例:top_k、similarity_threshold)。retrieval_setting が省略された場合、アプリケーションのデフォルトの FAQ 設定が使用されます。