マスター LLM エージェント:LangGraph と CrewAI を使用して複雑なワークフローを自動化する – オープンソース ハンドブック
AI ツールが少し…まあ、受動的だと感じたことはありませんか?彼らはただそこに座って、あなたの次の命令を待っているように?彼らが率先して大きな問題を解決し、協力して物事を成し遂げることができるかどうかを想像してみてください。
それはまさにLLMエージェントがテーブルにもたらすものです。これらは複雑なタスクを自動化する方法を変えており、まったく新しい方法で AI のアイデアを実現するのに役立ちます。
この記事では、LLM エージェントとは何か、その仕組み、そして素晴らしいオープンソース フレームワークを使用して独自のエージェントを構築する方法について説明します。
説明する内容:
<オル>LLM エージェントの現状
-
チャットボットから自律エージェントへ
-
エージェントは今日何ができるでしょうか?
-
ビルドに使用できるものは何ですか?
-
なぜ今が学ぶのに最適な時期なのか
LLM エージェントとは何ですか? なぜそれが重要なのでしょうか?
-
LLM とは何ですか?
-
それで、LLM エージェントとは何ですか?
-
なぜこれが重要なのでしょうか?
オープンソース エージェント フレームワークの台頭
-
人気のオープンソース エージェント フレームワーク
-
これらのツールでできること
-
最初から構築する代わりにフレームワークを使用する理由は何ですか?
エージェント設計の背後にある中心的な概念
-
エージェント ループ
-
エージェントの主要コンポーネント
-
マルチエージェントのコラボレーション
プロジェクト:メールから毎日のスケジュールを自動化する
-
私たちが自動化しているもの
-
ステップ 1:必要なツールをインストールする
-
ステップ 2:タスクを定義する
-
ステップ 3:LangGraph を使用してワークフローを構築する
CrewAI によるマルチエージェントのコラボレーション
-
CrewAI とは何ですか?
-
電子メール概要タスクのサンプル役割
-
CrewAI コードのサンプル
実行中に実際に何が起こるのでしょうか?
LLM エージェントは安全ですか?セキュリティとプライバシーについて知っておくべきこと
トラブルシューティングとヒント
日常の自動化をさらに詳しく見る
エージェント テクノロジーの次は何ですか?
最終的なまとめ
LLM エージェントの現状
LLM エージェントは、現在 AI で最もエキサイティングな開発の 1 つです。これらはすでに実際のタスクの自動化に役立っていますが、まだ進化しています。それで、今日はどこにいますか?
チャットボットから自律エージェントへ
GPT-4、Claude、Gemini、LLaMA などの大規模言語モデル (LLM) は、単純なチャットボットから驚くほど有能な推論エンジンに進化しました。彼らは、トリビアの質問に答えたりエッセイを作成したりすることから、複雑な推論を実行し、複数のステップの指示に従い、ウェブ検索やコード インタープリターなどのツールを操作するようになりました。
ただし、ここに問題があります。これらのモデルはリアクティブです。 。彼らは入力を待って出力を与えます。彼らはタスク間で記憶を保持したり、事前に計画を立てたり、自分で目標を追求したりすることはありません。それがLLM エージェントです。 彼らは、構造、記憶、自律性を追加することで、このギャップを埋めます。
エージェントは今日何ができるでしょうか?
現在、LLM エージェントはすでに次の目的で使用されています。
-
メールや文書の要約
-
毎日のスケジュールを計画する
-
DevOps スクリプトの実行
-
API またはツールで答えを検索する
-
小さな「チーム」で協力して複雑なタスクを完了する
しかし、それらはまだ完璧ではありません。エージェントは次のことを行うことができます。
-
ループにはまってしまう
-
目標を誤解する
-
詳細なプロンプトとガードレールが必要
それは、このテクノロジーがまだ初期段階にあるためです。フレームワークは急速に改善されていますが、信頼性とメモリはまだ開発中です。したがって、実験するときはそのことを念頭に置いてください。
今が学ぶのに最適な時期である理由
真実は、まだ早いということです。しかしあまりにもではありません
これは、エージェントの実験を始めるのに最適な時期です。
-
このツールは実際のプロジェクトを構築できるほど成熟しています
-
コミュニティは急速に成長しています
-
また、Python に慣れていれば AI の専門家である必要はありません
LLM エージェントとは何ですか?なぜそれが重要なのでしょうか?
エージェントのエキサイティングな世界に入る前に、基本についてもう少しお話しましょう。
LLM とは何ですか?
LLM (Large Language Model) は基本的に、書籍、記事、コードなど、インターネット上の大量のテキストから学習した AI です。これは、非常にスマートなオートコンプリート エンジンとしてイメージできます。しかし、単に文章を完成させるだけではありません。また、次のこともできます。
-
難しい質問に答える
-
長い記事やドキュメントを要約する
-
コード、メール、クリエイティブなストーリーを書く
-
言語を即座に翻訳
-
論理パズルを解いたり、魅力的な会話をしたりすることもできます
OpenAI の GPT モデルを利用した ChatGPT について聞いたことがあるかもしれません。他によく使われる LLM には、Claude (Anthropic 製)、LLaMA (Meta 製)、Mistral、Gemini (Google 製) などがあります。
これらのモデルは、文脈に基づいて文内の次の単語を単純に予測することで機能します。これは簡単そうに聞こえますが、数十億の単語を使ってトレーニングすると、LLM は驚くほど知的な行動が可能になり、指示を理解し、段階的な推論に従い、想像できるほぼすべてのトピックに対して一貫した応答を生み出すことができます。
LLM エージェントとは何ですか?
LLM は非常に強力ですが、 通常は反応するだけです。 彼らはあなたが何かを尋ねたときにのみ答えます。一方、LLM エージェントは積極的です。 .
LLM エージェントは次のことができます:
-
大きくて複雑なタスクを、より小さく管理しやすいステップに分割します
-
賢明な決断を下し、次に何をすべきかを考えましょう
-
ウェブ検索、電卓、さらには他のアプリなどの「ツール」を使用する
-
たとえ複数のステップや試行が必要であっても、目標に向かって取り組みます
-
他のエージェントとチームを組んで共通の目標を達成します
つまり、LLM エージェントは考え、計画し、行動し、適応することができます。
LLM エージェントを、非常に効率的な新しいアシスタントのようなものだと考えてください。目標を与えると、それをすべて自力で達成する方法を見つけ出します。
なぜこれが重要なのでしょうか?
単に対応するだけから積極的に目標を追求するというこの変化により、たくさんのエキサイティングな可能性が開かれます。
-
退屈な IT タスクや DevOps タスクを自動化する
-
生データから詳細なレポートを生成する
-
複数段階の研究プロジェクトを支援
-
毎日のメールに目を通し、重要な情報を強調表示する
-
内部ツールを実行して実際のアクションを実行する
以前のルールベースのボットとは異なり、LLM エージェントは、試行を推論し、反映し、そこから学習することができます。これにより、煩雑で柔軟性が必要で、コンテキストの理解に依存する現実世界のタスクに非常に適しています。
オープンソース エージェント フレームワークの台頭
少し前までは、自律的に動作する AI システムを構築したい場合、大量のカスタム コードを作成し、メモリを丹念に管理し、数十のコンポーネントをつなぎ合わせようとする必要がありました。それは複雑かつ繊細で、高度に専門化された仕事でした。
でも、どうだろう?もうそうではありません。
2024 年、素晴らしいオープンソース フレームワークの波が登場しました。これらのツールにより、毎回車輪の再発明をする必要がなく、強力な LLM エージェントの構築が劇的に簡単になりました。
人気のオープンソース エージェント フレームワーク
フレームワーク 説明 メンテナ LangGraphエージェントの状態とメモリのためのグラフベースのフレームワークLangChainCrewAI「ロールベースのマルチエージェントコラボレーションエンジン」コミュニティ(CrewAI)AutoGenカスタマイズ可能なマルチエージェントチャットオーケストレーションMicrosoftAgentVerseエージェントのシミュレーションとテストのためのモジュラーフレームワークオープンソースプロジェクトこれらのツールでできること
これらのフレームワークは、エージェント作成の難しい部分を処理するための既製のビルディング ブロックを提供します。
-
計画 – エージェントに次の行動を決定させます
-
ツールの使用 – エージェントをファイル システム、Web ブラウザ、API、データベースなどに簡単に接続
-
記憶 – 長期的なコンテキストのための過去の情報または中間結果の保存と取得
-
複数エージェントのコラボレーション – 共通の目標に向けて協力するエージェントのチームを設定する
最初から構築するのではなくフレームワークを使用する理由
あなたができる間に カスタム エージェントをゼロから構築する場合、フレームワークを使用すると、時間と労力を大幅に節約できます。オープンソース エージェント ライブラリには次のものが含まれています。
-
LLM のオーケストレーションのための組み込みサポート
-
タスクの計画、現在地の追跡、フィードバックの取得のための実証済みのパターン
-
OpenAI などの人気のあるモデル、またはローカルで実行するモデルと簡単に統合
-
1 人の親切なエージェントからエージェントのチーム全体まで成長できる柔軟性
基本的に、これらのフレームワークを使用すると、エージェントが行うべきことに集中できます。 すべての内部動作を構築する方法に行き詰まるのではなく、さらに、オープンソースを選択するということは、単一のベンダーに縛られることなく、コミュニティの貢献、その仕組みの透明性、正確なニーズに合わせて調整する自由から恩恵を受けることを意味します。
エージェント設計の背後にある中心的な概念
LLM エージェントがどのように動作するかを実際に理解するには、LLM エージェントを、観察、推論、行動を常に繰り返す目標駆動型のシステムとして考えると役立ちます。この継続的なループにより、単純な質問と回答を超えて、真の自動化、ツールの使用、臨機応変な適応に移行するタスクに取り組むことができます。
エージェント ループ
ほとんどの LLM エージェントはエージェント ループと呼ばれるメンタル モデルに基づいて機能します。 ジョブが完了するまで繰り返される段階的なサイクル。通常の動作は次のとおりです。
-
認識: エージェントは、周囲の何かに気づくか、新しい情報を受け取ることから始まります。これは、プロンプト、データ、またはシステムの現在の状態である可能性があります。
-
計画: エージェントは、認識した内容と全体的な目標に基づいて、次に何を行うかを決定します。タスクを小さなサブ目標に分割したり、そのジョブに最適なツールを見つけたりする可能性があります。
-
行動: その後、エージェントが行動します。これは、関数の実行、API の呼び出し、ウェブの検索、データベースの操作、あるいは他のエージェントに助けを求めることを意味する場合もあります。
-
反映: 行動した後、エージェントは結果を確認します。「うまくいきましたか?」結果は役に立ちましたか?別のアプローチを試すべきでしょうか?これに基づいて計画を更新し、タスクが完了するまで続行します。
このループにより、エージェントは非常に動的になります。これにより、生徒は刻々と変化するタスクを処理し、部分的な結果から学習し、真に有用な AI アシスタントを構築するために不可欠なコースの質を修正することができます。
エージェントの主要コンポーネント
仕事を効果的に遂行するために、エージェントはいくつかの重要な部分を中心に構築されています。
-
ツール エージェントが現実 (またはデジタル) 世界とどのように対話するかです。これらには、検索エンジン、コード実行環境、ファイル リーダー、API クライアントから、単純な計算機やコマンドライン スクリプトまで、あらゆるものが含まれます。
-
記憶 エージェントは、さまざまなステップにわたって自分が行ったこと、または見たことを思い出すことができます。これには、以前に発言した内容、一時的な結果、または重要な決定が含まれる場合があります。一部のフレームワークは短期記憶 (1 セッションのみ) を提供しますが、他のフレームワークは複数のセッションまたは目標にまたがる長期記憶をサポートします。
-
環境 エージェントが API、ドキュメント、データベース、ファイル、またはセンサー入力内で操作する外部データまたはシステム コンテキストを指します。エージェントがその環境に対して持つ情報とアクセスが増えるほど、より有意義なアクションを実行できるようになります。
-
目標 エージェントの最終的な目的、つまりエージェントが達成しようとしていることです。目標は具体的かつ明確にする必要があります。たとえば、「毎日のスケジュールを作成する」、「この文書を要約する」、「メールからタスクを抽出する」などです。
マルチエージェントのコラボレーション
より高度なシステムの場合は、複数のエージェントを連携させて共有のターゲットを達成することもできます。各エージェントには特定の役割を与えることができます。 チームで働く人々と同じように、その専門性を強調します。
例:
-
研究者エージェント 情報収集の任務を負っている可能性があります。
-
コーダー エージェント Python スクリプトまたは自動化ルーチンを作成できます。
-
レビュー担当者 結果をチェックして、すべてが順調に進んでいることを確認するかもしれません。
これらのエージェントは互いにチャットしたり、情報を共有したり、決定について議論したり投票したりすることもできます。この種のチームワークにより、AI システムは物事を組織化してモジュール化した状態で、より大規模で複雑なタスクに取り組むことができます。
プロジェクト:メールから毎日のスケジュールを自動化する
私たちが自動化しているもの
あなたの典型的な朝の日課を考えてみましょう。
-
受信箱を開きます。
-
大量のメールにすばやく目を通します。
-
あなたは会議、タスク、重要なリマインダーを見つけようとします。
-
次に、ToDo リストを手動で作成するか、カレンダーに項目を追加します。
LLM エージェントを使用して、そのプロセスを簡単にしましょう。私たちのエージェントは次のことを行います:
-
電子メール メッセージのリストを読む
-
会議や締め切りなど、時間に敏感な項目を取り出す
-
すべてを素敵でクリーンな毎日のスケジュールにまとめます
ステップ 1:必要なツールをインストールする
始めるには、Python、VSCode、OpenAI API キーという 3 つの主要なツールが必要です。
1. Python 3.9 以降をインストールします
公式 Web サイトから Python 3.9 以降の最新バージョンを入手します:https://www.python.org/downloads/
インストールしたら、python --version を実行して再確認します。
このコマンドは、現在インストールされている Python のバージョンを報告するようにシステムに要求するだけです。私たちのプロジェクトとの互換性を確保するには、Python 3.9.x 以降を参照してください。
2. VSCode をインストールします (オプションですが推奨)
VSCode は、Python と完全に連携する、素晴らしく使いやすいコード エディターです。ここからダウンロードできます:https://code.visualstudio.com/。
3. OpenAI API キーを取得します
https://platform.openai.com
にアクセスしてください。サインインするか、新しいアカウントを作成します。 API キーページに移動します。 [新しい秘密キーを作成] をクリックし、後で使用できるようにそのキーを安全な場所にコピーしてください。
4. Python ライブラリをインストールする
ターミナルまたはコマンド プロンプトを開き、次の必須パッケージをインストールします。
pip install langgraph langchain openai
このコマンドは、Python のパッケージ マネージャーである pip を使用して、エージェント用の 3 つの重要なライブラリをダウンロードしてインストールします。
-
langgraph:エージェントのワークフローを構築するために使用するコア フレームワーク。
-
langchain:大規模な言語モデルを操作するための基礎的なライブラリであり、LangGraph はその上に構築されます。
-
openai:OpenAI の強力な AI モデルに接続するための公式 Python ライブラリ。
マルチエージェント設定 (ステップ 5 で説明します) を試してみたい場合は、CrewAI もインストールしてください。
pip install crewai
このコマンドは、チームとして連携する複数の AI エージェントの調整を容易にする特殊なフレームワークである CrewAI をインストールします。
5. OpenAI API キーを設定します。
Python コードが OpenAI API キーを見つけて使用できることを確認する必要があります。これは通常、環境変数として設定することによって行われます。
macOS/Linux では、ターミナルでこれを実行します (「your-api-key」を実際のキーに置き換えます)。
export OPENAI_API_KEY="your-api-key"
このコマンドは、OPENAI_API_KEY という名前の環境変数を設定します。環境変数は、アプリケーション (Python スクリプトなど) が機密情報をコード自体に直接ハードコードせずにアクセスできる安全な方法です。
Windows では (コマンド プロンプトを使用)、これを実行します。
set OPENAI_API_KEY="your-api-key"
これは、OPENAI_API_KEY を設定するための Windows と同等のコマンドです。 環境変数。
これで、Python コードが OpenAI モデルと通信するようにすべて設定されました!
ステップ 2:タスクを定義する
これについては、このセクションの冒頭で簡単に説明しました。ただし、繰り返しになりますが、これがエージェントに実行してもらいたいことです。
-
会議、イベント、重要なタスクをスキャンします。
-
ノートやアプリにすばやく書き留めてください。
-
その日の大まかな計画を精神的に立ててください。
このルーチンには時間と精神的エネルギーがかかります。したがって、エージェントにそれをやってもらうと非常に役立ちます。
ステップ 3:LangGraph を使用してワークフローを構築する
LangGraph とは何ですか?
LangGraph は、フローチャートを描くような「グラフベース」のワークフローを使用してエージェントを構築するのに役立つ優れたフレームワークです。これは LangChain を利用しており、エージェントのプロセスの各ステップがどのように展開するかを正確に制御できるようになります。
このグラフの各「ノード」は、次のような決定点または機能を表します。
-
入力 (現在の「状態」) を受け取ります。
-
何らかの推論を行うか、アクションを実行します (多くの場合、LLM とそのツールが関係します)。
-
更新された出力 (新しい「状態」) を返します。
これらのノード間の接続を描画すると、LangGraph はスマートな自動ステート マシンのようにそれを実行します。
LangGraph を使用する理由
-
実行順序を正確に制御できるようになります。
-
これは、複数のステップが含まれたり、異なるパスに分岐したりするワークフローを構築するのに最適です。
-
クラウドベースのモデル (OpenAI など) とローカルで実行するモデルの両方でうまく動作します。
わかりました。コードを書きましょう。
1.メール入力のシミュレーション
実際のアプリケーションでは、エージェントはおそらく Gmail または Outlook に接続して実際の電子メールを取得します。ただし、この例では、物事をシンプルにするために、いくつかのサンプル メッセージをハードコードするだけです。
Python
emails = """
1. Subject: Standup Call at 10 AM
2. Subject: Client Review due by 5 PM
3. Subject: Lunch with Sarah at noon
4. Subject: AWS Budget Warning – 80% usage
5. Subject: Dentist Appointment - 4 PM
"""
この複数行の Python 文字列、emails は、実際の電子メール コンテンツの代役として機能します。エージェントがテキストをどのように処理するかを示すために、メール件名のシンプルで構造化されたリストを提供しています。
2.エージェント ロジックを定義する
ここで、OpenAI の GPT モデルに、このメール テキストを処理して概要に変換する方法を指示します。
from langchain_openai import ChatOpenAI
from langgraph.graph import StateGraph, END
from typing import TypedDict, Annotated, List
import operator
# Define the state for our graph
class AgentState(TypedDict):
emails: str
result: str
llm = ChatOpenAI(temperature=0, model="gpt-4o") # Using gpt-4o for better performance
def calendar_summary_agent(state: AgentState) -> AgentState:
emails = state["emails"]
prompt = f"Summarize today's schedule based on these emails, listing time-sensitive items first and then other important notes. Be concise and use bullet points:\n{emails}"
summary = llm.invoke(prompt).content
return {"result": summary, "emails": emails} # Ensure emails is also returned
何が起こっているかは次のとおりです。
-
輸入 :必要なコンポーネントを持ち込みます:
-
ChatOpenAILLM に接続するには、 -
StateGraphとENDlanggraph.graphから エージェントのワークフローを構築するため、 -
TypedDict、Annotated、Listtypingから 型チェックと構造用、 -
operator(このスニペットでは使用されていませんが、比較やロジックに役立ちます)。
-
-
エージェントの状態 :この
TypedDictエージェントが扱うデータの形式を定義します。これには以下が含まれます:-
emails:生の入力メッセージ。 -
result:最終出力 (毎日の概要)。
-
-
llm =ChatOpenAI(...) :言語モデルを初期化します。
temperature=0で GPT-4o を使用しています 構造化された要約タスクに最適な、一貫性のある予測可能な出力を保証します。 -
calendar_summary_agent(状態:AgentState) :この機能はエージェントの「頭脳」です。それ:
-
電子メールのリストを含む現在の状態を取得します。
-
その状態から電子メールを抽出します。
-
時間に敏感な項目を優先し、箇条書きを使用して簡潔な毎日のスケジュールの概要を生成するようにモデルに指示するプロンプトを構築します。
-
このプロンプトを
llm.invoke(prompt).contentを使用してモデルに送信します。 、LLM の応答をプレーン テキストとして返します。 -
新しい
AgentStateを返します。 以下を含む辞書:-
result:生成された概要、 -
emails:ダウンストリームで必要になった場合に備えて保存されます。
-
-
3.グラフの構築と実行
ここで、LangGraph を使用して単一エージェント タスクのフローを計画し、それを実行しましょう。
builder = StateGraph(AgentState)
builder.add_node("calendar", calendar_summary_agent)
builder.set_entry_point("calendar")
builder.set_finish_point("calendar") # END is implicit if not set explicitly
graph = builder.compile()
# Run the graph using your simulated email data
result = graph.invoke({"emails": emails})
print(result["result"])
何が起こっているかは次のとおりです。
-
ビルダー =StateGraph(AgentState): StateGraph オブジェクトを開始しています。 AgentState を渡すことで、LangGraph に内部状態の予想されるデータ構造を伝えます。
-
builder.add_node("calendar", Calendar_summary_agent): この行は、名前付きの「ノード」をグラフに追加します。これを「カレンダー」と呼び、
calendar_summary_agentにリンクします。 function。このノードがアクティブなときに関数が実行されることを意味します。 -
builder.set_entry_point("カレンダー"): これにより、ワークフローの最初のステップとして「カレンダー」が設定されます。グラフを開始すると、ここから実行が始まります。
-
builder.set_finish_point("カレンダー"): これにより、「カレンダー」ノードがジョブを完了すると、グラフ プロセス全体が完了することが LangGraph に伝えられます。
-
グラフ =builder.compile(): このコマンドは、定義されたグラフ ブループリントを取得し、それを実行可能なワークフローに「コンパイル」します。
-
結果 =graph.invoke({"メール":メール}): ここで魔法が起こります。グラフに実行を開始するように指示しています。電子メール データを含む初期状態を渡します。その後、グラフはノードを通じてこのデータを終点に到達するまで処理し、最終状態を返します。
-
print(result["result"]): 最後に、結果 (グラフの最終状態) から要約されたスケジュールを取得し、コンソールに出力します。
出力例
Your Schedule:
- 10:00 AM – Standup Call
- 12:00 PM – Lunch with Sarah
- 4:00 PM – Dentist Appointment
- Submit client report by 5:00 PM
- AWS Budget Warning – check usage
ドーン!メールを読んで毎日のスケジュールを調整できる AI エージェントを構築しました。かなりクールですよね?これは、LLM エージェントがわずか数行のコードで実行できることを示す、シンプルかつ強力な方法です。
CrewAI によるマルチエージェントのコラボレーション
CrewAI とは何ですか?
CrewAI は、チームを構築できるエキサイティングなオープンソース フレームワークです。 現実世界のプロジェクト チームと同じようにシームレスに連携するエージェントの数です。 CrewAI セットアップ内の各エージェント:
-
特定の専門化された役割を持ちます。
-
チームメイトと通信し、情報を共有できます。
-
共通の目標を達成するために協力します。
このマルチエージェントのアプローチは、タスクが 1 人のエージェントでは大きすぎる場合や複雑すぎる場合、またはタスクを専門的な部分に分割してより明確かつ効率的にする場合に非常に役立ちます。
電子メール概要タスクのサンプル ロール
電子メールの概要タスクが、少数のエージェント チームによって処理されると想像してみましょう。
エージェント名 役割 責任 ExtractorEmail Scanner「メールから会議、リマインダー、タスクを検索する」PrioritizerSchedule Optimizer 項目を緊急度と時間で並べ替えるFormatterOutput Generator「クリーンで洗練された毎日の予定を書く」CrewAI コードのサンプル
from crewai import Agent, Crew, Task, Process
from langchain_openai import ChatOpenAI
import os
# Set your OpenAI API key from environment variables
# os.environ["OPENAI_API_KEY"] = "YOUR_API_KEY" # Make sure this is set, or defined directly
# Initialize the LLM (using gpt-4o for better performance)
llm = ChatOpenAI(temperature=0, model="gpt-4o")
# Define the agents with specific roles and goals
extractor = Agent(
role="Email Scanner",
goal="Find all meetings, reminders, and tasks from the given emails, accurately extracting details like time, date, and subject.",
backstory="You are an expert at scanning emails for key information. You meticulously extract every relevant detail.",
verbose=True,
allow_delegation=False,
llm=llm
)
prioritizer = Agent(
role="Schedule Optimizer",
goal="Sort extracted items by urgency and time, preparing them for a daily agenda.",
backstory="You are a master of time management, always knowing what needs to be done first. You organize tasks logically.",
verbose=True,
allow_delegation=False,
llm=llm
)
formatter = Agent(
role="Output Generator",
goal="Generate a clean, polished, and concise daily agenda in bullet-point format, clearly listing all schedule items.",
backstory="You are a professional secretary, ensuring all outputs are perfectly formatted and easy to read. You prioritize clarity.",
verbose=True,
allow_delegation=False,
llm=llm
)
# Simulate email input
emails = """
1. Subject: Standup Call at 10 AM
2. Subject: Client Review due by 5 PM
3. Subject: Lunch with Sarah at noon
4. Subject: AWS Budget Warning – 80% usage
5. Subject: Dentist Appointment - 4 PM
"""
# Define the tasks for each agent
extract_task = Task(
description=f"Extract all relevant events, meetings, and tasks from these emails: {emails}. Focus on precise details.",
agent=extractor,
expected_output="A list of extracted items with their details (e.g., '- Standup Call at 10 AM', '- Client Review due by 5 PM')."
)
prioritize_task = Task(
description="Prioritize the extracted items by time and urgency. Meetings first, then deadlines, then other notes.",
agent=prioritizer,
context=[extract_task], # The output of extract_task is the input here
expected_output="A prioritized list of schedule items."
)
format_task = Task(
description="Format the prioritized schedule into a clean, easy-to-read daily agenda using bullet points. Ensure concise language.",
agent=formatter,
context=[prioritize_task], # The output of prioritize_task is the input here
expected_output="A well-formatted daily agenda with bullet points."
)
# Instantiate the crew
crew = Crew(
agents=[extractor, prioritizer, formatter],
tasks=[extract_task, prioritize_task, format_task],
process=Process.sequential, # Tasks are executed sequentially
verbose=2 # Outputs more details during execution
)
# Run the crew
result = crew.kickoff()
print("\n########################")
print("## Final Daily Agenda ##")
print("########################\n")
print(result)
何が起こっているかは次のとおりです。
-
インポート: CrewAI から主要なクラスである Agent、Crew、Task、および Process を導入します。
ChatOpenAIもインポートします 言語モデルと OS が環境変数を処理できるようにします。 -
llm =ChatOpenAI(...): LangGraph の例と同様に、これにより OpenAI 言語モデルが設定され、その応答が直接 (温度=0) であることを確認し、gpt-4o モデルを使用します。
-
エージェント定義 (抽出、優先順位付け、フォーマッタ):
-
これらの各変数はエージェント インスタンスを作成します。エージェントは、その役割 (何をするか)、達成しようとしている特定の目標、およびバックストーリー (LLM がその目的をより深く理解するのに役立つ一種の性格や専門知識) によって定義されます。
-
verbose=True は、エージェントが作業中に「考え」を出力できるため、デバッグに非常に役立ちます。
-
allow_delegation=False は、これらのエージェントが自分に割り当てられたタスクを他のエージェントに渡さないことを意味します (ただし、より複雑な委任シナリオではこれを True に設定できます)。
-
llm=llm は、各エージェントを OpenAI 言語モデルに接続します。
-
-
シミュレートされたメール: この例では、同じサンプル電子メール データを再利用します。
-
タスク定義 (extract_task、priority_task、format_task):
-
各タスクは、エージェントが実行する必要がある特定の作業を定義します。
-
説明では、エージェントにタスクの内容が明確に示されています。
-
エージェントは、このタスクを定義されたエージェントの 1 つに割り当てます (extract_task のエクストラクターなど)。
-
context=[...] は、CrewAI のコラボレーションの重要な部分です。タスクに出力を使用するように指示します。 前のタスクの入力として 。たとえば、priority_task は、extract_task の出力をコンテキストとして受け取ります。
-
Expected_output は、エージェントに結果がどのようになるかについてのアイデアを提供し、LLM のガイドに役立ちます。
-
-
乗組員 =乗組員(...):
-
ここが私たちのチームを集める場所です! Crew インスタンスを作成し、それにエージェントとタスクのリストを与えます。
-
process=Process.sequential は、タスク リストで定義されている順序でタスクを次々に実行するようにスタッフに指示します。 CrewAI は、階層プロセスなどのより高度なプロセスもサポートしています。
-
verbose=2 は、乗組員の内部作業とコミュニケーションに関する非常に詳細なログを表示します。
-
-
結果 =crew.kickoff(): このコマンドは、マルチエージェント ワークフロー全体を正式に開始します。エージェントは共同作業を開始し、情報を渡し、割り当てられたタスクを順番に実行していきます。
-
fprint(結果): 最後に、スタッフ全員の共同作業から得られた統合された出力がコンソールに出力されます。
CrewAI は、エージェント間のすべてのコミュニケーションを巧みに処理し、誰がいつ何を行う必要があるかを把握し、あるエージェントから次のエージェントに出力をスムーズに渡します。まるでミニ AI 組立ラインを持っているかのようです。
実行中に実際に何が起こるのですか?
では、LangGraph を使用しているか、CrewAI を使用しているかに関係なく、エージェントの実行時に舞台裏で実際に何が起こっているのでしょうか?実行プロセスを詳しく見てみましょう。
-
システムは入力状態を取得します。 (メールなど)。
-
最初のエージェントまたはグラフ ノードはこの入力を読み取り、大規模言語モデル (LLM) を使用します。 意味を理解するために。
-
エージェントはその理解に基づいてアクションを決定します。 重要なイベントを取り出したり、特定のツールを呼び出したりするなど。
-
必要に応じて、 エージェントはツールを呼び出す場合があります。 (Web 検索やファイル リーダーなど) より多くのコンテキストを取得したり、外部操作を実行したりできます。
-
そのアクションの結果は次のエージェントに渡されます。 チーム内で(マルチエージェント設定の場合)、または直接自分に返されます。
実行は次の状態になるまで継続されます。
-
タスクは完全に完了しました。
-
すべてのエージェントは割り当てられた役割を終えました。
-
停止条件、またはワークフロー内の指定された「終了」ポイントに到達しました。
これは、すべてのステップに推論、意思決定、以前のやり取りの記憶が含まれる、非常にスマートなワークフロー エンジンと考えてください。
LLM エージェントは安全ですか?セキュリティとプライバシーについて知っておくべきこと
LLM エージェントはクールですが、ワークフローの一部を実行したり、データを操作したりする AI を本当に信頼できますか? という重要な疑問も生じます。 それは状況によります。 OpenAI や Anthropic などのサービスを使用している場合、データは転送中に暗号化され、(現時点では)トレーニングには使用されません。
ただし、悪用を防ぐために一部のデータが一時的に記録される場合があります。テストや個人的なプロジェクトの場合は通常これで問題ありませんが、機密性の高いビジネス情報、顧客データ、その他プライベートなものを扱う場合は注意が必要です。
完全な制御が重要な場合は、匿名化された入力を使用し、完全なデータセットの公開を避け、LLaMA や Mistral などのオープンソース モデルを使用してエージェントをローカルで実行することを検討してください。
エージェントが踏み越えないように明確な境界線を設定することもできます。新しいインターンのオンボーディングのようなものだと考えてください。初日からすべてにアクセスできるようにすることはありません。
エージェントには必要なツールとファイルのみを提供し、エージェントの行動のログを記録し、実際の変更を加える前に必ず結果を確認してください。
このテクノロジーが成長するにつれて、サンドボックス化、メモリ制限、ロールベースのアクセスなど、より多くの安全機能が追加されます。しかし今のところ、エージェントを人間の監督が必要な強力なヘルパーとして扱うのが賢明です。
トラブルシューティングとヒント
エージェントは少し風変わりな場合もあります。ここでは、発生する可能性のある一般的な問題とその解決方法をいくつか示します。
問題 提案される修正 エージェントが永遠にループしているようです。最大反復回数を設定するか、より明確な停止ポイントを定義してください。出力が冗長または冗長すぎるため、より具体的なプロンプトを使用してください (たとえば、「箇条書きのみで応答してください」)。入力が長すぎるか、途切れてしまいます。大きなコンテンツを小さなチャンクに分割し、個別に要約してください。エージェントの実行が遅すぎます。gpt-3.5 などの高速な LLM モデルを使用してみるか、ローカル モデルの実行を検討してください。便利なヒント:各ステージで何が起こっているかを確認し、状態遷移をデバッグするために、エージェント関数内に print() ステートメントまたはログ メッセージを追加することもできます。
日常の自動化をさらに詳しく見る
エージェントベースのタスクを 1 つ構築したら、そのパターンを他の自動化に適応させるのが驚くほど簡単であることがわかります。創造力を発揮するための素晴らしいアイデアをいくつか紹介します。
タスクの種類 自動化の例 DevOps アシスタント「システム ログを読み取り、潜在的な問題を検出し、解決策を提案します。」ファイナンス トラッカー銀行取引明細書または CSV ファイルを読み取り、支出習慣や予算を要約します。会議オーガナイザー会議後、アクション アイテムを自動的に抽出し、所有者を割り当てます。受信トレイ クリーナー「緊急でない電子メールに自動的にラベルを付け、アーカイブし、削除します。」メモ サマライザー毎日のメモをきちんとフォーマットされた To Do リストまたは概要に変換します。リンク チェッカードキュメントから URL を抽出し、それらはまだ有効です。Resume FormatterScore はジョブの説明に対して再開し、自動的にフォーマットします。これらはそれぞれ、LangGraph であれ CrewAI であれ、説明したのとまったく同じ原則とフレームワークを使用して構築できます。
エージェント テクノロジーの次は何ですか?
LLM エージェントは電光石火のスピードで進化しており、次のイノベーションの波はすでに到来しています。
-
よりスマートなメモリ システム :エージェントの長期記憶力が向上し、長期間にわたって学習し、過去の会話や行動を記憶できるようになると期待されます。
-
マルチモーダル エージェント :エージェントはもうテキストを処理するだけではありません。画像、音声、ビデオを処理して理解できるようになり、さらに多用途になります。
-
高度な計画フレームワーク :ReAct、Toolformer、AutoGen などの技術により、エージェントが推論し、計画を立て、厄介な「幻覚」を軽減する能力が常に向上しています。
-
エッジ展開 :LLaMA 3 や Mistral などの軽量モデルを使用して、ローカル コンピュータまたはデバイス上でエージェントが完全にオフラインで実行されていると想像してください。
近い将来、エージェントは以下のものにシームレスに統合されるでしょう。
-
DevOps パイプライン
-
大企業のワークフロー
-
日常の生産性ツール
-
モバイル アプリとスマート デバイス
-
ゲーム、シミュレーション、教育プラットフォーム
最終的なまとめ
それでは、これまでに学び、達成した素晴らしいことを簡単にまとめてみましょう。
-
LLM エージェントとは何か、そしてなぜ LLM エージェントが非常に強力であるのかをしっかりと理解できました。
-
LangGraph や CrewAI などのオープンソース フレームワークを使用すると、エージェントの構築がいかに簡単になるかがわかりました。
-
LangGraph を使用して、受信トレイの要約という一般的な日常タスクを自動化する実際の LLM エージェントを構築しました。
-
CrewAI を使用してマルチエージェント コラボレーションの世界を探索し、AI のチームがどのように連携できるかを理解しました。
-
これらの原則を活用し、それを拡張して他の無数のタスクを自動化する方法を学びました。
したがって、次回何か繰り返しの作業に行き詰まったときは、「そのためのエージェントを構築できるでしょうか?」と自問してください。答えはおそらくイエスです!
リソースの要約
LLM エージェントの構築をさらに詳しく知りたい場合に役立つリソースをいくつか紹介します。
無料でコーディングを学びましょう。 freeCodeCamp のオープンソース カリキュラムは、40,000 人以上の人々が開発者としての職に就くのに役立ちました。始めましょう
-
Bash Shell PS1:Angelina Jolie のような Linux プロンプトを作成する 10 の例
f1r3storm85 提供の写真 前回の記事では、Linux 環境変数 PS[1-4] と PROMPT_COMMAND について説明しました。効果的に使用すれば、PS1 はコマンド プロンプトですぐに貴重な情報を提供できます。 トゥーム レイダーでは、アンジェリーナ ジョリーがすべてのガジェットと武器を指先で操作して、スタイリッシュに謎を解き明かします。アンジェリーナ・ジョリーのガジェットとスタイルは一致させるのが難しいですが、少なくとも、この記事で提供されている 10 の例を使用して、古き良き Linux プロンプトを非常に機能的でスタイリッシュなものにしてみましょう. 1.ユー
-
GTD で生産性をマスターする:物事を成し遂げるための実証済みのガイド
好きなことをするためにもっと時間が必要ですか?もちろん、そうですよね。オタクにとっては取り組むべき技術プロジェクトが山ほどありますが、時間が足りません。 長年にわたり、私は時間管理や生産性向上のシステムをいくつか試してきました。それらはすべて私の成長を助けてくれましたが、それらのシステムには私の働き方や考え方と合わないところがありました。 数年前、David Allen の Getting Things Done (GTD) に出会い、すぐにそれが私の働き方と考え方にぴったりだと感じました。 GTD なしの生活はもう想像できません。 GTD は、生産性を高めるためにどのソフトウェアやツー