概要
このリリースでは、llama.cpp モデルプロバイダの追加により、リソースが限られたデバイスでのエッジ AI ワークロードのサポートが強化されました。また、Bedrock の region-aware モデル ID 対応、マルチエージェントパターンへの kwargs サポート、構造化出力の改善など、多数の新機能とバグ修正が含まれています。
リリース: v1.8.0
新機能
llama.cpp モデルプロバイダのサポート (#585)
この機能でできること:
- ローカルホストされた llama.cpp サーバーと統合し、リソースが限られたデバイス上でエッジ AI ワークロードを実行できます。OpenAI 互換 API を使用した直接統合により、高度なサンプリングパラメータ、文法制約、マルチモーダルコンテンツ、構造化出力をサポートします。
使用例:
from strands import Agent
from strands.models.llamacpp import LlamaCppModel
# 基本的な使用方法
model = LlamaCppModel(base_url="http://localhost:8080")
agent = Agent(model=model)
response = agent("Tell me about AI")
# 高度なパラメータを使用
model = LlamaCppModel(
base_url="http://localhost:8080",
params={
"temperature": 0.7,
"max_tokens": 100,
"repeat_penalty": 1.1, # llama.cpp 固有のパラメータ
"top_k": 40,
"min_p": 0.05
}
)
# 文法制約を使用した生成
model.use_grammar_constraint('''
root ::= answer
answer ::= "yes" | "no"
''')
ポイント:
- llama.cpp 固有のパラメータ(mirostat、top_k、min_p、typical_p など)の完全サポート
- GBNF 文法による制約付き生成が可能
- 互換性のあるモデル(例: Qwen2.5-Omni)での音声・画像コンテンツサポート
- ツール呼び出しと JSON スキーマ検証に対応
Bedrock の region-aware デフォルトモデル ID (#835)
この機能でできること:
- ユーザーが使用しているリージョンに応じて、Bedrock のデフォルトモデル ID が自動的にフォーマットされます。リージョンが inference エンドポイントをサポートしていない場合は、警告が表示されます。
使用例:
from strands import Agent
from strands.models.bedrock import BedrockModel
# リージョンに応じて自動的に適切なモデル ID が使用されます
model = BedrockModel()
agent = Agent(model=model)
response = agent("Hello, how are you?")
ポイント:
- リージョンごとに最適化されたエンドポイントが自動選択されます
- サポートされていないリージョンでは警告が表示され、エラーハンドリングが改善されます
Bedrock のデフォルト読み取りタイムアウト設定 (#829)
この機能でできること:
- Bedrock モデルのデフォルト読み取りタイムアウトが 120 秒に設定され、大規模なモデルやトークン数の多いリクエストでのタイムアウトエラーが軽減されます。
使用例:
from strands import Agent
from strands.models.bedrock import BedrockModel
# デフォルトで 120 秒のタイムアウトが設定されます
model = BedrockModel()
agent = Agent(model=model)
# 長いコンテキストでもタイムアウトしにくくなります
response = agent("Analyze this long document: " + long_text)
ポイント:
- AWS のベストプラクティスに従い、デフォルトタイムアウトを 120 秒に設定
- カスタム設定が提供されていない場合に BotocoreConfig が自動的に設定されます
Bedrock/Anthropic の ToolChoice サポート (#720)
この機能でできること:
- Bedrock と Anthropic プロバイダで structured_output を使用する際、ツール呼び出しを強制できるようになり、LLM が必ず構造化された出力を返すことが保証されます。
使用例:
from strands import Agent
from strands.models.bedrock import BedrockModel
from pydantic import BaseModel
class UserInfo(BaseModel):
name: str
age: int
email: str
model = BedrockModel()
agent = Agent(model=model)
# 構造化出力が保証されます
result = agent.get_structured_output(
"Extract user info: John Doe, 30 years old, john@example.com",
response_format=UserInfo
)
ポイント:
tool_choiceパラメータがModel.stream()メソッドに追加されました- Bedrock と Anthropic での構造化出力の一貫性が向上
- OpenAI と LiteLLM でも実装済み
構造化出力ツールの循環参照処理の改善 (#817)
この機能でできること:
- Pydantic モデルスキーマ変換における循環参照とオプションフィールドの処理が改善され、より複雑なデータ構造をサポートします。
使用例:
from strands import Agent
from strands.models.bedrock import BedrockModel
from pydantic import BaseModel
from typing import Optional
class Person(BaseModel):
name: str
age: int
friend: Optional['Person'] = None # オプションフィールドが正しく処理されます
model = BedrockModel()
agent = Agent(model=model)
# 複雑な構造でもエラーが適切に検出されます
result = agent.get_structured_output(
"Extract person info with friend",
response_format=Person
)
ポイント:
- 循環参照の明示的な検出とエラー処理
field.is_required()を使用したオプションフィールドの判定ロジックの改善- デフォルト値を持つフィールドが正しくオプションとしてマークされます
マルチエージェントパターンへの kwargs サポート (#816)
この機能でできること:
- Graph と Swarm のマルチエージェントパターンで、任意の kwargs を渡せるようになり、エージェント間で情報を共有できます。
使用例:
from strands.multiagent import Graph, Node
from strands import Agent
from strands.models.bedrock import BedrockModel
model = BedrockModel()
# カスタム状態を kwargs として渡す
graph = Graph(
nodes=[
Node(name="node1", executor=Agent(model=model)),
Node(name="node2", executor=Agent(model=model))
]
)
# kwargs がすべてのエージェント呼び出しに伝播されます
result = await graph.run_async(
"Process this task",
shared_context={"key": "value"},
session_id="123"
)
ポイント:
- Agent クラスと同様に、Graph と Swarm でも kwargs を使用可能
- マルチエージェントパターンでの状態共有が容易になります
- すべての Agent と MultiAgentBase の呼び出しに kwargs が伝播されます
バグ修正
循環グラフの動作修正 (#768)
- Graph マルチエージェントパターンで、
reset_on_revisit機能が正しく動作せず、サイクルとフィードバックループが機能しない問題を修正しました。 _find_newly_ready_nodesメソッドを更新し、完了したノードが再訪問可能になるように改善しました。- 無限ループ防止のための安全機構を追加し、状態リセット機能が正しく動作するようになりました。
Bedrock での DeepSeek 使用時の reasoningContent フィルタリング (#652)
- Bedrock で DeepSeek モデルを使用する際、ValidationException を回避するために、converse_stream 操作の前に reasoningContent を除去するように修正しました。
- Bedrock API に送信する前にメッセージから推論コンテンツがフィルタリングされるようになりました。
asyncio イベントループのブロック回避 (#805)
- リトライ間で
time.sleepが asyncio イベントループをブロックする問題を修正しました。 time.sleepをasyncio.sleepに置き換え、非同期コンテキストで正しく動作するようになりました。
ファイルパスからの複数 @tool デコレータ関数の読み込み (#742)
- ファイルパスに複数の
@toolデコレート関数が含まれている場合、1 つのツールのみが読み込まれる問題を修正しました。 - ファイルベースのツール読み込みがディレクトリ/モジュールスキャンと一貫性を持つようになり、すべてのデコレートされたツールが読み込まれます。
LiteLLM での use_litellm_proxy パラメータのサポート (#808)
- LiteLLM で
use_litellm_proxyをclient_argsとして渡す際の不具合を修正しました。 - LiteLLM Proxy Server の使用が容易になり、顧客が環境変数や直接的な設定を使用せずにプロキシを利用できるようになりました。
まとめ
このリリースでは、エッジデバイスでのローカルモデル実行を可能にする llama.cpp サポートの追加、Bedrock の使いやすさの向上、マルチエージェントパターンの柔軟性強化など、重要な新機能が追加されました。また、循環グラフやツール読み込みなどの重要なバグ修正により、SDK の安定性と信頼性が向上しています。