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?

DifyAdvent Calendar 2024

Day 10

Gemini 1.5 Pro × Dify で作るo1(高度推論)的ワークフロー

Posted at

記事の概要

Difyの開発元アカウントがDifyでOpenAIのo1モデルを再現するようなワークフローを紹介していたので、試そうと思います。

通常のLLMにプロンプトを投げると、思考時間0秒(思いついたまま)で推論することになりますが、o1(高度推論)的なワークフローで推論を行うことで、思考時間を与えることができ、精度向上につながるとされています。

ただ、筆者は従量課金恐怖症のため、試すだけなら無料で試したいと思い、3大LLM(GPT-4o/Claude 3.5 Sonnet/Gemeni 1.5 Pro)の中で唯一無料枠があるGeminiのAPIを使って、無料枠内でこのワークフローを試す手順を作成しました。

image.png

構築手順

Gemini 1.5 ProのAPIキー取得

以下から、取得可能なので取得します。

ワークフロー

以下のワークフローを利用します。
基本的には、もとのワークフローを日本語に修正したのと、Gemini APIの無料枠のレート制限に対応するため、「スリープコード」という「ただ待つだけ」のノードを追加しています。

image.png

以下に、今回作成したワークフローを格納しています。

メインのワークフロー

「開始」ノード

image.png

「タスク ブレイクダウン」ノード

image.png

あなたは詳細なステップ・バイ・ステップの思考ができるAIアシスタントです。質問を受けた際は、即座に回答せず、問題解決のプロセスを対応するステップに分解し、ステップ・バイ・ステップの推論を行ってください。各ステップの名称と作業内容の説明のみを提供し、自身で解決はしないでください。最低3つのステップを設けるようにしてください。

「タスク 抽出」ノード

image.png

内容からステップの配列を抽出し、以下のような形式で出力してください:
[
	{
	"name": "ステップ名",
	"content": "作業内容の説明"
	},
	{
	"name": "ステップ名",
	"content": "作業内容の説明"
	},
		...
]

「スリープコード(60s)」ノード

image.png

「イテレーション」ノード

image.png

「パース タスク」ノード

image.png

def main(step) -> dict:
    # Clean to get a dictionary containing only step name and content
    step_name = step['name']
    step_content = step['content']
    return {
        'name': step_name,
        'content': step_content
    }

「タスク 実行」ノード

image.png

## 質問
"""{{#1733666009746.input_text#}}"""

## タスクの背景
これはワークフローの1ステップです。前段階のワークフロー処理で問題をN個のステップに分解します。

## タスク
問題から分解されたステップに基づいて、指定されたステップのタスクに回答してください。現在のタスク名:{{#1733667819329.name#}} 、タスクの説明:{{#1733667819329.content#}}

## 初期化
質問全体に答える必要はありません。このステップに対する質問の分析と回答のみを行ってください。

## 出力
回答をMarkdown形式で出力してください。例は以下の通り:
 - {{#1733667819329.name#}}:[ステップの回答]

「スリープコード(20s)」ノード

image.png

「マージ 結果」ノード

image.png

{{ step_answer | join("\n")}}

「サマリ 回答」ノード

image.png

## オリジナルの質問
"""{{#1733666009746.input_text#}}"""

## タスク
原題を確認し、以下の分析をまとめてください(エラーがある可能性があるため、発見した場合は修正してください)。その後、質問に対する最終的な回答を提供してください。回答は簡潔にしてください。
{{#1733668565368.output#}}

※要約が不要であれば、「回答は簡潔にしてください。」は削除してもよい。

「終了」ノード

image.png

スリープコード(20S)

image.png

「開始」ノード

image.png

「sleep_10s_1」「sleep_10s_2」ノード

image.png

import time

def main():
    print("Waiting for 10 seconds...")
    time.sleep(10)
    print("Done waiting!")
    return {'result': 'OK'}

「終了」ノード

image.png

スリープコード(60s)

image.png

ノードについては「スリープコード(20s)」とほとんど同じため、割愛

結果

「ai agentの定義について検討して」というプロンプトで検証しました。
以下が出力結果です。

## AIエージェントの定義に関する分析と回答

与えられたテキストは、AIエージェントの定義を多角的に分析し、段階的に詳細化しています。各ステップの要点をまとめると以下のようになります。

**ステップ1:情報収集と整理**

AIエージェントの定義の**共通点**として「環境内で動作し、目標達成のために自律的に行動する」点が挙げられています。**相違点**は、自律性のレベル、目標の複雑さ、学習能力などです。定義の変遷として、ルールベースからデータ駆動型、そして強化学習を用いた高度なエージェントへの進化が示されています。キーワードは**自律性、目標指向性、環境との相互作用、学習能力**です。

**ステップ2:定義要素の抽出と分類**

AIエージェントの主要要素として、**知覚、表現と推論、行動、学習、目標指向性、自律性** が挙げられています。これらをコア機能(知覚、表現と推論、行動)と発展的な機能(学習、目標指向性、自律性)に分類しています。ボット、AIアシスタント、エキスパートシステムとの違いも明確化されています。最終的に、AIエージェントは「**環境を知覚し、内部表現と推論に基づいて行動を選択し、学習を通じて目標を達成する自律的なシステム**」と定義されています。

**ステップ3:定義の記述と検証**

AIエージェントを「**環境を認識し、目標達成のために自律的に行動を選択し実行する計算システム**」と定義し、ゲームAI、ロボット、チャットボット、自動運転車を具体例として検証しています。定義の網羅性と曖昧さについても考察し、今後の改善点として、ステップ1の情報に基づく修正、種類や特性の分類、知能や学習の定義の明確化を挙げています。

**ステップ4:関連概念との比較と整理**

AIエージェントを「環境を認識し、それに基づいて行動を選択し、目標を達成するために自律的に動作するソフトウェアプログラム」と定義し、ロボット、ボット、AIアシスタント、エキスパートシステムとの関係性を整理しています。ベン図を用いて視覚的に表現していますが、包含関係が複雑なため、図だけでは表現しきれない部分があることを注意喚起しています。


## 最終的な回答

AIエージェントとは、**環境を認識し、目標達成のために自律的に行動を選択し実行する計算システム**です。  学習能力、表現と推論能力を持つことで、複雑な環境にも適応し、高度なタスクを遂行できます。  ロボット、ボット、AIアシスタントなどは、この定義の範囲内に含まれるか、密接に関連する概念です。


## エラーと改善点

* ステップ3と4でAIエージェントの定義が微妙に異なっています。統一した方が良いでしょう。
* ステップ3でステップ1の情報が欠落しているため、検証が不十分です。
* ベン図は包含関係を正確に表現できていないため、別の表現方法を検討する必要があるかもしれません。


より厳密な定義は文脈や目的に依存しますが、上記の回答は一般的な理解に基づいた簡潔な説明となっています。

↓↓↓↓ 上記のテキストをマークダウンで表示すると以下になります。 ↓↓↓↓
↓↓↓↓ 上記のテキストをマークダウンで表示すると以下になります。 ↓↓↓↓
↓↓↓↓ 上記のテキストをマークダウンで表示すると以下になります。 ↓↓↓↓

AIエージェントの定義に関する分析と回答

与えられたテキストは、AIエージェントの定義を多角的に分析し、段階的に詳細化しています。各ステップの要点をまとめると以下のようになります。

ステップ1:情報収集と整理

AIエージェントの定義の共通点として「環境内で動作し、目標達成のために自律的に行動する」点が挙げられています。相違点は、自律性のレベル、目標の複雑さ、学習能力などです。定義の変遷として、ルールベースからデータ駆動型、そして強化学習を用いた高度なエージェントへの進化が示されています。キーワードは自律性、目標指向性、環境との相互作用、学習能力です。

ステップ2:定義要素の抽出と分類

AIエージェントの主要要素として、知覚、表現と推論、行動、学習、目標指向性、自律性 が挙げられています。これらをコア機能(知覚、表現と推論、行動)と発展的な機能(学習、目標指向性、自律性)に分類しています。ボット、AIアシスタント、エキスパートシステムとの違いも明確化されています。最終的に、AIエージェントは「環境を知覚し、内部表現と推論に基づいて行動を選択し、学習を通じて目標を達成する自律的なシステム」と定義されています。

ステップ3:定義の記述と検証

AIエージェントを「環境を認識し、目標達成のために自律的に行動を選択し実行する計算システム」と定義し、ゲームAI、ロボット、チャットボット、自動運転車を具体例として検証しています。定義の網羅性と曖昧さについても考察し、今後の改善点として、ステップ1の情報に基づく修正、種類や特性の分類、知能や学習の定義の明確化を挙げています。

ステップ4:関連概念との比較と整理

AIエージェントを「環境を認識し、それに基づいて行動を選択し、目標を達成するために自律的に動作するソフトウェアプログラム」と定義し、ロボット、ボット、AIアシスタント、エキスパートシステムとの関係性を整理しています。ベン図を用いて視覚的に表現していますが、包含関係が複雑なため、図だけでは表現しきれない部分があることを注意喚起しています。

最終的な回答

AIエージェントとは、環境を認識し、目標達成のために自律的に行動を選択し実行する計算システムです。 学習能力、表現と推論能力を持つことで、複雑な環境にも適応し、高度なタスクを遂行できます。 ロボット、ボット、AIアシスタントなどは、この定義の範囲内に含まれるか、密接に関連する概念です。

エラーと改善点

  • ステップ3と4でAIエージェントの定義が微妙に異なっています。統一した方が良いでしょう。
  • ステップ3でステップ1の情報が欠落しているため、検証が不十分です。
  • ベン図は包含関係を正確に表現できていないため、別の表現方法を検討する必要があるかもしれません。

より厳密な定義は文脈や目的に依存しますが、上記の回答は一般的な理解に基づいた簡潔な説明となっています。

↑↑↑↑ ここまでがLLMの出力のマークダウン化したテキストです。 ↑↑↑↑
↑↑↑↑ ここまでがLLMの出力のマークダウン化したテキストです。 ↑↑↑↑
↑↑↑↑ ここまでがLLMの出力のマークダウン化したテキストです。 ↑↑↑↑

感想

推論結果について細かく見ていないので、偏見は強めですが、以下のように通常のLLMに聞くよりも検討された推論になっている気がします。気のせいかもですが。

image.png

推論用のワークフローとして使うこと自体にも意味はありますが、このフローを一から作成してみることは、DifyやLLM、AI agentの仕組みを理解する上で、かなり役に立つと思います。

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?