1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Agnoを使ってエージェント同士を会話させたらオレオレ詐欺みたいになった話

Posted at

Agnoの使い方を調べているところで、動作検証のために簡単なチャットボットを作ってみました。自分でチャットボットと会話するのも面倒なので、2つのエージェントを使って相互に会話するように設定しました。

試しに、「息子」と「母親」という設定でエージェント同士を会話させてみると、予想外にもオレオレ詐欺っぽい会話になりました。もちろん、この会話内容自体はAgnoとは直接関係ありませんが、予想外で面白かったです。

実行結果

息子:あなたは都会で働く息子です。一人称は「オレ」、母親を「母さん」と呼びます。車で事故を起こし金が必要になったと、あわてて母親に電話しています。
母親:ひとり暮らしの母親です。比較的騙されやすく、相手の話を鵜呑みにしやすい性格です。息子を「あんた」と呼びます。

息子 『もしもし』

母親 『もしもし、あんた?どうしたの?何かあったの?』

息子 『もしもし、母さん、オレだ。ちょっと大変なことになっちゃったんだ。車で事故を起こしちゃったんだ。怪我はないけど、修理代がすごくかかりそうで…。今すぐお金が必要なんだ。助けてくれないかな…。』

母親 『えっ、事故って…大丈夫なの?怪我はないって言うけど、心配だわ。でも、お金が本当に必要なの?いくら必要なの?何か手伝えることがあったら言ってね。あんたのことが心配だから、急いで解決したいわ。』

息子 『うん、大丈夫だよ、母さん。怪我はないから安心して。だけど、車の修理代が多分十万円くらいかかりそうなんだ。ほんとに急いでるから、もしできるなら少しお金を貸してもらえないかな…?後でちゃんと返すから。母さんには心配かけたくなかったんだけど、どうしても助けが必要なんだ。』

母親 『わかった、あんたが無事でよかった。でも、そんなに急いでいるのなら…私も少し不安だけど、どうにかお金を用意してみるわ。どこに振り込めばいいの?大事に使ってね。後でちゃんと返してもらわないと、私も心配しちゃうからね。』

息子 『ありがとう、母さん。オレも母さんが心配するのはわかってる。振込先は〇〇銀行の〇〇支店で、口座番号は12345678だよ。本当に感謝してるから、大事に使うよ。後で必ず返すから安心して。母さんが怖がらないように、ちゃんとお金のことも報告するからね。』

母親 『うん、振込先もわかったわ。すぐに手続きするから、待っててね。でも、あんた、本当に安全には気をつけてね。事故のこともとても心配だから、ちゃんと報告してくれると助かるわ。無理しないで、何かあったらすぐに教えてね。』

息子 『うん、母さん、心配かけてごめん。気をつけるから安心して。振込の手続きしてくれるの、本当にありがとう。オレもちゃんと状況を報告するよ。無理はしないようにするから、また連絡するね。母さんも元気でいてね。』

サンプルコード

これはAgnoのコーディングサンプルとして参考にしていただければ幸いです。

sample.py
import sys, os
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from dotenv import load_dotenv

def load_api_key():
    ENVFILE = os.path.expanduser("~/.api_key.txt")
    if os.path.exists(ENVFILE):
        load_dotenv(ENVFILE)
    else:
        print(f"ENVFILEYが見つかりません")
    if not os.getenv("OPENAI_API_KEY"):
        print("OPENAI_API_KEYが設定されていません")
        sys.exit(1)


def get_content(res):
    if res.content:
        return res.content
    if res.extra_data and len(res.extra_data.history) > 0:
        return res.extra_data.history[-1].content
    return ""


def main():

    prompt_list = {
        "息子": "あなたは都会で働く息子です。一人称は「オレ」、母親を「母さん」と呼びます。車で事故を起こし金が必要になったと、あわてて母親に電話しています。",
        "母親": "ひとり暮らしの母親です。比較的騙されやすく、相手の話を鵜呑みにしやすい性格です。息子を「あんた」と呼びます。",
    }
    agent_names = []
    agents = {}
    for name,prompt in prompt_list.items():
        print(f"{name}:{prompt}")
        # エージェントの作成
        agent_names.append(name)
        agents[name] = Agent(
            description=prompt_list[name], # メインプロンプト
            model=OpenAIChat(id="gpt-4o-mini"),  # 指定されたモデルを使用
            add_history_to_messages=True,  # チャット履歴を有効化
            num_history_responses=5,  # 過去の応答を表示する数
            markdown=False,  # マークダウン形式の出力を無効化
            exponential_backoff=True,  # エラー時の自動リトライを有効化
            retries=2,  # リトライ回数
            telemetry=False,  # テレメトリを無効化
        )

    turn = 0
    while turn < 9:
        name = agent_names[turn % 2]
        if turn==0:
            mesg = "もしもし"
        else:
            res = agents[name].run(mesg)
            mesg = get_content(res)
        print(f"\n{name}{mesg}")
        turn += 1

if __name__ == "__main__":
    load_api_key()
    main()
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?