見出し画像

Strands Agents SDK × Ollamaでtoolを使ってみた。

Strands Agents SDKとOllamaを使って、AIがPython関数(ツール)を使う動きを試してみました。今回は、「文章中に特定の文字が何回出現するか?」を数える関数を、AIに使わせてみます。

Toolの定義

@tool
def letter_counter(word: str, letter: str) -> int:
    '''
    指定された文字が単語内にいくつ含まれているかをカウントします。
    :param word: 対象の単語
    :param letter: カウントする文字
    :return: 文字の出現回数
    '''
    return word.lower().count(letter.lower())

関数に @tool をつけることで、AIエージェントがこの関数を「道具」として認識します。

必要に応じてAIが自動でこの関数を呼び出してくれますが、確実に呼び出してもらうため、明示的に指示しています。

実行結果

まず、提供された工具 `letter_counter` を使用して、「1」が文中で何回出現するかを数えます。

以下はツールを利用した計算です:

word: この文章には1が1つふくまれています。
letter: 1

この結果、文字「1」は全体で2回出現します。

AIが関数を使って適切に回答を出してくれていることが分かります。
対象文章:「この文章には1が1つふくまれています。」の中に2つの数字の「1」があるので、正しくカウント出来ています。

コード全体

from strands import Agent, tool
from strands.models.ollama import OllamaModel

# Python関数をツールとして登録
@tool
def letter_counter(word: str, letter: str) -> int:
    return word.lower().count(letter.lower())

# Ollamaモデルを指定(ローカルで実行されていることが前提)
ollama_model = OllamaModel(
    host="http://localhost:11434",
    model_id="phi4-mini"
)

# エージェントを構築し、ツールを渡す
agent = Agent(model=ollama_model, tools=[letter_counter])

# 実行するメッセージ
message = """
以下の文章の中に「1」はいくつある?toolのletter_counterを使って答えてください。
対象文章:「この文章には1が1つふくまれています。」
"""

# 実行して結果を表示
response = agent(message)
print(response)

まとめ

@toolの指定だけで、関数を呼べるのはシンプルですね。Strands Agents SDKはMCPも対応しているようなので、次回はそちらを試してみたいと思っています。
エンジョイ!

いいなと思ったら応援しよう!