mcpField
S
sap-cloud-sdk-ai-python

sap-cloud-sdk-ai-python

github.com/secondsky開発480562 回インストール3 週間前に更新
リポジトリ

sap-cloud-sdk-ai-python について

SAP AI Core経由でSAP Generative AI HubとOrchestration Serviceを利用するアプリケーション開発向けのPython SDKスキルです。プロバイダー別クライアント、LangChain、ドキュメントグラウンディング、評価、改称後の`sap-ai-sdk-gen`への移行を扱います。

主な機能

  1. 01プロバイダー別のネイティブモデルクライアント
  2. 02LangChainのLLMと埋め込み連携
  3. 03テンプレート処理とフィルタリングのオーケストレーション
  4. 04ドキュメントグラウンディングとプロンプトレジストリ
  5. 05モデル評価とSAP RPT-1対応
  6. 06`sap-ai-sdk-gen`への移行ガイド

活用シーン

  1. 01SAP AI Core経由で対応モデルを呼び出す
  2. 02SAP AI CoreをバックエンドにLangChainアプリを構築
  3. 03オーケストレーションでフィルタリングやマスキングを適用
  4. 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.md
agents/
openai.yaml
references/
getting-started-auth.md
langchain-guide.md
native-clients-guide.md
orchestration-guide.md
troubleshooting.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_hub Python パッケージ(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() を介して認証情報を読み込み、以下の順序で解決します。

  1. キーワード引数 — GenAIHubProxyClient(...) に渡される引数
  2. 環境変数 — AICORE_CLIENT_ID、AICORE_CLIENT_SECRET、 AICORE_AUTH_URL、AICORE_BASE_URL、AICORE_RESOURCE_GROUP
  3. 設定ファイル — $AICORE_HOME/config.json(または AICORE_CONFIG で設定されたパス)。 名前付きプロファイルを選択するには AICORE_PROFILE を使用します。
  4. 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.langchaininit_llm、init_embedding_model、ChatOpenAI など
オーケストレーションgen_ai_hub.orchestration_v2テンプレート処理、フィルタリング、マスキング、グラウンディング
ドキュメントグラウンディングgen_ai_hub.document_groundingPipeline、Vector、Retrieval API
プロンプトレジストリgen_ai_hub.prompt_registryテンプレート管理と設定の保存
評価gen_ai_hub.evaluationsモデル評価の実行とメトリクス
SAP RPT-1gen_ai_hub.proxy.native.sap表形式データの予測(分類、回帰)
プロバイダー別のネイティブクライアント
プロバイダーインポート主なクラス
OpenAIgen_ai_hub.proxy.native.openaiOpenAI、completions、chat、embeddings、responses
Amazon Bedrockgen_ai_hub.proxy.native.amazonSession、ClientWrapper
Google GenAIgen_ai_hub.proxy.native.google_genaiClient
SAP RPT-1gen_ai_hub.proxy.native.sapRPTClient、RPTRequest

対応モデル

Generative AI Hub のカタログには、複数のプロバイダーのモデルが含まれています。正式なモデル ID については、 SAP のモデルカタログ と対象テナントのカタログを確認してください。モデルファミリーの例:

プロバイダーモデルファミリーの例
OpenAIGPT ファミリーのチャット、マルチモーダル、推論、埋め込みモデル
Anthropic(Bedrock 経由)Claude ファミリーのモデル
AmazonNova/Titan ファミリーのモデル
GoogleGemini ファミリーのモデル
MistralMistral ファミリーのモデル
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 sourceAI Core サービスキー/環境変数が不足していますすべての AICORE_* 環境変数を設定するか、設定ファイルのプロファイルを作成してください
No deployment foundAI 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)をすべて確認してください

同梱リソース

リファレンスドキュメント
  1. references/getting-started-auth.md - インストール、認証、設定のセットアップ
  2. references/native-clients-guide.md - OpenAI、Amazon、Google、SAP RPT-1 のネイティブクライアントの使用方法
  3. references/orchestration-guide.md - オーケストレーションサービス:テンプレート処理、フィルタリング、マスキング、グラウンディング、埋め込み
  4. references/langchain-guide.md - LangChain 統合:LLM/埋め込みの初期化、チェーン、構造化出力
  5. references/troubleshooting.md - よくあるエラー、バージョン互換性、generative-ai-hub-sdk からの移行

ドキュメントの参照元

以下の参照元を使用して、このスキルを最新の状態に保ってください。

コメント