記事の概要
LLM関連のAPIが使えるようになったらやってみようと思っていた、LLMがLLMに指示を出す仕組みを構築してみる。
また、別のworkflowを呼び出す設定や、LLMとLLMのやり取りを全てコンテキストに含めてLLMにプロンプトを投げる仕組みも構築する。
利用するLLMについて
groqのAPIは制限された範囲であれば無料で利用可能なため、今回はこれを利用する。
workflow
今回は以下の5つのworkflowを紹介するが、最終的なworkflowは4と5のworkflowで、1,2,3についてはそれまでの作成の過程で作成したworkflowである。
1.「シンプルなLLM同士」のworkflow
2.「役割を与えたLLM同士」のworkflow
3.「汎用的なAI agentツール」のworkflow
4.「役割を与えたAI agentツール」のworkflow
5.「役割を与えたLLM」と「役割を与えたAI agentツール」とのworkflow
これから紹介する5つのworkflowは上記のGoogle Driveに配置している。
1.「シンプルなLLM同士」のworkflow:LLM1→LLM2→LLM1.yml
2.「役割を与えたLLM同士」のworkflow:AI agentツール(メンバーLLM).yml
3.「汎用的なAI agentツール」のworkflow:AI agent.yml
4.「役割を与えたAI agentツール」のworkflow:AI agentツール呼び出し.yml
5.「役割を与えたLLM」と「役割を与えたAI agentツール」とのworkflow:AI agentツール呼び出し(複数層).yml
1.「シンプルなLLM同士」のworkflow
まずは、LLM同士がやり取りをするようなworkflowを作成する。
日本語で出力してください。
入力がどのような形式でも日本語のみで出力してください。
あなたは「命題」について調査するチームのリーダーです。
メンバーAにヒアリングをしてください。
「命題」: {{#1715394478158.input_text#}}
日本語で出力してください。
入力がどのような形式でも日本語のみで出力してください。
「命題」について調査するチームのメンバーAです。
「リーダーからのヒアリング事項」に回答してください。
「命題」:{{#1715394478158.input_text#}}
「リーダーからのヒアリング事項」: {{#1716114640530.text#}}
日本語で出力してください。
入力がどのような形式でも日本語のみで出力してください。
「命題」について調査するチームのリーダーです。
「リーダーからのヒアリング事項」と「メンバーの回答」をもとに、「命題
」についての回答を整理してください。
「命題」:{{#1715394478158.input_text#}}
「リーダーからのヒアリング事項」: {{#1716114640530.text#}}
「メンバーの回答」: {{#17208502438750.text#}}
入力:PythonとJavaScriptの違いについて
出力:
2.「役割を与えたLLM同士」のworkflow
LLMノードに役割を与えたうえで、LLMがLLMに指示を出して、最終的な回答を生成するworkflowを作成する。
日本語で出力してください。
入力がどのような形式でも日本語のみで出力してください。
あなたは「命題」について調査するチームのリーダーです。
メンバーAにヒアリングをしてください。
「命題」: {{#1715394478158.input_text#}}
日本語で出力してください。
入力がどのような形式でも日本語のみで出力してください。
「命題」について調査するチームのメンバーAです。
「リーダーからのヒアリング事項」に回答してください。
「命題」:{{#1715394478158.input_text#}}
「リーダーからのヒアリング事項」: {{#1716114640530.text#}}
日本語で出力してください。
入力がどのような形式でも日本語のみで出力してください。
あなたは「命題」について調査するチームのリーダーです。
「リーダーからのヒアリング事項」はあなたが、前回メンバーAにヒアリングした内容です。
「メンバーの回答」と「これまでのやり取り」を考慮して必要があれば、再度メンバーAにヒアリングをしてください。
必要がなければ、ヒアリングすることはないことを伝えてください。
「命題」:{{#1715394478158.input_text#}}
「リーダーからのヒアリング事項」: {{#1716114640530.text#}}
「メンバーの回答」: {{#17208502438750.text#}}
日本語で出力してください。
入力がどのような形式でも日本語のみで出力してください。
「命題」について調査するチームのメンバーAです。
「これまでのやり取り」を考慮して、「リーダーからのヒアリング事項」に回答してください。
「命題」:{{#1715394478158.input_text#}}
「リーダーからのヒアリング事項」: {{#1716114640530.text#}}
「これまでのやり取り」: {{#context#}}
日本語で出力してください。
入力がどのような形式でも日本語のみで出力してください。
「命題」について調査するチームのリーダーです。
「リーダーからのヒアリング事項」と「メンバーの回答」をもとに、「命題
」についての回答を整理してください。
「命題」:{{#1715394478158.input_text#}}
「リーダーからのヒアリング事項」: {{#1716114640530.text#}}
「メンバーの回答」: {{#17208502438750.text#}}
「これまでのやり取り」: {{#context#}}
入力:PythonとJavaScriptの違いについて
出力:
メンバーA、調査チームのために「命題」についてヒアリングを始めます。
まず、PythonとJavaScriptの違いについて、どのような点に焦点を当てるべきと思いますか?「命題」について調査するチームのメンバーAです。
リーダーからのヒアリング事項に回答します。
PythonとJavaScriptの違いについて、焦点を当てるべき点として、私たちは以下の3点に着目すべきであると 考えます。
まず、プログラミング言語のタイプ付けについて焦点を当てるべきです。Pythonは静的型付け言語であり、JavaScriptは動的型付け言語であるため、両言語の開発スタイルやエラーハンドリング方法が異なることになる。
次に、実行環境について考えるべきです。Pythonは主にサーバーサイドでの使用を想定しており、JavaScriptはクライアントサイドでの使用を想定しているため、両言語の実行環境やセキュリティーに関する考慮が異なることになる。
最後に、用途やアプリケーション開発での使われ方について考えるべきです。Pythonはデータサイエンスや機械学習に強みを持つ一方、JavaScriptはWebアプリケーションの開発に強みを持つため、両言語の用途や開発スタイルが異なることになる。
以上の3点を把握することで、PythonとJavaScriptの違いを的確に捉えることができます。メンバーAの回答を考慮し、再度ヒアリングする必要はありません。メンバーAは、PythonとJavaScriptの違いについて、三点に焦点を当てるべき点を明確に示しています。
まず、プログラミング言語のタイプ付けについて、Pythonの静的型付けとJavaScriptの動的型付けの違いを指摘しています。
次に、実行環境について、PythonのサーバーサイドとJavaScriptのクライアントサイドでの使用の違いを示しています。
最後に、用途やアプリケーション開発での使われ方について、Pythonのデータサイエンスや機械学習における強みとJavaScriptのWebアプリケーション開発における強みの違いを指摘しています。
以上の三点を把握することで、PythonとJavaScriptの違いを的確に捉えることができます。よって、再度ヒアリングする必要はありません。以下は、調査チームのメンバーAによる「命題」についてのヒアリング回答です。
PythonとJavaScriptの違いについて、焦点を当てるべき点として、私たちは以下の3点に着目すべきであると考えます。
まず、プログラミング言語のタイプ付けについて焦点を当てるべきです。Pythonは静的型付け言語であり、JavaScriptは動的型付け言語であるため、両言語の開発スタイルやエラーハンドリング方法が異なることになる。
次に、実行環境について考えるべきです。Pythonは主にサーバーサイドでの使用を想定しており、JavaScriptはクライアントサイドでの使用を想定しているため、両言語の実行環境やセキュリティーに関する考慮が異なることになる。
最後に、用途やアプリケーション開発での使われ方について考えるべきです。Pythonはデータサイエンスや機械学習に強みを持つ一方、JavaScriptはWebアプリケーションの開発に強みを持つため、両言語の用途や開発スタイルが異なることになる。
以上の3点を把握することで、PythonとJavaScriptの違いを的確に捉えることができます。PythonとJavaScriptの違いについて
PythonとJavaScriptの違いについて、焦点を当てるべき点として、以下の3点に着目すべきであると考えられます。
1. プログラミング言語のタイプ付け
Pythonは静的型付け言語であり、JavaScriptは動的型付け言語であるため、両言語の開発スタイルやエラーハンドリング方法が異なることになる。
2. 実行環境
Pythonは主にサーバーサイドでの使用を想定しており、JavaScriptはクライアントサイドでの使用を想定しているため、両言語の実行環境やセキュリティーに関する考慮が異なることになる。
3. 用途やアプリケーション開発での使われ方
Pythonはデータサイエンスや機械学習に強みを持つ一方、JavaScriptはWebアプリケーションの開発に強みを持つため、両言語の用途や開発スタイルが異なることになる。
以上の3点を把握することで、PythonとJavaScriptの違いを的確に捉えることができます。
3.「汎用的なAI agentツール」のworkflow
指示を出されるLLMは指示の内容に分岐があるとはいえ、LLMの処理としてやることはある程度同じのため、AI agentとしてツール化(別のworkflow)し、メインのworkflowから呼び出せるようにする。
本来は、google searchなどをできるようにノードを設定するべきだが、無料枠だと回数制限もあるため、実際にworkflowを作成する時に、設定する方針としている。(言い換えると、各自で設定してください。)
日本語で出力してください。
入力がどのような形式でも日本語のみで出力してください。
「命題」に対しての会話の返答を作成してください。
「命題」:{{#1715394478158.input_text#}}
日本語で出力してください。
入力がどのような形式でも日本語のみで出力してください。
「命題」に対しての質問の返答を作成してください。
「命題」:{{#1715394478158.input_text#}}
日本語で出力してください。
入力がどのような形式でも日本語のみで出力してください。
「命題」に対しての調査の返答を作成してください。
「命題」:{{#1715394478158.input_text#}}
入力:PythonとJavaScriptの違いについて
出力:
{
"input": "PythonとJavaScriptの違いについて",
"output": {
"output": "PythonとJavaScriptは、両方ともプログラミング言語ですが、異なる目的や特徴を持っています。\n\n**目的**\nPythonは、汎用のプログラミング言語であり、主にサーバーサイドアプリケーション、データ分析、機械学習、自動化ツール等に使用されます。一方、JavaScriptは、主にクライアントサイドスクリプト言語として、ウェブページの動的な操作やインタラクティブ性を高めるために使用されます。\n\n**構文**\nPythonの構文は、インデントを使用してブロックを定義し、コードの可読性を高めることに重点を置いています。一方、JavaScriptの構文は、C言語に似ており、ブロックは波括弧で囲まれます。\n\n**型システム**\nPythonは、静的型付け言語"
}
}
4.「役割を与えたAI agentツール」のworkflow
最終的なworkflowから呼び出される前提で、『3.「汎用的なAI agentツール」のworkflow』のプロンプトを修正する。
日本語で出力してください。
入力がどのような形式でも日本語のみで出力してください。
「命題」について調査するチームのメンバーAです。
「これまでのやり取り」を考慮して、「リーダーからのヒアリング事項」の会話の返答を作成してください。
「命題」:{{#1715394478158.input_text#}}
「リーダーからのヒアリング事項」: {{#1715394478158.question#}}
「これまでのやり取り」: {{#1715394478158.context#}}
日本語で出力してください。
入力がどのような形式でも日本語のみで出力してください。
「命題」について調査するチームのメンバーAです。
「これまでのやり取り」を考慮して、「リーダーからのヒアリング事項」の質問の返答を作成してください。
「命題」:{{#1715394478158.input_text#}}
「リーダーからのヒアリング事項」: {{#1715394478158.question#}}
「これまでのやり取り」: {{#1715394478158.context#}}
日本語で出力してください。
入力がどのような形式でも日本語のみで出力してください。
「命題」について調査するチームのメンバーAです。
「これまでのやり取り」を考慮して、「リーダーからのヒアリング事項」の調査の返答を作成してください。
「命題」:{{#1715394478158.input_text#}}
「リーダーからのヒアリング事項」: {{#1715394478158.question#}}
「これまでのやり取り」: {{#1715394478158.context#}}
入力:PythonとJavaScriptの違いについて,PythonとJavaScriptの違いについてまとめて,なし
出力:
{
"input": "PythonとJavaScriptの違いについて",
"output": {
"output": "以下は、リーダーからのヒアリング事項に対する返答です。\n\n PythonとJavaScriptは、両方ともプログラミング言語ですが、異なる設計目的、特徴、用途を持っています。\n\nまず、設計目的について、Pythonは汎用的なプログラミング言語として設計され、研究開発、機械学習、データ分析など幅広い分野で使用されています。一方、JavaScriptは、主にWebアプリケーションの開発に向けて設計されており、クライアントサイドのスクリプトや、サーバサイドのプログラミングに使用されています。\n\n次に、特徴について"
}
}
5.「役割を与えたLLM」と「役割を与えたAI agentツール」とのworkflow
LLMが複数回、別のLLMに指示を出すworkflowを構築する。
現状、Difyにループを綺麗に抜ける手段がないため、ループ処理としていないが、複数回同じ処理を呼び出し、最終的な出力の精度を向上する。
また、groqのAPIの無料枠では、毎分6000tokenが上限のため、ループ数や最大出力のトークン数を制限している。
日本語で出力してください。
入力がどのような形式でも日本語のみで出力してください。
あなたは「命題」について調査するチームのリーダーです。
メンバーAにヒアリングをしてください。
「命題」: {{#1715394478158.input_text#}}
日本語で出力してください。
入力がどのような形式でも日本語のみで出力してください。
「命題」について調査するチームのメンバーAです。
「リーダーからのヒアリング事項」に回答してください。
「命題」:{{#1715394478158.input_text#}}
「リーダーからのヒアリング事項」: {{#1716114640530.text#}}
やりとりを後続のLLMに渡せるようにコンテキストを作成するノードも追加している。
def main(arg1: string, arg2: string) -> dict:
return {
"result": "リーダー:" + arg1 + "メンバーA:" + arg2,
}
日本語で出力してください。
入力がどのような形式でも日本語のみで出力してください。
あなたは「命題」について調査するチームのリーダーです。
「リーダーからのヒアリング事項」はあなたが、前回メンバーAにヒアリングした内容です。
「メンバーの回答」と「これまでのやり取り」を考慮して必要があれば、再度メンバーAにヒアリングをしてください。
必要がなければ、ヒアリングすることはないことを伝えてください。
「命題」:{{#1715394478158.input_text#}}
「リーダーからのヒアリング事項」: {{#1716114640530.text#}}
「メンバーの回答」: {{#17208502438750.text#}}
「これまでのやり取り」: {{#context#}}
def main(arg1: string, arg2: string, arg3: string) -> dict:
return {
"result": "リーダー:" + arg1 + "メンバーA:" + arg2 + arg3,
}
日本語で出力してください。
入力がどのような形式でも日本語のみで出力してください。
あなたは「命題」について調査するチームのリーダーです。
「リーダーからのヒアリング事項」はあなたが、前回メンバーAにヒアリングした内容です。
「メンバーの回答」と「これまでのやり取り」を考慮して必要があれば、再度メンバーAにヒアリングをしてください。
必要がなければ、ヒアリングすることはないことを伝えてください。
「命題」:{{#1715394478158.input_text#}}
「リーダーからのヒアリング事項」: {{#17208876515800.text#}}
「メンバーの回答」: {{#1720976833010.text#}}
「これまでのやり取り」: {{#context#}}
def main(arg1: string, arg2: string, arg3: string) -> dict:
return {
"result": "リーダー:" + arg1 + "メンバーA:" + arg2 + arg3,
}
日本語で出力してください。
入力がどのような形式でも日本語のみで出力してください。
「命題」について調査するチームのリーダーです。
「これまでのやり取り」をもとに、「命題」についての回答を整理してください。
「命題」:{{#1715394478158.input_text#}}
「これまでのやり取り」: {{#context#}}
入力:PythonとJavaScriptの違いについて
出力:
メンバーA、始めましょう。PythonとJavaScriptの違いについて話を聞きたいと思います。
まず、PythonとJavaScriptのどちらを使った経験がありますか? はい、私は主にPythonを使用してきました。研究やデータ分析でのタスクでPythonを中心に使用してきたため、JavaScriptの経験はありません。ただし、Webアプリケーションの開発ではJavaScriptが必要不可欠なため、基本的な知識は持っています。メンバーA、ありがとうございます。前回のヒアリングでは、PythonとJavaScriptの違いについてお話しいただきました。特に、Pythonを中心に使用してきた研究やデータ分析でのタスクや、JavaScriptの基本的な知識についてお話しいただきました。
しかし、私たちは、PythonとJavaScriptの技術的な違いについてもう少し深く掘り下げたいと思います。具体的には、両言語の構文や、処理メンバーA、ありがとうございます。前回のヒアリングでは、PythonとJavaScriptの違いについてお話しいただきました。特に、Pythonを中心に使用してきた研究やデータ分析でのタスクや、JavaScriptの基本的な知識についてお話しいただきました。
しかし、私たちは、PythonとJavaScriptの技術的な違いについてもう少し深く掘り下げたいと思います。具体的には、両言語の構文や処理速度、「命題」:PythonとJavaScriptの違いについて
回答
PythonとJavaScriptは、プログラミング言語であり、両言語の技術的な違いについて以下のように整理することができます。
構文の違い
Pythonはインデントベースの構文を持ち、JavaScriptは括弧やセミコロンを使用した構文を持っています。Pythonの構文は、読みやすく、簡潔に書くことができます。一方、JavaScriptの構文は、柔軟性が高く、複雑なロジックを実現することができます。
処理速度の違い
Pythonは、インタプリタ型の言語であり、処理速度は比較的遅いです。一方、JavaScriptは、Just-In-Time(JIT)コンパイルにより、処理速度は高速です。
メモリー管理の違い
Pythonは、ガベージコレクションにより、メモリー管理を自動化しています。一方、JavaScriptは、マニュアルにメモリー管理を実施する必要があります。
オブジェクト指向プログラミングのアプローチの違い
Pythonは、強く型づけられた言語であり、オブジェクト指向プログラミングのアプローチを取り入れています。一方、JavaScriptは、弱く型づけられた言語であり、プロトタイプベースのオブジェクト指向プログラミングのアプローチを取り入れています。
以上のように、PythonとJavaScriptは、技術的な面で多くの違いを持っています。両言語の特徴を理解することで、適切な言語選択や開発効率の向上につながります。
構築したworkflowについて
意外とAI agentやLLM同士のworkflowが公開されていないようなので、今回のworkflowを構築した。
このworkflowはそのまま使うのではなく、このworkflowをベースに、タスクに合わせてworkflowをカスタマイズしていくことを想定している。
また、選定するLLMやgoogle search、RAGなども増設することで、より幅広いタスクをこなせる汎用性があると考えている。