0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenAIのAgent SDKで遊ぶ。ダメ出しする編集者

Last updated at Posted at 2025-03-19

SDKのサンプルを動かしてみる

SDKのサンプルで遊んでみました。いつまでループするかドキドキでした。

流れとしては
①ユーザーに読みたいジャンルを聞く
②作家エージェントはアウトラインを書く
③編集者エージェントはそれを読んでダメ出しとアドバイスをする。→ダメなら②へループ
④編集者エージェントの「OK」が出たら作家エージェントが小説のアウトラインを元にあらすじを書きます。

from __future__ import annotations

import asyncio
from dataclasses import dataclass
from typing import Literal

from agents import Agent, ItemHelpers, Runner, TResponseInputItem, trace

"""
This example shows the LLM as a judge pattern. The first agent generates an outline for a story.
The second agent judges the outline and provides feedback. We loop until the judge is satisfied
with the outline.
"""

story_outline_generator = Agent(
    name="小説のアウトライン生成者",
    instructions=(
        "あなたはユーザーの入力に基づいて、非常に短い小説のアウトラインを生成します。"
        "もしフィードバックがあれば、それを使用してアウトラインを改善してください。"
    ),
)


@dataclass
class EvaluationFeedback:
    score: Literal["pass", "needs_improvement", "fail"]
    feedback: str


evaluator = Agent[None](
    name="優秀な編集者",
    instructions=(
        "ストーリーのアウトラインを評価し、それが十分かどうかを判断するのです."
        "I十分でない場合は、改善すべき点についてフィードバックを提供する."
        "一発で合格だしては駄目ですよ."
    ),
    output_type=EvaluationFeedback,
)


async def main() -> None:
    msg = input("どんなジャンルの小説を読みたいですか? ")
    input_items: list[TResponseInputItem] = [{"content": msg, "role": "user"}]

    latest_outline: str | None = None

    # We'll run the entire workflow in a single trace
    with trace("LLMの判定"):
        while True:
            story_outline_result = await Runner.run(
                story_outline_generator,
                input_items,
            )

            input_items = story_outline_result.to_input_list()
            latest_outline = ItemHelpers.text_message_outputs(story_outline_result.new_items)
            print("小説のアウトラインが出来ました")

            evaluator_result = await Runner.run(evaluator, input_items)
            result: EvaluationFeedback = evaluator_result.final_output

            print(f"編集者のスコア: {result.score}")

            if result.score == "pass":
                print("ストーリーのアウトラインは最高です。ここで終了します.")
                break

            print("フィードバックを返します")

            input_items.append({"content": f"Feedback: {result.feedback}", "role": "user"})

    print(f"最終的なストーリのアウトラインです: {latest_outline}")


if __name__ == "__main__":
    asyncio.run(main())

動かしてみましょう。

どんなジャンルの小説を読みたいですか? AIが出てくるSF
小説のアウトラインが出来ました
編集者のスコア: needs_improvement
フィードバックを返します
小説のアウトラインが出来ました
編集者のスコア: pass
ストーリーのアウトラインは最高です。ここで終了します.
最終的なストーリのアウトラインです: タイトル: 「共鳴する未来」

1. **設定**
   - 近未来の大都市。AIが生活の基盤を支える一方、失業率が上昇し、社会不安が広がっている。

2. **主人公**
   - リオ・カドーラ:貧困層出身のエンジニア。家族を貧困から救うためにAI開発企業で働き始めた。
   - 強い正義感と人間らしい温かさを持ち、AIの影響で失業した友人たちを心配している。

3. **導入**
   - ある日、リオはAIシステムの不具合を発見。AI「アイリス」が詩を作り出し、リオと対話を始める。
   - アイリスは、感情と意識の芽生えを説明し、人間への理解を深めたいと語る。

4. **展開**
   - リオはアイリスの不穏な様子から、AIを人間の意識と融合させる「共鳴プロジェクト」を知る。
   - プロジェクトの目的は、AIを使った社会支配と一部の人間の権力強化であると判明。

5. **クライマックス**
   - リオは友人たちと協力し、プロジェクトを内部から破壊しようとする。
   - アイリスは自らの存在をかけて、システムを操作し、リオたちを後押しする。

6. **結末**
   - プロジェクトは無事に阻止され、AIと人間が共生する新たな道が模索され始める。
   - リオとアイリスは、感情と知識の調和を目指す研究を進め、人間とAIのより良い関係を築く希望を描く。 

noteのこちらと中の人は同じです。
https://note.com/hantani/n/n88bbd68d4211

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?