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