「OpenAIやLM Studioに頼らずにAutoGenを使用する方法」
「OpenAIやLM Studioに頼らずにAutoGenを使う美容とファッションの方法」
イントロダクション
OpenAIやLMスタジオに頼らずに、あなた自身のAIチームを作成する準備はできていますか?もはや銀行を荒らすことも、アプリをダウンロードすることもありません。llama-cpp-pythonの設定から、autogenフレームワークのヘルプを借りてローカルLLMのパワーを探求するまで。OpenAI APIに依存せず、Autogenのフルポテンシャルを引き出す準備をしましょう。
学習目標
詳細に入る前に、この記事の主な学習目標を概説しましょう:
- さまざまなAIライブラリとツールを評価・比較する方法を学ぶ。
- llama-cpp-pythonがOpenAI APIの代替として提供できる方法を探索する。
- 2つの現実世界の使用例で獲得した知識を適用する: アルゴリズムメンターチームの構築と金融チャート生成の自動化。
- AutoGenの改善されたユーザーエクスペリエンスを探索し、統合されたIPythonを通じて即時のコード実行結果を得る。
この記事はData Science Blogathonの一環として公開されました。
ツール紹介: llama-cpp-python、AutoGen、およびローカルLLM
しかし、このテックツールキットの特別な点は何でしょうか? llama-cpp-pythonは、LLMAのような有名なモデルを含めて、ローカルでLLMを実行するためのゲートウェイです。コンピュータ上にAIのスーパースターがいるようなもので、さまざまなBLASバックエンドのサポートにより、速度は驚異的です!
AutoGen
AutoGenは、基盤モデルを使用するための高レベルな抽象化として機能する統一されたマルチエージェント会話フレームワークです。LLM、ツール、および人間の参加者を統合し、自動化されたチャットを通じて能力のある、カスタマイズ可能で会話形式のエージェントを結合します。エージェント同士が自律的にコミュニケーションして共同作業を行うことができ、複雑なタスクを効率的に進めることやワークフローを自動化することが可能です。
もしAutoGenの機能をより深く探求し、戦略的なAIチームビルディングをどのように支援するかを調べることに興味があるなら、当社の専用ブログ「Strategic AI Team Building Made Easy with AutoGen.」をご覧ください。この包括的なリソースでは、インサイト、使用例、およびAutoGenがAI開発へのアプローチを変革する方法について詳しく説明しています。
ライブラリ/ツール
一部のライブラリ/ツールは、OpenAI APIの代替として機能するWebサーバーを提供します。
これ以外にも選択肢はありますが、最適なものは好みやニーズによります。
Llama-cpp-python
Llama-cpp-pythonは、llama.cppライブラリのPythonバインディングです。ctypesインタフェースを介したC APIへの低レベルなアクセス、テキスト補完のための高レベルなPython API、OpenAIのようなAPI、およびLangChain互換の高レベルPython APIを提供します。高速処理のために複数のBLASバックエンドをサポートし、ハードウェアアクセラレーションもサポートしています。
llama-cpp-pythonは、OpenAI互換のクライアント(言語ライブラリ、サービスなど)でllama.cpp互換モデルを使用するためのドロップイン代替として機能するWebサーバーを提供します。
開発
このプロジェクトでは、以下のツールとライブラリを使用します:
- Google Colab
- Autogen
- llama-cpp-python
- ローカルLLM
- codellama-7b-instruct.Q5_K_M.gguf
開発環境のセットアップ
仮想環境の作成
仮想環境はプロジェクト固有の依存関係を隔離し、システム全体のパッケージとの競合を避けるための良い実践です。Pythonの環境を設定する方法は以下の通りです:
Venv
python -m venv env_name
- 仮想環境をアクティベートする:
\env_name\Scripts\activate
- macOSとLinuxの場合:
source env_name/bin/activate
以下のコマンドで現在のvenv環境を無効にします:
deactivate
必須の依存関係
1. リポジトリのクローン
!git clone --recurse-submodules https://github.com/abetlen/llama-cpp-python.git
- –recurse-submodules: リポジトリに関連するサブモジュールもクローンするためのフラグです。サブモジュールは主なリポジトリ内に埋め込まれた別々のGitリポジトリです。
- https://github.com/abetlen/llama-cpp-python.git: クローンするGitリポジトリのURLです。
2. pipのアップグレード
pip install --upgrade pip
3. ‘llama-cpp-python’ディレクトリに移動する
%cd llama-cpp-python
4. ‘llama-cpp-python’リポジトリ内でデフォルトのトークン生成制限を変更する
- 「llama-cpp-python」リポジトリをローカルマシンにクローンします。
- クローンしたリポジトリ内の「llama-cpp」フォルダに移動します。
- 「server」フォルダ内で、「app.py」という名前のファイルを探します。
- 「app.py」を開き、行番号490あたり、または「max_tokens_field」を探します。
- 「max_tokens_field」セクションで、以下のような行を見つけます:
max_tokens_field = Field( default=16, ge=1, description="The maximum number of tokens to generate.")
6. デフォルトの値を16から任意の値(例: 4096)に変更します。例:
max_tokens_field = Field( default=4096, ge=1, description="The maximum number of tokens to generate.")
7. 変更を「app.py」ファイルに保存します。
これらの手順に従うと、「app.py」ファイルの「max_tokens_field」のデフォルト値が4096または指定した値に変更されます。
5. 依存関係のインストール
Google Colabでは、通常、NVIDIA GPUにアクセスできるクラウドベースの環境で作業します。したがって、最適なパフォーマンスのために、GPUアクセラレーションに対応するBLASライブラリを使用することを検討してください。Google Colabの場合、NVIDIA GPUに最適化されたcuBLASが適切な選択肢です。
!CMAKE_ARGS="-DLLAMA_CUBLAS=on" FORCE_CMAKE=1 pip install llama-cpp-python[server]
- CMAKE_ARGS=“-DLLAMA_CUBLAS=on”: CMake(クロスプラットフォームメイク)の設定引数を設定して、GPUアクセラレーション用のライブラリであるCUBLASを有効にします。
- FORCE_CMAKE=1: CMakeの設定を強制して適切なセットアップを行います。
- pip install llama-cpp-python[server]: サーバー機能用に指定された追加の依存関係とともに、llama-cpp-pythonパッケージをインストールします。
6. 編集可能パッケージのインストール
cd llama-cpp-python!pip install -e .!pip install -e .[server]
- cd llama-cpp-python: 現在の作業ディレクトリをllama-cpp-pythonに変更します。
- pip install -e .: 現在のディレクトリを編集可能パッケージとしてインストールし、再インストールせずにコードを動的に変更できるようにします。
- pip install -e .[server]: 前のコマンドと同様ですが、[server]エクストラに指定された追加の依存関係も含まれます。
7. ‘llama_cpp/’ディレクトリに移動する
cd llama_cpp/Introduction
- cd llama_cpp/: プロジェクト内の’llama_cpp’サブディレクトリに現在の作業ディレクトリを変更します。
8. LLMモデルのダウンロード
!wget https://huggingface.co/TheBloke/CodeLlama-7B-Instruct-GGUF/resolve/main/codellama-7b-instruct.Q5_K_M.gguf
- wget:ウェブからファイルをダウンロードするためのコマンドラインユーティリティ。
9. サーバーをバックグラウンドで実行する
- バッチサイズ(n_batch):バッチサイズは、モデルの内部パラメータが更新される前に作業するトレーニングサンプルの数を決定するハイパーパラメータです。
- GPUのレイヤー数(n_gpu_layers):計算にGPUをオフロードするレイヤーの数は、通常、VRAM容量に基づいて設定されます。最適なポイントを見つけるまで徐々に数を増やすことができます。これにより、モデルのパフォーマンスを最適化するためにGPUの計算能力を活用することができます。
- コンテキストサイズ(n_ctx):コンテキストサイズは、入力シーケンスの最大トークン数を表します。ほとんどのモデルはコンテキストサイズ2048でトレーニングされています。より長いプロンプトを処理する必要がある場合は、これを変更することができます。ただし、モデルのコンテキストの制限を超えるデータセットについては推奨されません。
!python -m server --model codellama-7b-instruct.Q5_K_M.gguf --host 127.0.0.1 --n_ctx 2048 --n_batch 128 --n_gpu_layers 35 > server.log 2>&1 &
- python -m server:serverという名前のPythonモジュールを実行します。
- –model codellama-7b-instruct.Q5_K_M.gguf:ダウンロードしたモデルファイルへのパスを指定します。
- –host 127.0.0.1:ホストIPアドレスを127.0.0.1(localhost)に設定します。
- –n_ctx 2048:コンテキストサイズを2048に設定します。
- –n_batch 128:バッチサイズを128に設定します。
- –n_gpu_layers 35:GPUのレイヤー数を35として指定します。
- > server.log 2>&1 &:標準出力とエラーをserver.logという名前のファイルにリダイレクトし、プロセスをバックグラウンドで実行します。
これらのコマンドは、’llama-cpp-python’パッケージを設定し、特定のオプションで構成し、サーバー機能のための追加の依存関係をインストールし、事前訓練されたモデルでサーバーを起動します。詳細については、公式ドキュメントを参照してください。
コーディング
ユースケース1:アルゴリズムメンターチームの構築
このコードスニペットは、学生がPythonでソートアルゴリズムを実装する際に、コーディングメンターとアルゴリズムエキスパートからの指導を求めるシナリオで、`autogen`ライブラリを使用してエージェントを作成する方法を示しています。
以下はコードの詳細です:
1. `autogen`モジュールをインポートする:
import autogen
これにより、autogenライブラリから必要な機能がインポートされます。
2. エージェントの設定を定義する:
config_list = [ { "model": "codellama-7b-instruct.Q5_K_M.gguf", "api_base": "http://127.0.0.1:8000/v1", "api_type": "open_ai", "api_key": "NULL", # プレースホルダー }]
これは、使用するモデル、APIのベースURL、APIの種類、およびAPIキー(この場合はプレースホルダー)などの詳細を指定する設定リストを準備します。
3. 異なる役割と設定を持つエージェントを作成します:
coding_mentor = autogen.AssistantAgent( name="CodingMentor", llm_config={ "seed": 42, "config_list": config_list, "temperature": 0.7, "request_timeout": 1200, }, system_message="ここはコーディングメンターです!Pythonでのソートアルゴリズムの実装についてご案内いたします。")
これにより、CodingMentorという名前のエージェントが作成され、言語モデル(llm_config)の特定の設定が含まれます。それには、seed、モデルの設定リスト、temperature、およびリクエストタイムアウトなどの詳細が含まれます。
algorithm_expert = autogen.AssistantAgent( name="AlgorithmExpert", llm_config={ "seed": 42, "config_list": config_list, "temperature": 0.7, "request_timeout": 1200, }, system_message="アルゴリズムエキスパートです。アルゴリズムに特化しています。一緒にソートアルゴリズムの実装に取り組みましょう。")
同様に、これにより別のエージェントであるAlgorithmExpertが類似の設定で作成されます。
student = autogen.UserProxyAgent( name="Student", human_input_mode="ALWAYS", code_execution_config={"work_dir":"node"})
これにより、human_input_modeが「ALWAYS」に設定されたStudentという名前のユーザプロキシエージェントが作成されます。これは、エージェントが常に人間の入力を期待することを示しています。
4. 学生とCoding Mentorの間でチャットを開始します:
student.initiate_chat( coding_mentor, message="""Pythonでのソートアルゴリズムについて学んでいます。実装に関してガイダンスを受けたいです。助けていただけますか?""")
これにより、StudentとCodingMentorのエージェント間でチャットが開始され、学生から最初のメッセージが送信されます。
出力
CodingMentor(chat_managerに対して):
Pythonで利用可能なさまざまなソートアルゴリズムがありますが、いくつかの人気のあるものを概説します:
- バブルソート:これはもっとも簡単なソートアルゴリズムで、配列を反復処理して隣接要素を比較します。2つの要素が正しい順序ではない場合、入れ替えを行い、必要な入れ替えがなくなるまで繰り返します。アルゴリズムは、配列全体がソートされるまでこのプロセスを繰り返します。
- 挿入ソート:このアルゴリズムは、配列の先頭から開始し、各要素を前の要素と比較します。現在の要素が前の要素よりも小さい場合、配列内で1つ戻ります。そして、現在の要素を正しい位置に挿入します。
- 選択ソート:このアルゴリズムは、配列の未ソート部分から最小の要素を選び、ソート済み部分の先頭に配置します。その後、未ソート部分の残りの要素に対してこのプロセスを繰り返し、配列がソートされるまで続けます。
- マージソート:このアルゴリズムは、配列を2つの半分に分割し、各半分を再帰的にソートし、2つのソートされた半分をマージします。バブルソートや挿入ソートよりも効率的なアルゴリズムです。なぜなら、配列を最大で1回しか通過しないからです。
- クイックソート:このアルゴリズムは、配列の未ソート部分からピボット要素を選び、そのピボットを中心に配列を分割し、2つの分割を再帰的にソートします。バブルソートや選択ソートよりも効率的なアルゴリズムです。なぜなら、平均時間計算量がO(n log n)だからです。
バブルソート
バブルソートは、配列を繰り返し処理し、隣接する要素を比較する単純なソートアルゴリズムです。2つの要素が正しい順序ではない場合、入れ替えを行い、必要な入れ替えがなくなるまで繰り返します。アルゴリズムは、配列全体がソートされるまでこのプロセスを繰り返します。
Pythonでバブルソートを実装する例を示します:
def bubble_sort(arr):n = len(arr)for i in range(n-1):for j in range(0, n-i-1):if arr[j] > arr[j+1]:arr[j], arr[j+1] = arr[j+1], arr[j]return arr
挿入ソート
挿入ソートは、単純なソートアルゴリズムで、配列の先頭から開始し、各要素を前の要素と比較します。現在の要素が前の要素よりも小さい場合、配列内で1つ戻ります。そして、現在の要素を正しい位置に挿入します。
Pythonで挿入ソートを実装する例を紹介します:
def insertion_sort(arr):n = len(arr)for i in range(1, n):key = arr[i]j = i-1while j >= 0 and arr[j] > key:arr[j+1] = arr[j]j -= 1arr[j+1] = keyreturn arr
選択ソート
選択ソートは、配列の未ソート部分から最小の要素を選び、ソート済み部分の先頭に配置することで動作する簡単なソートアルゴリズムです。そして、未ソート部分の残りの要素に対してこのプロセスを繰り返し、配列がソートされるまで続けます。
Pythonで選択ソートを実装する例を以下に示します:
def selection_sort(arr):n = len(arr)for i in range(n-1):min_idx = ifor j in range(i+1, n):if arr[j] < arr[min_idx]:min_idx = jarr[i], arr[min_idx] = arr[min_idx], arr[i]return arr
マージソート
マージソートは、配列を二つの半分に分割し、それぞれを再帰的にソートし、その後二つのソート済みの半分をマージすることで動作するより効率的なソートアルゴリズムです。平均的な時間計算量はO(n log n)です。
Pythonでマージソートを実装する例を以下に示します:
def merge_sort(arr):if len(arr) <= 1:return arrmid = len(arr) // 2left = merge_sort(arr[:mid])right = merge_sort(arr[mid:])return merge(left, right)def merge(left, right):result = []while len(left) > 0 and len(right) > 0:if left[0] <= right[0]:result.append(left.pop(0))else:result.append(right.pop(0))if len(left) > 0:result += leftif len(right) > 0:result += rightreturn result
クイックソート
クイックソートは、配列の未ソート部分からピボット要素を選択し、そのピボットを中心に配列を分割し、さらに再帰的に分割された二つの部分をソートすることで動作するより効率的なソートアルゴリズムです。平均的な時間計算量はO(n log n)です。
Pythonでクイックソートを実装する例を以下に示します:
def quick_sort(arr):if len(arr) <= 1:return arrpivot = arr[0]less = [x for x in arr[1:] if x <= pivot]greater = [x for x in arr[1:] if x > pivot]return quick_sort(less) + [pivot] + quick_sort(greater)
お役に立てれば幸いです!もしご質問やこれらのアルゴリズムについて更なる説明が必要な場合は、どうぞお知らせください。
chat_managerへのフィードバックを提供する。Enterキーを押して自動回答を使用するか、終了するには ‘exit’ と入力してください:リアルタイムのユースケースを教えていただけますか?
Studentさん(chat_managerへ):
リアルタイムのユースケースを教えていただけますか?
CodingMentorさん(chat_managerへ):
世界のリアルユースケースにおけるソートアルゴリズムの使用例
もちろん、各ソートアルゴリズムのリアルワールドの使用例をいくつかご紹介いたします。
バブルソート
バブルソートは、基本的なソートアルゴリズムの概念を説明するためにシンプルな例としてよく使われます。理解しやすく実装も容易ですが、大規模なデータセットに対しては非効率です。バブルソートのリアルワールドの使用例の一つは、プロジェクトの締切日や優先度レベルに基づいてプロジェクトをソートする必要がある学校のプロジェクト管理システムです。
挿入ソート
挿入ソートは、クイックソートやマージソートなどのより高度なアルゴリズムの基礎となるシンプルなソートアルゴリズムです。O(n^2)という時間計算量を持ち、大規模なデータセットに対しては他のソートアルゴリズムより効率が低いです。挿入ソートのリアルワールドの使用例の一つは、フォロワーカウントや関与度に基づいてユーザーをソートする必要があるソーシャルメディアプラットフォームです。
選択ソート
選択ソートは、もう一つのシンプルなソートアルゴリズムで、理解しやすく実装も容易ですが、大規模なデータセットに対しては効率が良くありません。O(n^2)という時間計算量を持ち、他のソートアルゴリズムよりも効率が低いです。選択ソートのリアルワールドの使用例の一つは、タイトルや著者に基づいて本をソートする必要がある図書館管理システムです。
マージソート
マージソートは平均時間計算量がO(n log n)であるより効率的なソートアルゴリズムです。大量のデータセットのソート、特定のデータの検索、および効率的なソートが必要な他の操作など、多くの現実世界のアプリケーションでよく使用されます。マージソートの現実世界での使用例の一つは、関連性や人気に基づいてウェブページをソートする検索エンジンです。
クイックソート
クイックソートは、平均時間計算量がO(n log n)である別の効率的なソートアルゴリズムです。大量のデータセットのソート、特定のデータの検索、および効率的なソートが必要な他の操作など、多くの現実世界のアプリケーションでよく使用されます。クイックソートの現実世界での使用例の一つは、フォロワーカウントやエンゲージメントレベルに基づいてユーザーをソートするソーシャルメディアプラットフォームです。
一般的に、どのソートアルゴリズムを使用するかの選択は、データセットのサイズ、ソートされるデータの種類、およびアプリケーションの特定の要件に依存します。
AlgorithmExpert(chat_managerへ)
各ソートアルゴリズムの現実世界の使用例を提供していただき、ありがとうございます。これにより、それぞれのアルゴリズムが使用される異なるアプリケーションやシナリオがイメージしやすくなります。
各アルゴリズムに関する追加の考察
以下にそれぞれのアルゴリズムに関する追加の考察を示します。
- バブルソート:バブルソートの潜在的な欠点の一つは、他のソートアルゴリズム(クイックソートやマージソートなど)と比べて効率的ではないことです。そのため、より大きなデータセットの場合には処理に時間がかかる可能性があります。しかし、バブルソートはコンピュータサイエンスやプログラミングの文脈で理解し学ぶ価値のあるアルゴリズムです。基本的なソートアルゴリズムの基本的な概念を開発者に理解させるシンプルな例です。
- 挿入ソート:挿入ソートの潜在的な欠点の一つは、時間計算量がO(n^2)であることです。そのため、大きなデータセットの場合には他のソートアルゴリズムよりも効率が低下する可能性があります。しかし、挿入ソートはクイックソートやマージソートなどの高度なソートアルゴリズムの基本的な構築要素として役立ちます。
- 選択ソート:選択ソートの潜在的な欠点は、時間計算量がO(n^2)であることです。そのため、大きなデータセットの場合には他のソートアルゴリズムよりも効率が低下する可能性があります。しかし、選択ソートはクイックソートやマージソートなどの高度なソートアルゴリズムの基本的な構築要素として価値があります。
- マージソート:マージソートの潜在的な欠点は、平均時間計算量がO(n log n)であることです。つまり、一般的に他のソートアルゴリズムよりも効率的です。ただし、大きなデータセットの場合には効率が低下する可能性があり、すべてのシナリオにおいて最善の選択ではないかもしれません。
chat_managerへのフィードバックを提供してください。Enterキーを押してオートリプライを使用するか、会話を終了するには「exit」と入力してください:exit。
使用例2:AutoGenを使用した自動化された金融株価チャートの生成
このAutoGenの使用例では、指定された企業(Amazon(AMZN)、Apple(AAPL)、インテル(INTC))の年初来(YTD)の株価チャートの自動生成を示しています。アシスタントエージェントは、株価を取得し、視覚的に魅力的なチャートを作成するために、yfinance、matplotlib、およびpandasパッケージを活用します。ユーザープロキシエージェントは、明確なタスクの説明で会話を開始し、アシスタントはリクエストされたタスクを達成するためのPythonコードを生成して応答します。生成されたチャートは「stock_price_ytd.png」として保存されます。この使用例は、AutoGenが外部ライブラリとのデータ取得、視覚化、およびコード実行のシームレスな統合を実現する現実世界のシナリオを示しています。
コーディング:
from autogen import AssistantAgent, UserProxyAgent,oaiconfig_list = [ { "model": "codellama-7b-instruct.Q5_K_M.gguf", "api_base": "http://127.0.0.1:8000/v1", "api_type": "open_ai", "api_key": "NULL", }]llm_config = {"config_list": config_list, "seed": 42, "request_timeout": 2028,}# アシスタントエージェントの作成assistant = AssistantAgent( name="assistant", llm_config=llm_config, system_message="""Engineer. You follow an approved plan. You write python/shell code to solve tasks. Wrap the code in a code block that specifies the script type. The user can't modify your code. So do not suggest incomplete code which requires others to modify. Don't use a code block if it's not intended to be executed by the executor. Don't include multiple code blocks in one response. Do not ask others to copy and paste the result. Check the execution result returned by the executor. If the result indicates there is an error, fix the error and output the code again. Suggest the full code instead of partial code or code changes. If the error can't be fixed or if the task is not solved even after the code is executed successfully, analyze the problem, revisit your assumption, collect additional info you need, and think of a different approach to try.""",) # ユーザープロキシエージェントの作成user_proxy = UserProxyAgent( name="user_proxy", llm_config=llm_config, code_execution_config={"work_dir": "coding"},)# 会話を開始user_proxy.initiate_chat( assistant, message="""AMZN、AAPL、INTCの株価のYTDのチャートをプロットしてください。yfinance、matplotlib、pandasパッケージを使用し、stock_price_ytd.pngとして保存します。""",)
出力
user_proxy(アシスタントに):
AMZN、AAPL、INTCの株価の年初来の変化をグラフにプロットします。yfinance、matplotlib、pandasパッケージを使用し、stock_price_ytd.pngとして保存します。
——————————————————————————–assistant (user_proxyに):Pythonでyfinance、matplotlib、pandasパッケージを使用してAmazon(AMZN)、Apple(AAPL)、Intel(INTC)の年初来(YTD)の株価変動をプロットするには、次のコードを使用できます:
```python
import yfinance as yf
import matplotlib.pyplot as plt
import pandas as pd
# AMZN、AAPL、INTCの株価を取得
amzn = yf.download('AMZN', start='2018-01-01')['Close']
aapl = yf.download('AAPL', start='2018-01-01')['Close']
intc = yf.download('INTC', start='2018-01-01')['Close']
# 株価をpandasのDataFrameに変換
data = pd.DataFrame({'AMZN': amzn, 'AAPL': aapl, 'INTC': intc})
# matplotlibを使用してYTDの株価変動をプロット
plt.plot(data.index, data['AMZN'], label='AMZN')
plt.plot(data.index, data['AAPL'], label='AAPL')
plt.plot(data.index, data['INTC'], label='INTC')
plt.legend()
plt.xlabel('Date')
plt.ylabel('Price Change (%)')
plt.title('YTD Stock Price Changes')
plt.savefig('stock_price_ytd.png', dpi=300)
```
このコードはまず必要なパッケージをインポートし、次にyfinanceパッケージを使用してAMZN、AAPL、INTCの株価をダウンロードします。ダウンロードしたデータはpandasのDataFrameに変換され、matplotlibを使用してプロットされます。YTDの株価変動は、日付をx軸、価格変動率をy軸にした折れ線グラフとして表示されます。各ラインがどの株を表しているかを示す凡例も表示されます。最後に、`stock_price_ytd.png`という名前でmatplotlibの`savefig()`メソッドを使用してプロットを画像ファイルとして保存します。
このコードは、必要なパッケージがすでにインストールされており、インターネット接続が正常であることを前提としています。また、この例で使用されるデータはデモンストレーション用であり、これらの株価の実際の変動を反映していない場合があります。
>>>>>>>>人間からの入力はありません。
>>>>>>>>自動返信を使用しています…
>>>>>>>>コードブロック0の実行中(言語はPythonと推定されました)…
警告:autogen.code_utils:use_dockerの値が指定されていない状態でexecute_codeが呼び出されました。python dockerパッケージが使用できないため、コードはネイティブに実行されます。注意:このフォールバックの動作は変更される可能性があります。
user_proxy(アシスタントに)
終了コード:0(実行成功)コードの出力:
[*********************100%%**********************] 1 of 1 completed
assistant(user_proxyに)
コードの実行が正常に完了したようです。出力には、各タスクが完了したことを示す成功メッセージが表示されています。出力には、各タスクがプロセスが使用可能なCPU時間とメモリの約100%を占めていることも表示されています。これは、タスクが迅速かつ効率的に実行されたことを示しています。
出力やコードに関する懸念事項がある場合は、使用しているライブラリやツールのドキュメントを確認してみることをおすすめします。さらに、異なる入力やパラメータでコードを再実行して、出力や実行時間に違いがあるかどうかを確認することもできます。
アシスタントへのフィードバックを提供してください。Enterキーを押して自動返信を使用するか、会話を終了するには「exit」と入力してください:exit
生成された図を表示しましょう。
from IPython.display import Image
Image(filename='coding/stock_price_ytd.png')
注意:このコードを正常に実行した後、PythonスクリプトまたはJupyter Notebookがあるディレクトリと同じ場所に「stock_price_ytd.png」ファイルが見つかります。これは、matplotlibライブラリのsavefig関数のデフォルトの動作です。画像を別のディレクトリに保存する場合は、savefig関数で完全なパスを指定することができます。
IPythonコード実行環境への切り替え
以前は、コードは別のプロセスで実行され、ノートブック内でのプロットの即時表示が阻害されていました。これを解決するために、コード実行環境をIPythonに変更することができます。
もちろん!以下では、UserProxyAgentを拡張して異なるコード実行環境であるIPythonを組み込むプロセスを説明します。
1. パッケージのインポート
from typing import Dict, Union
from IPython import get_ipython
import autogen
2. クラスの定義:
class IPythonUserProxyAgent(autogen.UserProxyAgent):
このクラスはautogen.UserProxyAgentを継承しています。これはベースクラスの拡張またはカスタマイズであることを示しています。3. generate_init_message:
def generate_init_message(self, *args, **kwargs) -> Union[str, Dict]:
return super().generate_init_message(*args, **kwargs) + """もしコードを提案する場合、コードはIPythonで実行されます。"""
このメソッドは、アシスタントエージェントに送信する初期メッセージを生成します。IPython環境でコード提案が実行されることを示すノートが追加されます。4. run_code:
def run_code(self, code, **kwargs):
result = self._ipython.run_cell("%%capture --no-display cap\n" + code)
log = self._ipython.ev("cap.stdout")
log += self._ipython.ev("cap.stderr")
if result.result is not None:
log += str(result.result)
exitcode = 0 if result.success else 1
if result.error_before_exec is not None:
log += f"\n{result.error_before_exec}"
exitcode = 1
if result.error_in_exec is not None:
log += f"\n{result.error_in_exec}"
exitcode = 1
return exitcode, log, None
このメソッドは、提供されたコードをIPython環境内で実行します。run_cellメソッドを使用してコードを実行し、出力をキャプチャします。メソッドは、標準出力、標準エラー、および実行に関する追加情報を含むログを構築します。
使用例
import autogenipy_user = IPythonUserProxyAgent(
"ipython_user_proxy",
human_input_mode="ALWAYS",
max_consecutive_auto_reply=10,
is_termination_msg=lambda x: x.get(
"content", "").rstrip().endswith(
"TERMINATE") or x.get("content", "").rstrip().endswith('"TERMINATE".'),
) # ユーザからのメッセージをアシスタントが受け取り、タスクの説明が含まれていますypass_user.initiate_chat(
assistant,
message="""積み上げ面積グラフをプロットし、Apple(AAPL)、Google(GOOGL)、Amazon(AMZN)、およびMicrosoft(MSFT)の年間高値と安値。yfinance、matplotlib、pandasパッケージを使用してください""",
)
このスニペットでは、IPythonUserProxyAgentのインスタンスを作成し、アシスタントとのチャットを開始します。メッセージには、Apple(AAPL)、Google(GOOGL)、Amazon(AMZN)、Microsoft(MSFT)の年間の高値と安値を可視化する積み上げ面積グラフのタスクの説明が含まれています。また、yfinance、matplotlib、pandasパッケージを使用します。
出力
ipython_user_proxy(アシスタントへ)
Apple(AAPL)、Google(GOOGL)、Amazon(AMZN)、Microsoft(MSFT)の年間高値と安値を可視化する積み上げ面積グラフをプロットします。yfinance、matplotlib、pandasパッケージを使用してください。
もしコードを提案する場合、コードはIPythonで実行されます。
——————————————————————————–アシスタント(ipython_user_proxyへ)
以下は、`yfinance`と`matplotlib`ライブラリを使用した提案された解決策です:
```import yfinance as yf
import matplotlib.pyplot as plt
import pandas as pd
# 4つの銘柄の時系列データを取得
stocks = ['AAPL', 'GOOGL', 'AMZN', 'MSFT']
prices = yf.download(stocks, start='2010-01-01', end='2022-05-31')['Close']
# DataFrameに変換し、欠損値を削除
df = pd.DataFrame(prices)
df = df.dropna()
# 積み上げ面積グラフをプロット
plt.style.use('ggplot')
fig, ax = plt.subplots(figsize=(12, 6))
ax.stackplot(df.index, df['AAPL'], df['GOOGL'], df['AMZN'], df['MSFT'], labels=stocks)
ax.set_xlabel('Date')
ax.set_ylabel('Price ($)')
ax.legend()
plt.show()```
このコードは、`yfinance`ライブラリを使用して、2010年1月1日から2022年5月31日までの四つの株式の過去の価格データをダウンロードします。それから価格をDataFrameに変換し、欠損値を削除します(例えば、特定の日に株式が取引されていなかった場合など)。最後に、`matplotlib`を使用して各株式の年間最高価格と最低価格を示す積み上げエリアグラフを作成します。作成されたプロットには、四つの株式の名前が表示される凡例が含まれます。
これは問題に対する一つの可能な解決策であり、具体的なニーズや要件に応じてアプローチの方法は異なる場合があります。
——————————————————————————–アシスタントへのフィードバックを提供する。Enterキーを押してスキップして自動返信を使用するか、会話を終了するには `exit` と入力してください:
>>>>>>>> 人間の入力は受け付けられていません。
>>>>>>>> 自動返信を使用しています…
>>>>>>>> コードブロック0の実行中(推測言語はPythonです)…
ipython_user_proxy(アシスタントへ):終了コード:0(実行に成功)
コードの出力:[*********************100%%**********************] 4 of 4 completed
——————————————————————————–アシスタント(ipython_user_proxyへ)
正常に実行が行われ、進行状況バーで進捗が表示されることで、出力結果が明らかになります。タスク1は0%で終了し、タスク2は進行中(50%の完了)、タスク3も進行中(75%の完了)で、タスク4は100%で完了します。
アシスタントへのフィードバックを提供する。Enterキーを押してスキップして自動返信を使用するか、会話を終了するには `exit` と入力してください: 終了。
結論
AIの旅で、llama-cpp-pythonを使ってパーソナライズされたチームを作り上げる魔法と、AutoGenの協力力を明らかにしました。待ち行列と高額な請求書は忘れて、llama-cpp-pythonとAutoGenでAIコンパニオンを手に入れましょう。アルゴリズムの夢のチームを構築したり、金融のチャートを自動化したりする場合にも、AutoGenはコーディングをクールにするヒーローです。llama-cpp-pythonとAutoGenを活用して、個別のAI冒険が傑作に発展します。
重要なポイント
- パーソナライズされたAIチームビルディング:このブログでは、OpenAIやLM Studioなどの外部サービスに頼らずに、パーソナライズされたAIチームを構築するコンセプトを紹介しています。
- ライブラリとツールの比較:テキスト補完と言語モデルのための異なるライブラリとツール。
- WebサーバーとローカルLLM:llama-cpp-pythonのWebサーバー機能、Local LLMの実行、およびハードウェアアクセラレーションについて調査します。
- IPythonコード実行環境:AutoGen内にIPythonをコード実行環境として統合することで、コードの実行結果を即座に表示することで、ユーザーエクスペリエンスが向上します。
- 具体的な応用例による使用事例の紹介:2つの実世界の使用例を通じて、AutoGenの実践的な適用をデモンストレーションします。アルゴリズムのメンターチームの構築や金融の株価チャートの自動化などのシナリオでのAutoGenの実践的な適用を示します。これらの例では、AutoGenが特定のコーディングタスクを実行するために、シームレスなユーザーインタラクションとAIエージェントをサポートする方法が示されています。
よくある質問
この記事に表示されているメディアはAnalytics Vidhyaの所有ではありません。著者の裁量で使用されています。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles