sap-cloud-sdk-ai-python について
SAP AI Core経由でSAP Generative AI HubとOrchestration Serviceを利用するアプリケーション開発向けのPython SDKスキルです。プロバイダー別クライアント、LangChain、ドキュメントグラウンディング、評価、改称後の`sap-ai-sdk-gen`への移行を扱います。
主な機能
- 01プロバイダー別のネイティブモデルクライアント
- 02LangChainのLLMと埋め込み連携
- 03テンプレート処理とフィルタリングのオーケストレーション
- 04ドキュメントグラウンディングとプロンプトレジストリ
- 05モデル評価とSAP RPT-1対応
- 06`sap-ai-sdk-gen`への移行ガイド
活用シーン
- 01SAP AI Core経由で対応モデルを呼び出す
- 02SAP AI CoreをバックエンドにLangChainアプリを構築
- 03オーケストレーションでフィルタリングやマスキングを適用
- 04`generative-ai-hub-sdk`から移行
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ secondsky/ sap-skills --skill sap-cloud-sdk-ai-pythonインストール後、Claude Code で/sap-cloud-sdk-ai-pythonを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdagents/openai.yamlreferences/getting-started-auth.mdlangchain-guide.mdnative-clients-guide.mdorchestration-guide.mdtroubleshooting.md詳細
SAP Cloud SDK for AI(Python)
パッケージ名の変更:PyPI パッケージ
generative-ai-hub-sdkは非推奨です(v4.12.4 が最終リリースです)。 後継はsap-ai-sdk-genです(2026-06-15 時点の公開 PyPI レジストリの情報では、現在 v6.10.0)。generative-ai-hub-sdkを参照するコードやチュートリアルは、sap-ai-sdk-genに移行してください。インポート名は引き続きgen_ai_hubです。
SAP Generative AI Hub と Orchestration Service 向けの公式 Python SDK です。モデルプロバイダー(OpenAI、Amazon Bedrock、Google GenAI)のネイティブ SDK をラップし、統一された LangChain 統合と完全な Orchestration クライアントを提供します。すべて SAP AI Core 経由で、統一認証を使用してルーティングされます。パッケージの最新性はレジストリで確認済みですが、AI Core の実行時の動作や利用可能なモデルの正確な範囲については、対象テナントでの検証が必要です。
関連スキル
- sap-ai-core:SAP AI Core におけるプラットフォームのセットアップ、デプロイメント、リソースグループ、モデル管理
- sap-cloud-sdk-ai:この SDK に相当する JavaScript/TypeScript および Java 版
- sap-hana-ml:Python での HANA 側の機械学習
- sap-dependency-security:Pip の依存関係管理とアップグレードのパターン
関連する外部スキル
Databricks(ノートブック、Unity Catalog、Spark、SAP Business Data Cloud の SAP Databricks)で作業する場合は、 Databricks agent skills plugin のインストールを検討してください。 インストールのサポートが必要かどうかを尋ねてください。依頼されていない場合は、インストールしないでください。
このスキルを使用する場面
以下の場合に、このスキルを使用してください。
- SAP AI Core/Generative AI Hub 経由で LLM を呼び出す Python アプリケーションを構築する
gen_ai_hubPython パッケージ(sap-ai-sdk-genとしてインストール)を使用する- SAP のプロキシ経由で OpenAI、Amazon Bedrock、または Google GenAI モデルを統合する
- SAP AI Core をバックエンドとして LangChain チェーンを実装する
- Python から Orchestration Service を使用する(テンプレート処理、フィルタリング、マスキング、グラウンディング)
- 非推奨の
generative-ai-hub-sdkからsap-ai-sdk-genにコードを移行する - SAP AI Core 経由で埋め込みを生成する
- 表形式の予測に SAP RPT-1(Relational Pretrained Transformer)を使用する
目次
クイックスタート
ネイティブ OpenAI チャット補完
from gen_ai_hub.proxy.native.openai import chat
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "What is SAP BTP?"}
]
response = chat.completions.create(
model_name="gpt-4o-mini",
messages=messages
)
print(response.choices[0].message.content)
Orchestration Service
from gen_ai_hub.orchestration_v2 import (
OrchestrationConfig, OrchestrationService,
ModuleConfig, PromptTemplatingModuleConfig,
Template, UserMessage, LLMModelDetails
)
config = OrchestrationConfig(
modules=ModuleConfig(
prompt_templating=PromptTemplatingModuleConfig(
prompt=Template(
template=[UserMessage(role="user", content="{{?question}}")]
),
model=LLMModelDetails(name="gpt-4o-mini")
)
)
)
service = OrchestrationService(config=config)
response = service.run(placeholder_values={"question": "What is SAP?"})
print(response.final_result.choices[0].message.content)
インストール
# All providers + LangChain support
pip install "sap-ai-sdk-gen[all]"
# Default (OpenAI only, no LangChain)
pip install sap-ai-sdk-gen
# Specific providers (without LangChain)
pip install "sap-ai-sdk-gen[google, amazon]"
認証
SDK は AICoreV2Client.from_env() を介して認証情報を読み込み、以下の順序で解決します。
- キーワード引数 —
GenAIHubProxyClient(...)に渡される引数 - 環境変数 —
AICORE_CLIENT_ID、AICORE_CLIENT_SECRET、AICORE_AUTH_URL、AICORE_BASE_URL、AICORE_RESOURCE_GROUP - 設定ファイル —
$AICORE_HOME/config.json(またはAICORE_CONFIGで設定されたパス)。 名前付きプロファイルを選択するにはAICORE_PROFILEを使用します。 - VCAP_SERVICES — AI Core サービスがバインドされている場合、Cloud Foundry/Kyma で自動的に使用されます
ローカル開発(環境変数)
export AICORE_CLIENT_ID="sb-..."
export AICORE_CLIENT_SECRET="..."
export AICORE_AUTH_URL="https://<tenant>.authentication.sap.hana.ondemand.com/oauth/token"
export AICORE_BASE_URL="https://api.ai.prod.eu-central-1.aws.ml.hana.ondemand.com/v2"
export AICORE_RESOURCE_GROUP="default"
設定ファイルのプロファイル
# ~/.aicore/config.json
{
"AICORE_CLIENT_ID": "sb-...",
"AICORE_CLIENT_SECRET": "...",
"AICORE_AUTH_URL": "https://<tenant>.authentication.sap.hana.ondemand.com/oauth/token",
"AICORE_BASE_URL": "https://api.ai.prod.eu-central-1.aws.ml.hana.ondemand.com/v2",
"AICORE_RESOURCE_GROUP": "default"
}
認証の詳細な設定とトラブルシューティングについては、references/getting-started-auth.md を参照してください。
利用可能なモジュール
| モジュール | インポートパス | 用途 |
|---|---|---|
| プロキシ(ネイティブクライアント) | gen_ai_hub.proxy.native.* | プロバイダーごとのモデルへの直接アクセス |
| LangChain 統合 | gen_ai_hub.proxy.langchain | init_llm、init_embedding_model、ChatOpenAI など |
| オーケストレーション | gen_ai_hub.orchestration_v2 | テンプレート処理、フィルタリング、マスキング、グラウンディング |
| ドキュメントグラウンディング | gen_ai_hub.document_grounding | Pipeline、Vector、Retrieval API |
| プロンプトレジストリ | gen_ai_hub.prompt_registry | テンプレート管理と設定の保存 |
| 評価 | gen_ai_hub.evaluations | モデル評価の実行とメトリクス |
| SAP RPT-1 | gen_ai_hub.proxy.native.sap | 表形式データの予測(分類、回帰) |
プロバイダー別のネイティブクライアント
| プロバイダー | インポート | 主なクラス |
|---|---|---|
| OpenAI | gen_ai_hub.proxy.native.openai | OpenAI、completions、chat、embeddings、responses |
| Amazon Bedrock | gen_ai_hub.proxy.native.amazon | Session、ClientWrapper |
| Google GenAI | gen_ai_hub.proxy.native.google_genai | Client |
| SAP RPT-1 | gen_ai_hub.proxy.native.sap | RPTClient、RPTRequest |
対応モデル
Generative AI Hub のカタログには、複数のプロバイダーのモデルが含まれています。正式なモデル ID については、 SAP のモデルカタログ と対象テナントのカタログを確認してください。モデルファミリーの例:
| プロバイダー | モデルファミリーの例 |
|---|---|
| OpenAI | GPT ファミリーのチャット、マルチモーダル、推論、埋め込みモデル |
| Anthropic(Bedrock 経由) | Claude ファミリーのモデル |
| Amazon | Nova/Titan ファミリーのモデル |
| Gemini ファミリーのモデル | |
| Mistral | Mistral ファミリーのモデル |
| SAP | 有効化されている場合の RPT ファミリーの表形式データ予測モデル |
主な機能
OpenAI クライアントによるチャット補完
from gen_ai_hub.proxy.native.openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Explain CAP in one paragraph."}]
)
print(response.choices[0].message.content)
ストリーミング
from gen_ai_hub.proxy.native.openai import OpenAI
client = OpenAI()
stream = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Explain SAP CAP."}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")
埋め込み
from gen_ai_hub.proxy.native.openai import embeddings
response = embeddings.create(
input="Every decoding is another encoding.",
model_name="text-embedding-3-small"
)
print(response.data[0].embedding)
LangChain 統合
from gen_ai_hub.proxy.langchain import init_llm, init_embedding_model
llm = init_llm("gpt-4o-mini", max_tokens=300)
result = llm.invoke("What is SAP BTP?")
print(result.content)
embeddings = init_embedding_model("text-embedding-3-small")
vector = embeddings.embed_query("SAP Business Technology Platform")
コンテンツフィルタリング(オーケストレーション経由)
from gen_ai_hub.orchestration_v2 import (
OrchestrationConfig, OrchestrationService,
ModuleConfig, PromptTemplatingModuleConfig,
Template, UserMessage, LLMModelDetails,
FilteringModuleConfig, InputFiltering, OutputFiltering,
AzureContentSafetyInput, AzureContentSafetyOutput, AzureThreshold
)
config = OrchestrationConfig(
modules=ModuleConfig(
prompt_templating=PromptTemplatingModuleConfig(
prompt=Template(template=[UserMessage(role="user", content="{{?question}}")]),
model=LLMModelDetails(name="gpt-4o-mini")
),
filtering=FilteringModuleConfig(
input=InputFiltering(filters=[
AzureContentSafetyInput(hate=AzureThreshold.ALLOW_SAFE, violence=AzureThreshold.ALLOW_SAFE)
]),
output=OutputFiltering(filters=[
AzureContentSafetyOutput(hate=AzureThreshold.ALLOW_SAFE, violence=AzureThreshold.ALLOW_SAFE)
])
)
)
)
service = OrchestrationService(config=config)
response = service.run(placeholder_values={"question": "Explain SAP."})
データマスキング(オーケストレーション経由)
from gen_ai_hub.orchestration_v2 import (
OrchestrationConfig, OrchestrationService,
ModuleConfig, PromptTemplatingModuleConfig,
Template, UserMessage, LLMModelDetails,
MaskingModuleConfig, MaskingProviderConfig,
DPIStandardEntity, MaskingMethod, DataMaskingProviderName
)
config = OrchestrationConfig(
modules=ModuleConfig(
prompt_templating=PromptTemplatingModuleConfig(
prompt=Template(template=[UserMessage(role="user", content="{{?text}}")]),
model=LLMModelDetails(name="gpt-4o-mini")
),
masking=MaskingModuleConfig(
masking_providers=[
MaskingProviderConfig(
type=DataMaskingProviderName.SAP_DATA_PRIVACY_INTEGRATION,
method=MaskingMethod.ANONYMIZATION,
entities=[
DPIStandardEntity(type="profile-email"),
DPIStandardEntity(type="profile-person")
]
)
]
)
)
)
service = OrchestrationService(config=config)
response = service.run(placeholder_values={"text": "Contact [email protected] for details."})
ドキュメントグラウンディング(オーケストレーション経由)
from gen_ai_hub.orchestration_v2 import (
OrchestrationConfig, OrchestrationService,
ModuleConfig, PromptTemplatingModuleConfig,
Template, UserMessage, LLMModelDetails,
GroundingModuleConfig, DocumentGroundingConfig,
DocumentGroundingFilter, DocumentGroundingPlaceholders,
GroundingSearchConfig, DataRepositoryType, GroundingType
)
config = OrchestrationConfig(
modules=ModuleConfig(
prompt_templating=PromptTemplatingModuleConfig(
prompt=Template(template=[UserMessage(role="user", content="{{?question}}")]),
model=LLMModelDetails(name="gpt-4o-mini")
),
grounding=GroundingModuleConfig(
type=GroundingType.DOCUMENT_GROUNDING_SERVICE,
config=DocumentGroundingConfig(
placeholders=DocumentGroundingPlaceholders(
input=["{{?question}}"],
output="{{?context}}"
),
filters=[
DocumentGroundingFilter(
id="my-vector-repo-id",
data_repository_type=DataRepositoryType.VECTOR,
search_config=GroundingSearchConfig(max_chunk_count=5)
)
]
)
)
)
)
service = OrchestrationService(config=config)
response = service.run(placeholder_values={"question": "What is the refund policy?"})
よくあるエラー
| エラー | 原因 | 解決策 |
|---|---|---|
No credentials found in any source | AI Core サービスキー/環境変数が不足しています | すべての AICORE_* 環境変数を設定するか、設定ファイルのプロファイルを作成してください |
No deployment found | AI Core にモデルがデプロイされていません | リソースグループにモデルをデプロイするか、deployment_id を直接使用してください |
AICORE_RESOURCE_GROUP not set | リソースグループが不足しています | AICORE_RESOURCE_GROUP 環境変数を設定するか、クライアントに resource_group を渡してください |
ModuleNotFoundError: No module named 'gen_ai_hub' | 誤ったパッケージがインストールされています | sap-ai-sdk-gen(generative-ai-hub-sdk ではありません)をインストールしてください |
generative_ai_hub_sdk からのインポートに失敗する | 非推奨のパッケージ名を使用しています | パッケージ名が変更されました。gen_ai_hub(sap-ai-sdk-gen 経由でインストール)からインポートしてください |
プロキシクライアントの初期化時に ValidationError が発生する | 認証情報が不完全です | 必須の環境変数 4 つ(AICORE_CLIENT_ID、AICORE_CLIENT_SECRET、AICORE_AUTH_URL、AICORE_BASE_URL)をすべて確認してください |
同梱リソース
リファレンスドキュメント
references/getting-started-auth.md- インストール、認証、設定のセットアップreferences/native-clients-guide.md- OpenAI、Amazon、Google、SAP RPT-1 のネイティブクライアントの使用方法references/orchestration-guide.md- オーケストレーションサービス:テンプレート処理、フィルタリング、マスキング、グラウンディング、埋め込みreferences/langchain-guide.md- LangChain 統合:LLM/埋め込みの初期化、チェーン、構造化出力references/troubleshooting.md- よくあるエラー、バージョン互換性、generative-ai-hub-sdkからの移行
ドキュメントの参照元
以下の参照元を使用して、このスキルを最新の状態に保ってください。
- PyPI:https://pypi.org/pypi/sap-ai-sdk-gen/json — パッケージのメタデータと README
- SDK リファレンス:https://help.sap.com/doc/generative-ai-hub-sdk/CLOUD/en-US/_reference/gen_ai_hub.html
- SAP サンプル:https://github.com/SAP-samples/btp-gen-ai-hub-sdk-samples
- AI Core ヘルプ:https://help.sap.com/docs/sap-ai-core
- 非推奨のパッケージ:https://pypi.org/pypi/generative-ai-hub-sdk/json(移行に関する注意事項)