概要
このリリースでは、OpenAI Responses API を新しいモデルプロバイダーとして追加し、プラグイン開発を簡素化する @hook および @tool デコレータを導入しました。また、ツール結果の切り詰め戦略の改善や、複数のバグ修正も含まれています。
リリース: v1.29.0
新機能
OpenAI Responses API モデル実装の追加 (#975)
この機能でできること:
- OpenAI の Responses API を独立したモデルプロバイダーとして使用できます
- ストリーミング、構造化出力、ツール呼び出しをサポートしています
使用例:
from strands import Agent
from strands.models import OpenAIResponses
# OpenAI Responses API モデルを使用してエージェントを作成
model = OpenAIResponses(
model_id="gpt-4o",
)
agent = Agent(model=model)
response = agent("Hello, how are you?")
print(response)
ポイント:
- 既存の OpenAI Chat Completions API とは別のプロバイダーとして実装されています
- 現時点では Responses API 固有の組み込みツールやステートフルな会話実行機能は含まれていません
プラグイン開発の改善: @hook と @tool デコレータ (#1740)
この機能でできること:
@hookデコレータを使用して、フックを宣言的に登録できます@toolデコレータを使用して、ツールを宣言的に登録できます- 冗長な
init_plugin()メソッドでの手動登録が不要になります
使用例:
from strands.plugins import Plugin, hook, tool
from strands.hooks import BeforeModelCallEvent, AfterModelCallEvent
class MyPlugin(Plugin):
name = "my-plugin"
# 型ヒントからイベントタイプを推論して自動登録
@hook
def on_model_call(self, event: BeforeModelCallEvent):
print(f"Model call started: {event}")
# Union 型で複数のイベントに登録
@hook
def on_any_model_event(self, event: BeforeModelCallEvent | AfterModelCallEvent):
print(f"Model event: {event}")
# ツールも宣言的に登録可能
@tool
def printer(self, log: str):
"""ログを出力するツール"""
print(log)
return "Printed log"
ポイント:
- 従来の
agent.add_hook()を使用した手動登録も引き続きサポートされています - 型ヒントからイベントタイプが自動的に推論されるため、登録コードが大幅に簡素化されます
ツール結果の切り詰め戦略の改善 (#1756)
この機能でできること:
SlidingWindowConversationManagerでのコンテキストサイズ削減が、より優雅に行われるようになりました- 大きなツール結果を完全に削除せず、部分的に切り詰めて先頭と末尾を保持します
- 画像ブロックは説明的なテキストプレースホルダーに置き換えられます
- 最も古いツール結果から優先的に処理され、最新の結果がより長く保持されます
使用例:
from strands import Agent
from strands.agent.conversation_manager import SlidingWindowConversationManager
# カスタム設定でコンバセーションマネージャーを作成
conversation_manager = SlidingWindowConversationManager(
window_size=10,
)
agent = Agent(conversation_manager=conversation_manager)
ポイント:
- 400 文字を超える大きなツール結果は、先頭 200 文字と末尾 200 文字を保持して部分的に切り詰められます
- エラーメッセージで完全に置き換えられていた従来の動作と比較して、エージェントにより多くのコンテキストが提供されます
バグ修正
Langfuse 用の semantic conventions を span attributes に追加 (#1768)
- Langfuse がイベント属性ではなく span 属性から semantic conventions を読み取る問題を修正
- Langfuse ユーザーに対して、最新の semantic conventions が正しく適用されるようになりました
ツール実行後の guardrail_latest_message ラッピングの保持 (#1658)
- ツール実行後、最後のメッセージが
toolResultでテキスト/画像コンテンツがない場合に、guardrail_latest_messageのラッピングが失われる問題を修正 - フォーマットループの前に、テキストまたは画像コンテンツを含む最後のユーザーメッセージのインデックスを事前計算することで、
guardContentラッピングが正しいメッセージをターゲットにするようになりました
ConcurrentToolExecutor からの例外の正しいスロー (#1797)
- ツールが例外を発生させ、
AfterToolCallEventフックが再スローした場合、ConcurrentToolExecutorが例外を黙って飲み込んでいた問題を修正 - 例外がキューに入れられ、
_execute()で再スローされるようになり、呼び出し元がツールの失敗を検出して処理できるようになりました - 終了時にすべての残りのタスクがキャンセルされ、コルーチンのリークを防止します
まとめ
このリリースでは、OpenAI Responses API のサポート追加、プラグイン開発体験の大幅な改善、そしてツール結果の切り詰め戦略の改善により、エージェント開発の利便性と信頼性が向上しました。