登録して招待リンクを共有すると、動画再生報酬と紹介報酬を獲得できます。

検索結果 API安全
API安全 コミュニティ
1つのキーワードが1つのコミュニティです。
コミュニティ作成
アカウント
見つかりません
API安全 を含む検索結果
你开着交易机器人去睡觉,醒来发现它还在下单,只是下单的人,已经不是你了。 日本 IT 巨头 GMO Internet 有个云主机服务「お名前.com デスクトップクラウド」,很多人租它的 Windows 服务器,24 小时挂 MT4、MT5 跑外汇自动交易。 10/19,有客户反映异常。 10/20,GMO 在部分服务器上发现第三方植入的恶意程序。 10/21 凌晨 4 点,所有方案的服务器开始逐台关机。 可能受影响的服务器26,739 台,但关机已经晚了,这些服务器里存着用户在券商的登录信息。黑客拿到之后,直接登录别人的账户乱下单。 TBS 采访了一位 44 岁、炒外汇 10 年的男性: 大约 2 秒,亏掉约 416 万日元。 他说:「余额归零了。」 黑客自己声称已经「破坏」了 66 亿日元的账户,后来又改口说 77 亿,这是攻击方的说法,没有第三方证实,但真正的重头戏,是后面的勒索。 10/21,第一封勒索信5000 万美元,用加密货币付,期限当天下午 5 点。GMO 拒绝。 之后黑客又开价 100 万美元,只要 10/27 中午前付钱,就不对用户放勒索病毒,同时还声称能对海内外 70 多家券商、外汇公司的账户下手。 金额只剩第一次的 2%,GMO 还是不付。理由是,付了也不能保证资料会被删掉,结果今天中午期限一过,大约 12 点半,网上开始出现据称是一名 GMO 用户的个人资料,真假还没有被证实。 火已经烧到股市和政府,GMO 集团股价周一收跌超过 15%,日本金融大臣片山皋月说,已有 5 家外汇公司回报客户受害,券商 FXTF 直接封锁所有海外 IP 登录 MT4、MT5 GMO 还请求政府动用「主动网络防御」权限去瘫痪黑客的基础设施,这项权限 10/1 才刚生效。 补偿方案:每位现有用户 5000 日元,经 GMO 确认的未经授权交易造成的已实现亏损由 GMO 负担,转用 GMO 另一项云服务的用户可以免费用 6 个月。 那跟币圈有什么关系?第一,GMO 也碰交易所,它在泰国运营、拿到泰国牌照的 EX,上周才刚披露被收购。 第二,也是最重要的, 币圈很多人也把量化机器人、交易所 API Key 放在云服务器上,这次被偷的,就是这种「替你下单的钥匙」 机器人可以 24 小时替你盯盘,也可能 24 小时替黑客打工,你的 API Key 现在还开着提现权限吗?有没有绑 IP 白名单? #GMO# #黑客勒索# #量化交易# #API安全#
もっと見る
便利だけど知られていないGemini APIの機能 🔑 ブラウザからLive APIに直接つなぎたい。でもAPIキーは露出させたくない。 Geminiの「エフェメラルトークン(Ephemeral tokens)」は、短命の使い捨てトークンを発行してクライアントから安全にLive APIへ接続する仕組みです。メインのAPIキーをフロントエンドに渡す必要がなくなります。 📌 タイトル:エフェメラルトークン(Ephemeral tokens) 🔗 URL: 🧩 概要 Live API(リアルタイム音声/動画)をブラウザやモバイルアプリから直接使う場合、APIキーをクライアントに渡すとセキュリティリスクになります。Ephemeral tokensは、サーバー側でメインAPIキーを使って短命トークンを発行し、クライアントはそのトークンで接続する仕組みです。トークンは短時間で失効するため、万が一漏洩しても被害を最小限に抑えられます。 🛠 使い方 バックエンドサーバーでGemini APIにエフェメラルトークンの発行をリクエストします。返されたトークンをフロントエンドに渡し、クライアントはそのトークンでLive APIのWebSocketに接続。トークンは数分で失効するため、必要に応じて再発行する仕組みを組み込みます。 🏗 本番システムへの組み込み方 ・ブラウザ音声チャット:Webアプリからリアルタイム音声会話を提供。サーバーを中継せず直接接続することで低レイテンシを実現。 ・モバイル音声アシスタント:スマホアプリから直接Live APIに接続。APIキーはサーバーに保持したまま。 ・ライブ配信連携:配信プラットフォームのフロントエンドからリアルタイム翻訳やキャプション生成。 ・対面接客AI:タブレット端末からLive APIに接続して、店頭での音声アシスタントを構築。 💡 ユースケース 🎙️ ブラウザからのリアルタイム音声チャット 📱 モバイルアプリの音声AI連携 🎬 ライブ配信のリアルタイム処理 🏪 店頭タブレットの音声アシスタント ⚠️ 注意点 トークンの有効期限は短いため、長時間セッションでは途中でトークンの再発行が必要です。トークン発行のバックエンドは必ず認証を入れ、不正なトークン発行を防いでください。また、トークン発行自体のレート制限も考慮しましょう。 ✨ クライアント直接接続でレイテンシを下げつつ、APIキーの安全性も確保。リアルタイムAI体験の構築に欠かせない仕組みです。 #Gemini# #LLM#
もっと見る
便利だけど知られていないClaude APIの機能 🔒 ツールの引数が時々スキーマと合わない...そんな不安を仕組みで解消しませんか? ClaudeのStrict Tool Use(厳密なツール使用)は、ツール定義にstrict: trueを付けることで、ツール呼び出しが常にスキーマと正確に一致することを保証する機能です。引数の型ズレや必須フィールドの欠落を構造的に防げます。 📌 タイトル:Strict Tool Use(厳密なツール使用) 🔗 URL: 🧩 概要 モデルがツールを呼び出すとき、引数がスキーマと一致しないことがまれに発生します。必須フィールドの欠落、型の不一致、余分なフィールドの追加など。Strict Tool Useを有効にすると、モデルの出力がツール定義のJSONスキーマに厳密に制約されます。不正な引数は構造的に生成されなくなるため、バリデーションコードを大幅に簡略化できます。 🛠 使い方 ツール定義のトップレベルにstrict: trueを追加するだけ。ただしスキーマはサポートされるJSON Schemaのサブセットに収める必要があり、オブジェクトには`additionalProperties: false`が必須です(`minimum`や`maxLength`などの制約は非対応で、使うと400エラーになります)。有効にすると、モデルはスキーマに完全に準拠した引数のみを生成します。型や必須フィールドの検証コードを省略でき、ツール実行側のエラーハンドリングがシンプルになります。 🏗 本番システムへの組み込み方 ・エージェントのツール基盤:全ツールにstrict: trueを付けて、引数不正によるランタイムエラーを根絶。デバッグ時間が大幅に減ります。 ・外部API連携:ツール引数をそのまま外部APIのリクエストボディとして使う場合、スキーマ準拠が保証されていれば安全にそのまま渡せます。 ・マルチステップパイプライン:ステップ間のデータ受け渡しにツールを使う構成で、型安全なデータフローを確保。 ・バリデーションコスト削減:引数の検証ロジックを削除または簡略化でき、コードのメンテナンスコストが下がります。 💡 ユースケース 🤖 エージェントのツール引数の品質保証 🔌 外部APIへの安全な引数パススルー 🔗 ステップ間の型安全なデータ受け渡し 🧹 バリデーションコードの削減 ⚠️ 注意点 strictモードはスキーマをコンパイルした文法で出力を制約するため、あるスキーマを初めて使うリクエストではコンパイル分のレイテンシが増えます(コンパイル結果は最終使用から24時間キャッシュされます)。複雑さには明示的な上限があり、1リクエストあたり厳密なツールは20個、オプションパラメータは合計24個、union型を持つパラメータは合計16個までで、超えると400エラーになります。シンプルなスキーマで使うのが最も効果的です。 ✨ 「引数が壊れてないか祈る」コードはもう要りません。strict: trueの一行で、ツール呼び出しの信頼性が格段に上がります。 #Claude# #LLM#
もっと見る
# OpenAI Agent SDKの便利だけど知られていない機能 🌍 モデルが一度に大量のツール呼び出しを発行して、レート制限やリソース枯渇に悩んでいませんか? ローカルツールの同時実行数を制限することで、SDK側でのツール実行を安全にコントロールできます。 📌 タイトル:ローカルツールの同時実行数制限 🔗 URL: 🧩 概要 `RunConfig` の `tool_execution` に `ToolExecutionConfig(max_function_tool_concurrency=N)` を指定すると、SDK側でのローカルファンクションツールの同時実行数を制限できます。デフォルトは `None`(無制限)で、モデルが発行したツール呼び出しをすべて同時に実行します。これは `ModelSettings.parallel_tool_calls` とは別のレイヤーで機能します。`parallel_tool_calls` はモデルが複数ツールを同時に「発行するかどうか」を制御し、`max_function_tool_concurrency` は発行済みツールをSDKが「何個同時に実行するか」を制御します。 🛠 使い方 ```python from agents import Agent, RunConfig, Runner, ToolExecutionConfig agent = Agent( name="Worker", instructions="Use tools as needed.", tools=[fetch_data, process_item, save_result], ) result = await agent, "Run the required tool calls.", run_config=RunConfig( tool_execution=ToolExecutionConfig( max_function_tool_concurrency=2, ), ), ) ``` 🏗 本番システムへの組み込み方 ・外部APIのレート制限に合わせて同時実行数を制限し、429エラーを回避する ・DB接続プールのサイズに合わせて同時実行数を調整する ・`parallel_tool_calls=True`(モデル側)と `max_function_tool_concurrency`(SDK側)を組み合わせて、並列発行は許可しつつ実行スループットを制御する ・リソース集約的なツール(画像生成やファイル処理など)の同時実行を制限してメモリ使用量を抑える 💡 ユースケース 🔧 レート制限のある外部APIとの安全な連携 🗄 データベースコネクション数の保護 🖥 CPU/メモリ集約的なツールのリソース管理 ⚡ モデルの並列発行とSDKの実行制限の独立制御 ⚠️ 注意点 `max_function_tool_concurrency` はSDK側のローカル実行にのみ影響し、hosted toolやAPIレベルの並列性には関与しません。値を小さくしすぎると、多数のツール呼び出しがキューに溜まり、全体のレスポンスが遅くなる可能性があります。`parallel_tool_calls` との役割の違いを理解したうえで、両方を適切に設定してください。 ✨ ツール同時実行数の制限で、外部リソースに優しいエージェントを構築しましょう。 #OpenAIAgentSDK# #AIAgent#
もっと見る
便利だけど知られていないOpenAI APIの機能 🛡 ユーザーが入力したコンテンツ、有害な内容が混ざっていないか心配ではありませんか? OpenAIの「Moderation(モデレーション)」は、テキストの有害性を判定する無料のエンドポイントです。暴力、ヘイト、セクシャルなコンテンツなどを検出し、安全なアプリケーション構築に役立ちます。 📌 タイトル:Moderation(モデレーション) 🔗 URL: 🧩 概要 ユーザー生成コンテンツを扱うアプリケーションでは、有害なコンテンツの検出が不可欠です。Moderation APIはテキストを複数のカテゴリ(暴力、ヘイトスピーチ、自傷行為、セクシャルコンテンツなど)で分析し、各カテゴリのスコアとフラグを返します。無料で利用でき、LLMの入出力両方のフィルタリングに使えます。 🛠 使い方 テキストをModeration APIのエンドポイントに送信するだけ。レスポンスには各カテゴリの判定結果(フラグ)とスコア(確信度)が含まれます。閾値はアプリケーションの要件に合わせてカスタマイズ可能。LLMのリクエスト前(入力フィルタ)と後(出力フィルタ)の両方に挟むことで、二重の安全ネットになります。 🏗 本番システムへの組み込み方 ・UGCプラットフォーム:投稿前にモデレーションを通し、有害コンテンツをブロックまたはレビューキューに。 ・チャットアプリの安全層:ユーザー入力をLLMに渡す前にチェック。有害な入力を事前に弾く。 ・LLM出力のフィルタ:モデルの出力をユーザーに返す前にモデレーション。意図しない有害出力をキャッチ。 ・コンテンツ管理ツール:既存コンテンツを一括スキャンし、ポリシー違反のものを検出。 💡 ユースケース 📝 ユーザー投稿コンテンツのフィルタリング 🤖 LLMの入出力の安全チェック 🔍 既存コンテンツのポリシー違反スキャン 💬 チャットアプリの有害メッセージ検出 ⚠️ 注意点 モデレーションは完璧ではなく、偽陽性(問題ないのに有害判定)や偽陰性(有害なのに見逃し)が発生します。厳しい閾値はUXを損ない、緩い閾値はリスクを残します。アプリケーションの特性に合わせて閾値を調整し、エッジケースは人間のレビューで補完する設計が重要です。また、テキスト以外(画像、音声)のモデレーションは別途対応が必要です。 ✨ 安全なAIアプリの土台は「入口と出口のフィルタ」。無料で使えるので、まずはLLMの入出力にモデレーションを挟んでみてください。 #OpenAI# #LLM#
もっと見る
# OpenAI Agent SDKの便利だけど知られていない機能 🌍 LLM API の一時的なエラーで、エージェント全体が落ちてしまった経験はありませんか? `ModelRetrySettings` を使えば、Runner がリトライ戦略を自動管理し、一時的な障害に耐性のあるエージェントを構築できます。 📌 タイトル:Runner 管理のリトライ 🔗 URL: 🧩 概要 `ModelSettings` の `retry` パラメータに `ModelRetrySettings` を指定することで、リトライ回数・バックオフ戦略・リトライポリシーを細かく制御できます。`max_retries` で最大試行回数、`backoff` で遅延戦略(`initial_delay`、`max_delay`、`multiplier`、`jitter`)、`policy` でリトライ対象のエラー種別を定義します。ただし、abort エラー・安全でないリプレイ・出力開始後のストリーム・ステートフルリクエストは絶対にリトライされません。 🛠 使い方 ```python from agents import Agent, ModelRetrySettings, ModelSettings, retry_policies agent = Agent( name="Assistant", model="gpt-5.5", model_settings=ModelSettings( retry=ModelRetrySettings( max_retries=4, backoff={ "initial_delay": 0.5, "max_delay": 5.0, "multiplier": 2.0, "jitter": True, }, policy=retry_policies.any( retry_policies.provider_suggested(), retry_policies.retry_after(), retry_policies.network_error(), retry_policies.http_status([408, 429, 500, 502, 503, 504]), ), ) ), ) ``` 利用可能なポリシーヘルパー: - `retry_policies.never()` - 常にリトライしない - `retry_policies.provider_suggested()` - プロバイダの指示に従う - `retry_policies.network_error()` - 一時的なネットワーク障害 - `retry_policies.http_status([...])` - 特定の HTTP ステータスコード - `retry_policies.retry_after()` - Retry-After ヘッダに従う - `retry_policies.any(...)` / `retry_policies.all(...)` - 組み合わせ 🏗 本番システムへの組み込み方 ・Runner レベルでデフォルトのリトライ設定を定義し、Agent レベルで `max_retries` のみオーバーライドする ・`jitter: True` で複数エージェントの同時リトライによるサンダリングハード問題を回避する ・429(レート制限)と 5xx(サーバーエラー)を必ずリトライ対象に含める ・Agent レベルの設定は Runner レベルの設定とディープマージされる 💡 ユースケース 🔄 レート制限(429)への自動バックオフ 🌐 ネットワーク瞬断時の自動回復 🏢 マルチテナント環境でのエージェント安定性確保 📊 バッチ処理での一時的エラーの吸収 ⚠️ 注意点 abort エラー、プロバイダがリプレイ不安全と判定したリクエスト、出力が開始されたストリーム、`previous_response_id` や `conversation_id` を使うステートフルリクエストは、安全性の観点からリトライされません。リトライポリシーの `policy` フィールドはシリアライズされないため、実行時にのみ有効です。 ✨ ModelRetrySettings で、一時的な障害に動じない堅牢なエージェントを構築しましょう。 #OpenAIAgentSDK# #AIAgent#
もっと見る
# Antigravityの機能と実践的な使い方 🚀 たった1回の API 呼び出しで、コードを書き・実行し・Web を見るエージェントを起動できたら。SDK と Managed Agents はそれを現実にします。 📌 タイトルと機能のURL タイトル: SDK / Managed Agents URL: 📝 概要 Antigravity SDK は、Google 製品を支えるものと同じエージェントハーネスへプログラムからアクセスする手段です。Managed Agents は Gemini API の一機能として提供され、1回の API 呼び出しで隔離された Linux サンドボックス上にエージェントを立ち上げ、推論・ツール呼び出し・コード実行を行わせます。 🔧 機能の説明 SDK と Managed Agents は、エージェントを「組み込み可能な部品」として扱えるようにします。 ・隔離実行環境: 各インタラクションは専用サンドボックスを生成し、その中でコードが安全に実行されます ・ステートフルな永続環境: 生成された環境はファイルや状態を保持したまま、後続の呼び出しで再開でき、マルチターンの作業を初期化なしで継続できます ・カスタムエージェント定義: Markdown ファイルで挙動を記述し、Google AI Studio Playground のテンプレートから素早く始められます ・基盤モデルは並列実行に最適化された Gemini 3.5 Flash で、Interactions API や AI Studio と統合されます 🛠 実践的な使い方 ・Managed Agents は Gemini API 経由で呼び出し、1コールでエージェント環境を起動します ・SDK を使えば独自のエージェント挙動を定義し、自分たちのインフラ上にホストできます ・AI Studio Playground のカスタムエージェントテンプレートを土台に、用途に合わせて拡張します ・前回の環境を再開して、ファイルや作業状態を引き継いだまま処理を続けます 🎯 ユースケース ・1コールで隔離サンドボックスのエージェントを起動し、デプロイ自動化エージェントを構築する ・コード実行・ファイル操作・Web 閲覧を伴うバックエンド処理を、社内ツールに組み込む ・ステートフル環境を活かし、複数ターンにわたる調査やビルド作業を継続実行する ・SDK で定義したエージェントを自社インフラにホストし、運用要件に合わせて配置する ⚠️ 注意点 ・Managed Agents は Gemini API のサーフェスであり、利用には API キーと課金有効なプロジェクトが前提です ・各インタラクションが環境を生成するため、サンドボックスのライフサイクルとコストを意識した設計が必要です ・コード実行・Web 閲覧を伴う以上、権限と入力の検証を怠らないでください #Antigravity# #Agents#
もっと見る
# OpenAI Agent SDKの便利で実践的な使い方 🌍 エージェントに必要な情報を型安全に注入しましょう! Local contextを使えば、ユーザー情報やロガー、データフェッチャーを依存注入のように渡せます。 📌 タイトル:Context management – Local context 🔗 URL: 🧩 概要 OpenAI Agent SDKのLocal context機能は、エージェントとツールに対して型安全な依存注入を提供します。`context`パラメータにPydanticモデルやdataclassを渡すことで、ツール関数内からユーザー情報やロガー、外部サービスのクライアントにアクセスできます。`Agent[UserInfo]`のジェネリック型により、コンテキストの型不一致をコンパイル時に検出できます。 🛠 使い方 `dataclass` で `UserInfo(uid, name, is_premium)` を定義し、`@tool` デコレータ付きの関数で `ToolContext[UserInfo]` を受け取ります。例えば `get_recommendations(wrapper: ToolContext[UserInfo], category: str)` では `wrapper.context` からユーザー情報にアクセスし、` に応じてプレミアム/通常のおすすめを返せます。`debug_tool` では `wrapper.tool_name`、`wrapper.tool_call_id`、`wrapper.tool_arguments` でデバッグ情報を取得できます。エージェントは `Agent[UserInfo]` のジェネリック型で定義し、`Agent(name="personal_assistant", instructions="ユーザーに合わせた回答をしてください", tools=[get_recommendations, debug_tool])` のようにツールを登録します。実行時は `UserInfo(uid="u_12345", name="田中太郎", is_premium=True)` を作り、`await "おすすめの本を教えて", context=user)` で渡します。 より実践的には、`AppContext` dataclass に `user: UserInfo`、`logger: logging.Logger`、`db: DatabaseClient`、`feature_flags: dict[str, bool]` をまとめます。`fetch_order_history(wrapper: ToolContext[AppContext], limit: int = 10)` では `ctx = wrapper.context` でコンテキストを取得し、` でログ出力、`ctx.feature_flags.get("new_order_api")` でフィーチャーフラグに応じた分岐、`ctx.db.get_orders(ctx.user.uid, limit)` でDB問い合わせを行います。`Agent[AppContext]` として `Agent(name="order_assistant", tools=[fetch_order_history])` を定義します。 🏗 実践的な使い方 Local contextの最大の価値は、ツール関数をピュアなビジネスロジックに保てることです。ユーザー情報やDBクライアントをグローバル変数で参照する代わりに、contextから注入することで、テスタビリティが大幅に向上します。テスト時にはモックのコンテキストを渡すだけです。 `ToolContext`の`tool_name`、`tool_call_id`、`tool_arguments`は、構造化ログに不可欠です。どのツールがどの引数で呼ばれたかをトレースでき、本番環境のデバッグが容易になります。 `Agent[UserInfo]`のジェネリック型を使うと、型チェッカー(mypy等)がコンテキストの型不一致を検出します。例えば、`Agent[UserInfo]`に`AppContext`を渡そうとするとコンパイルエラーになります。これにより、ランタイムエラーを防げます。 フィーチャーフラグや設定値もコンテキスト経由で渡すパターンが有効です。環境ごとに異なる挙動を、コンテキストの値で制御できます。 💡 ユースケース 👤 ユーザーのプレミアム/フリー区分に応じたパーソナライズ 📝 tool_call_idを使った構造化ログとトレーシング 🧪 テスト時のモックコンテキスト注入によるユニットテスト 🚩 フィーチャーフラグによるツールの挙動切り替え ⚠️ 注意点 - コンテキストにシークレット(APIキー等)を含めると、ステートのシリアライズ時に漏洩する可能性があります - コンテキストオブジェクトは実行中に共有されるため、ミュータブルな状態の変更はスレッドセーフに注意してください - `Agent[T]`のジェネリック型チェックは静的解析ツール依存です。ランタイムでは強制されません - 巨大なオブジェクト(大量データ等)をコンテキストに入れるとメモリ効率が悪化します ✨ Local contextにより、クリーンなアーキテクチャでテスタブルなエージェントが構築できます! #OpenAIAgentSDK# #AIAgent#
もっと見る
# Claude Agent SDKの便利で実践的な使い方 🛡 プロンプトインジェクション対策・認証情報プロキシ・最小権限で多層防御を構築しましょう。 セキュアデプロイメントは、分離技術・認証情報プロキシ・ネットワーク制御でエージェントの安全な本番運用を実現するガイドです。 📌 タイトル:AI エージェントの安全なデプロイ 🔗 URL: 🧩 概要 sandbox-runtime / Docker / gVisor / Firecracker の分離技術、認証情報プロキシパターン、ネットワーク・ファイルシステム制御を組み合わせた多層防御を提供します。 🛠 使い方 分離強度に応じて技術を選択:単一開発者/CI は sandbox-runtime、マルチテナントは gVisor/Firecracker。認証情報は Envoy / mitmproxy / LiteLLM で境界外注入します。 🏗 実践的な使い方 ・認証情報プロキシパターン:API キーをエージェント境界外のプロキシで注入し、エージェントは認証情報を見ずに API 呼び出しします。`ANTHROPIC_BASE_URL` でルーティング。 ・最小権限:必要ディレクトリのみ読み取り専用マウント、`.env`・`~/.aws/credentials`・`*.pem` を除外、`--network none` + Unix ソケットプロキシでネットワーク制限。 ・クラウドではプライベートサブネット + クラウドファイアウォールでプロキシ以外の送信を全ブロックし、許可リスト強制・認証情報注入・全トラフィックログを実現します。 💡 ユースケース 🔐 認証情報のエージェント境界外管理 🌐 ネットワーク制限による外部送信の防止 🏢 マルチテナント環境での強分離 ⚠️ 注意点 信頼できないコンテンツ(README、Web ページ、ユーザー入力)にはプロンプトインジェクションが含まれる可能性があります。ネットワーク制御は最後の防衛線として必ず設定してください。 #ClaudeAgentSDK# #AI#
もっと見る
# ADK 2.0の便利だけど知られていない機能 🌍 実行中のエージェントを途中で安全にキャンセルし、それまでの処理結果は保持できたら理想的だと思いませんか? ADK 2.0のキャンセル機能は、AbortController/AbortSignalを使ってエージェントの実行をグレースフルに中断する仕組みです。キャンセルシグナルはRunner、LlmAgent、Models、Toolsへと伝播し、コミット済みのイベントは保持されます。 📌 タイトル:エージェント実行のキャンセル 🔗 URL: 🧩 概要 エージェント実行のキャンセルは、AbortControllerとAbortSignalのパターンで実現されます。AbortControllerからシグナルを発行すると、Runner→LlmAgent→Models→Toolsの順にキャンセルが伝播します。重要な点として、キャンセル時点ですでにコミットされたイベントは保持され、例外をスローせずグレースフルに完了します。AbortSignal.timeout()を使えばタイムアウトベースの自動キャンセルも可能で、AbortSignal.any()で複数のシグナルを組み合わせることもできます。 🛠 使い方 AbortControllerを作成し、そのシグナルをRunnerに渡します。 ```python from adk import App, AbortController, AbortSignal app = App(agent=my_agent) # 手動キャンセル controller = AbortController() task = "long task", signal=controller.signal) # 必要なタイミングでキャンセル controller.abort() # タイムアウトベースの自動キャンセル(2秒) signal = AbortSignal.timeout(2000) result = await "time-limited task", signal=signal) # 複数シグナルの組み合わせ combined = AbortSignal.any([ AbortSignal.timeout(5000), user_cancel_signal ]) result = await "task", signal=combined) ``` 🏗 本番システムへの組み込み方 ・ユーザー操作(キャンセルボタン)と連動したAbortControllerを実装し、UIからのキャンセルを可能にする ・AbortSignal.timeout()でAPI呼び出しの最大実行時間を制限し、リソースの無駄遣いを防ぐ ・AbortSignal.any()でユーザーキャンセルとタイムアウトの両方に対応する ・キャンセル後のコミット済みイベントを活用し、部分的な結果を返却する設計にする 💡 ユースケース ⏱ LLM呼び出しにタイムアウトを設定し、応答が遅い場合に自動キャンセル 🖱 ユーザーがUIのキャンセルボタンを押した際にエージェント実行を即座に中断 🔀 複数のエージェントを並列実行し、最初に完了したもの以外をキャンセル 💰 コスト上限に達した時点でLLM呼び出しを打ち切る ⚠️ 注意点 キャンセルはグレースフルに完了するため、abort()を呼んだ瞬間に即座に停止するわけではありません。現在実行中のオペレーション(LLM推論やツール実行)が完了するまで若干の遅延が生じる場合があります。また、コミット済みのイベントは保持されるため、キャンセル後の状態が中途半端にならないよう、ワークフロー設計時にキャンセルポイントを意識することを推奨します。ツール内部でシグナルを監視して早期リターンする実装も有効です。 ✨ キャンセル機能により、エージェント実行のライフサイクルを安全にコントロールできます。タイムアウトと組み合わせることで、本番環境での予測可能性が大きく向上します。 #ADK# #AIAgent#
もっと見る