Oracle Select AI for Python 1.4: ストリーミング、CLI、Webアプリケーションおよび同時プロンプト (2026/06/11)

Oracle Select AI for Python 1.4: ストリーミング、CLI、Webアプリケーションおよび同時プロンプト (2026/06/11)

https://blogs.oracle.com/machinelearning/oracle-select-ai-for-python-1-4-streaming-cli-web-apps-and-concurrent-prompts

投稿者:Mark Hornick | Senior Director, AI and Machine Learning Product Management

Oracle Select AI for Pythonを使用すると、Oracle Select AIを使用してPythonアプリケーション、ノートブック、サービス、およびコマンドラインワークフローを構築できます。以前のリリースでは、Oracle Select AIの機能へのPythonからのアクセスが導入され、エージェントおよびサマリーワークフローが拡張され、同時実行数の多いアプリケーション向けに接続プーリングが追加されました。

Select AI for Python 1.4では、アプリケーション開発に重点が置かれています。具体的には、ストリーミング応答、コマンドラインアクセス、Webフレームワークパターン、同時プロンプト処理、より幅広いプロバイダ例、そして移植性の高いエージェントチームなどが挙げられます。このパッケージは、Oracle AI DatabaseのOracle Select AI機能とPythonエコシステムとの連携をさらに強化しており、プロファイル、資格情報、プロバイダ、会話、ベクトルインデックス、要約、合成データ、AIエージェントワークフローなどが含まれます。

Select AI for Python 1.4 の新機能

Oracle Select AI for Python 1.4には、実験段階からアプリケーション開発へと次のステップに進むのに役立つ、いくつかの機能強化が含まれています。

  • ストリーミングチャットとストリーミング生成 – generate()、chat()、narrate()、explain_sql()、show_sql()、show_prompt() ではストリーミングがサポートされていますが、pandas DataFrame を返す run_sql() ではサポートされていません。
  • コマンドラインインターフェース –オプションのselect-aiコマンドを使用すると、ターミナルから対話型チャット、SQL生成、SQL実行、SQL解説、ナレーション、プロファイル一覧表示、要約、翻訳などの機能を利用できます。
  • Python Webフレームワークパターン –バージョン1.4には、FastAPI、Flask、Django、Starlette、Quart、SanicでSelect AI for Pythonを使用するためのパターンが含まれています。推奨されるパターンは、アプリケーション起動時に1つのプールを作成し、リクエストハンドラ内でOracle Select AI APIを使用し、シャットダウン時にプールを閉じることです。
  • 同時プロンプト処理 –新しい例では、スレッドプール、キュー、asyncio.gather()、asyncio.as_completed()、非同期キュー、および AsyncProfile.run_pipeline() を使用して、独立したプロンプトを同時処理する方法を示しています。
  • エージェントチームのエクスポートとインポート –エージェントチームは、ポータブル仕様としてエクスポートし、同じデータベース、別のデータベース、または別のOracle Select AIサービスにインポートできます。これにより、開発環境、テスト環境、および本番環境間でチーム定義を簡単に移動できます。
  • ネットワークアクセス権限の付与と取り消し –管理ヘルパーを使用すると、Python からデータベースのネットワーク ACL アクセス権限を簡単に付与および取り消すことができます。grant_network_access() と revoke_network_access() を使用すると、データベースユーザーが AI プロバイダのエンドポイント、SMTP サーバー、その他の外部サービスへの発信呼び出しを行うための準備ができます。
  • AIプロバイダーの例を拡張(xAIを含む) –プロバイダーの例では、xAIなどのカスタムプロバイダーエンドポイントを含む、より多くのユースケースが網羅されるようになりました。これは、専用のPythonプロバイダークラスを持たないプロバイダーエンドポイントを使用する場合に便利です。

注目機能1:レスポンシブアプリケーション向けストリーミングチャット

今回のリリースでは、ストリーミング機能が重要な追加要素となっています。これにより、チャットアプリケーション、Webアプリケーション、および長時間実行されるプロンプトのユーザーエクスペリエンスが向上します。アプリケーションは、完全なCLOB応答を待つ代わりに、チャンク単位でデータを処理し、ターミナル、ブラウザ、ファイル、またはサービスに転送できます。


クリップボードにコピーされました
エラー: コピーできませんでした
クリップボードにコピーされました
エラー: コピーできませんでした
import os
import select_ai

user = os.getenv("SELECT_AI_USER")
password = os.getenv("SELECT_AI_PASSWORD")
dsn = os.getenv("SELECT_AI_DB_CONNECT_STRING")

select_ai.connect(user=user, password=password, dsn=dsn)

profile = select_ai.Profile(profile_name="oci_ai_profile")

for chunk in profile.chat(
    prompt="Explain Oracle AI Database in simple terms.",
    stream=True,
    chunk_size=4096,
):
print(chunk, end="")

print()

テキストを返す他のアクションもストリーミングできます。


クリップボードにコピーされました
エラー: コピーできませんでした
クリップボードにコピーされました
エラー: コピーできませんでした
for chunk in profile.generate(
    prompt="Show the SQL for total sales by channel.",
    action=select_ai.Action.SHOWSQL,
    stream=True,
    chunk_size=4096,
):
print(chunk, end="")

ストリーミングは、体感遅延の低減、プログレッシブレンダリング、または生成される大規模なレスポンスにおけるメモリ動作の改善が必要な場合に使用します。

主な機能その2:迅速なワークフローを実現するコマンドラインインターフェース

新しいCLIは、プロファイルのテスト、クイックプロンプトの実行、Oracle Select AIのデモ、およびPythonコードを書かずにセットアップを検証するのに役立ちます。

CLIエクストラをインストールしてください。


クリップボードにコピーされました
エラー: コピーできませんでした
クリップボードにコピーされました
エラー: コピーできませんでした
python -m pip install --upgrade "select_ai[cli]"

接続情報を設定してください:


クリップボードにコピーされました
エラー: コピーできませんでした
クリップボードにコピーされました
エラー: コピーできませんでした
export SELECT_AI_USER=<db_user>
export SELECT_AI_PASSWORD=<db_password>
export SELECT_AI_DB_CONNECT_STRING=<db_connect_string></db_connect_string></db_password></db_user>

既存のプロフィールを使用して、インタラクティブなチャットセッションを開始します。


クリップボードにコピーされました
エラー: コピーできませんでした
クリップボードにコピーされました
エラー: コピーできませんでした
select-ai chat --profile OCI_AI_PROFILE

ターミナルから直接SQLコマンドを実行する:


クリップボードにコピーされました
エラー: コピーできませんでした
クリップボードにコピーされました
エラー: コピーできませんでした
select-ai sql show --profile OCI_AI_PROFILE "count orders by status"

select-ai sql run --profile OCI_AI_PROFILE "show revenue by month"

select-ai sql explain --profile OCI_AI_PROFILE "which customers had the highest sales?"

select-ai sql narrate --profile OCI_AI_PROFILE "summarize sales by region"

プロファイルの一覧表示、テキストやファイルの要約、URIコンテンツの要約、テキストの翻訳も可能です。


クリップボードにコピーされました
エラー: コピーできませんでした
クリップボードにコピーされました
エラー: コピーできませんでした
select-ai profile list

select-ai profile summarize \
  --profile OCI_AI_PROFILE \
  --file notes.txt

select-ai profile translate \
  --profile OCI_AI_PROFILE \
  --source-language English \
  --target-language German \
  "Thank you"

CLIは、アプリケーションで使用する前にプロファイルを検証するための便利な方法です。

注目機能3:接続プールを備えたWebフレームワークパターン

Webアプリケーションの場合、起動時に一度だけ接続プールを作成してください。リクエストハンドラ内で毎回新しいデータベース接続を作成することは避けてください。接続プールを使用することで、接続の頻繁な切り替えが減り、リソース使用量を抑制し、同時リクエストをサポートできます。

本番環境では、データベースのパスワード、ウォレットのパスワード、およびプロバイダーの認証情報を、デプロイプラットフォームのシークレットマネージャーまたは環境設定に保管してください。

以下は、同期ルートハンドラを備えた同期プールを使用したFastAPIの例です。


クリップボードにコピーされました
エラー: コピーできませんでした
クリップボードにコピーされました
エラー: コピーできませんでした
import os
from contextlib import asynccontextmanager

from fastapi import FastAPI
import select_ai

user = os.getenv("SELECT_AI_USER")
password = os.getenv("SELECT_AI_PASSWORD")
dsn = os.getenv("SELECT_AI_DB_CONNECT_STRING")

@asynccontextmanager
async def lifespan(app: FastAPI):
    select_ai.create_pool(
        user=user,
        password=password,
        dsn=dsn,
        min_size=5,
        max_size=10,
        increment=5,
    )
    yield
    select_ai.disconnect()

app = FastAPI(lifespan=lifespan)

@app.get("/chat")
def chat(prompt: str):
    profile = select_ai.Profile(profile_name="oci_ai_profile")
    return {"response": profile.chat(prompt=prompt)}

@app.get("/show_sql")
def show_sql(prompt: str):
    profile = select_ai.Profile(profile_name="oci_ai_profile")
    return {"sql": profile.show_sql(prompt=prompt)}

非同期ルートの場合は、非同期プールとAsyncProfileを使用します。


クリップボードにコピーされました
エラー: コピーできませんでした
クリップボードにコピーされました
エラー: コピーできませんでした
import os
from contextlib import asynccontextmanager

from fastapi import FastAPI
import select_ai

user = os.getenv("SELECT_AI_USER")
password = os.getenv("SELECT_AI_PASSWORD")
dsn = os.getenv("SELECT_AI_DB_CONNECT_STRING")

@asynccontextmanager
async def lifespan(app: FastAPI):
    select_ai.create_pool_async(
        user=user,
        password=password,
        dsn=dsn,
        min_size=5,
        max_size=10,
        increment=5,
    )
    yield
    await select_ai.async_disconnect()

app = FastAPI(lifespan=lifespan)

@app.get("/chat")
async def chat(prompt: str):
    profile = await select_ai.AsyncProfile(
        profile_name="async_oci_ai_profile"
    )
    response = await profile.chat(prompt=prompt)
    return {"response": response}

このパターンはFastAPI以外にも適用できます。ASGIフレームワークの場合は起動フックとシャットダウンフック、Flaskの場合はアプリケーションファクトリまたはプロセス初期化、Djangoの場合はプロセス起動パターンなど、フレームワークのライフサイクルメカニズムを活用してください。

主な機能4:同時プロンプト処理

多くのアプリケーションでは、複数の独立したプロンプトを処理する必要があります。例えば、複数の質問に対するSQLを生成したり、複数のドキュメントを要約したり、ダッシュボード用に複数のNL2SQLチェックを実行したりする場合などです。Oracle Select AI for Python 1.4には、同期アプリケーションと非同期アプリケーションの両方に対応する複数の並行処理パターンが含まれています。

非同期アプリケーションの場合、asyncio.gather() は入力順序を維持しながら独立したプロンプト呼び出しを並行して実行する簡単な方法です。


クリップボードにコピーされました
エラー: コピーできませんでした
クリップボードにコピーされました
エラー: コピーできませんでした
import asyncioimport osimport select_aiuser = os.getenv("SELECT_AI_USER")password = os.getenv("SELECT_AI_PASSWORD")dsn = os.getenv("SELECT_AI_DB_CONNECT_STRING")prompts = [    "How many customers?",    "How many products?",    "How many promotions?",    "List the top 5 customers by sales.",]async def show_sql(profile, prompt):    return await profile.show_sql(prompt=prompt)async def main():    select_ai.create_pool_async(        user=user,        password=password,        dsn=dsn,        min_size=1,        max_size=4,        increment=1,    )    try:        profile = await select_ai.AsyncProfile(            profile_name="async_oci_ai_profile"        )        tasks = [show_sql(profile, prompt) for prompt in prompts]        results = await asyncio.gather(*tasks)        for prompt, sql in zip(prompts, results):            print(f"\nPrompt: {prompt}")            print(sql)    finally:        await select_ai.async_disconnect()asyncio.run(main())

プロンプトとアクションの組み合わせがすべて事前にわかっている場合は、run_pipeline() を使用して、1 回のデータベース往復で複数のプロンプトを送信することもできます。


クリップボードにコピーされました
エラー: コピーできませんでした
クリップボードにコピーされました
エラー: コピーできませんでした
prompt_specifications = [    ("How many customers?", select_ai.Action.SHOWSQL),    ("How many promotions?", select_ai.Action.RUNSQL),    ("Explain how to count products.", select_ai.Action.EXPLAINSQL),]results = await profile.run_pipeline(    prompt_specifications,    continue_on_error=True,)

各結果を準備が整い次第すぐに処理したい場合は、asyncio.as_completed() を使用してください。バックグラウンド処理サービスのように、プロンプトが時間とともに到着する場合は、キューベースのワーカーを使用してください。

バージョン1.4の追加機能強化

ネットワークアクセスヘルパー

Oracle Select AIでは、データベースがAIプロバイダAPIやSMTPサーバーなどの外部エンドポイントを呼び出す必要があることがよくあります。ネットワークアクセスヘルパーを使用すると、管理者はネットワークACLを管理できるデータベースユーザーとして接続した状態で、PythonからこれらのACLを付与および取り消すことができます。


クリップボードにコピーされました
エラー: コピーできませんでした
クリップボードにコピーされました
エラー: コピーできませんでした
import osimport select_aiadmin_user = os.getenv("SELECT_AI_ADMIN_USER")admin_password = os.getenv("SELECT_AI_ADMIN_PASSWORD")dsn = os.getenv("SELECT_AI_DB_CONNECT_STRING")select_ai_user = os.getenv("SELECT_AI_USER")select_ai.connect(    user=admin_user,    password=admin_password,    dsn=dsn,)select_ai.grant_network_access(    users=select_ai_user,    host="smtp.example.com",    privileges=["connect", "smtp"],    lower_port=587,    upper_port=587,)

同じアクセス権を削除するには:


クリップボードにコピーされました
エラー: コピーできませんでした
クリップボードにコピーされました
エラー: コピーできませんでした
select_ai.revoke_network_access(    users=select_ai_user,    host="smtp.example.com",    privileges=["connect", "smtp"],    lower_port=587,    upper_port=587,)

xAIを使用したカスタムプロバイダーエンドポイントの例

Select AI for Pythonには、Anthropic、AWS、Azure OpenAI、Cohere、Google、Hugging Face、OCI Generative AI、およびOpenAI用のプロバイダークラスが含まれています。互換性のあるカスタムエンドポイントには、基本のプロバイダークラスを使用することもできます。xAIの例では、認証情報の作成、プロバイダーエンドポイントの定義、プロファイルの作成、およびSQLの生成方法を示しています。


クリップボードにコピーされました
エラー: コピーできませんでした
クリップボードにコピーされました
エラー: コピーできませんでした
import select_aiselect_ai.create_credential(    credential={        "credential_name": "xai_credential",        "username": "xai",        "password": "<xai_api_key>",    },    replace=True,)xai_profile = select_ai.Profile(    profile_name="xai",    attributes=select_ai.ProfileAttributes(        provider=select_ai.Provider(            provider_endpoint="https://api.x.ai",            model="grok-4-1-fast-reasoning",        ),        credential_name="xai_credential",        object_list=[            {"owner": "SH", "name": "CUSTOMERS"},            {"owner": "SH", "name": "SALES"},            {"owner": "SH", "name": "PRODUCTS"},            {"owner": "SH", "name": "COUNTRIES"},        ],    ),    replace=True,)sql = xai_profile.show_sql(    prompt="How many customers do I have?")print(sql)</xai_api_key>

このパターンは、Oracle AI Databaseでプロファイルと認証情報の管理を維持しながら、互換性のあるカスタムプロバイダエンドポイントを操作したい場合に役立ちます。

エージェントチームのエクスポート/インポート

バージョン1.4では、エージェントチームの移動と再利用が容易になりました。チーム仕様をエクスポートし、変更して、別の環境にインポートすることができます。

クリップボードにコピーされました
エラー: コピーできませんでした
クリップボードにコピーされました
エラー: コピーできませんでした
import jsonfrom select_ai.agent import Teamsource_team = Team.fetch("MOVIE_AGENT_TEAM")specification = json.loads(source_team.export())Team.import_team(    profile_name="LLAMA_4_MAVERICK",    team_name="IMPORTED_MOVIE_AGENT_TEAM",    specification=specification,    force=True,)

オブジェクトストレージの認証情報名と場所を指定することで、オブジェクトストレージへのエクスポートまたはオブジェクトストレージからのインポートも可能です。これは、エージェントチームが複数の環境で繰り返し使用できるデプロイパスが必要な場合に役立ちます。force=True は、競合するコンポーネントがターゲットスキーマ内で置き換えられる可能性があるため、慎重に使用してください。

はじめる

Oracle Select AI for Python 1.4 では、Oracle AI Database および Oracle Autonomous AI Database 上でプロンプトをアプリケーションに変換するために必要なパターンがさらに豊富に用意されています。チャット応答のストリーミング、CLI の起動、FastAPI エンドポイントの追加、またはプロンプトのバッチ処理を並行して行うことで、これらの新機能をすぐに使い始めることができます。

パッケージをインストールまたはアップグレードする:


クリップボードにコピーされました
エラー: コピーできませんでした
クリップボードにコピーされました
エラー: コピーできませんでした
python -m pip install --upgrade select_ai

オプションのCLIをインストールしてください。


クリップボードにコピーされました
エラー: コピーできませんでした
クリップボードにコピーされました
エラー: コピーできませんでした
python -m pip install --upgrade "select_ai[cli]"

リソース

詳細については、以下をご覧ください。

コメント

このブログの人気の投稿

Oracle Database 19cサポート・タイムラインの重要な更新 (2024/11/20)

ミリ秒の問題: BCCグループとOCIが市場データ・パフォーマンスを再定義する方法(AWSに対するベンチマークを使用) (2025/11/13)

Oracle Enterprise Manager 24aiの概要 (2024/12/18)