1724722110
2024-08-26 15:37:00
実践 4,242 x 1,977 のような数学の問題を解くように指示されたとします。これを頭の中で解ける人もいるかもしれませんが、ほとんどの人はおそらく今すぐに電卓を手に取るでしょう。電卓の方が速いだけでなく、間違いの可能性を最小限に抑えることもできるからです。
実は、これと同じロジックが大規模言語モデル (LLM) にも当てはまります。チャットボットに同じ数学の問題を解くように依頼すると、ほとんどの場合、もっともらしいが間違った答えが生成されます。しかし、そのモデルに独自の計算機を与え、適切なプログラミングを行うと、突然、複雑な方程式を正確に解くことができるようになります。
これは算術演算に限定されるものではありません。適切なツールを使用すれば、LLM で任意のコードを実行したり、API にアクセスしたり、複雑なリクエストをドメイン固有のモデルに渡したり、さらには Web を検索したりできるようになります。
これらのツールは、人々が「AIエージェント適切なツールがあれば、AI モデルは監督なしでも、あるいは限られた監督なしでも、複雑な問題を分析、計画、解決できるという考え方です。
これらのモデルにどの程度の制御を与えるか、どのようなガードレールが必要か、どの程度信頼するかは、皆さんの判断にお任せします。今日は、その仕組みに焦点を当てます。
そこで、このハンズオンでは、ツール呼び出しを使用して LLM の機能を拡張し、制限に対処する方法をいくつか検討します。
必要なもの:
- 4 ビット量子化で適度な LLM を実行できるシステム。最新の Nvidia グラフィック カードまたは少なくとも 6 GB の vRAM を備えた AMD 7000 シリーズ GPU であれば問題なく動作します。Apple Silicon Mac の場合、少なくとも 16 GB のメモリを推奨します。
- Python の基本的な理解。
- このガイドでは、Ollamaモデルランナーがすでにインストールされていることを前提としています。まだインストールされていない場合は、ガイドをご覧ください。 ここ。
- また、展開方法については、 オープンWebUI ダッシュボード ここカスタム ツールを展開するための比較的使いやすいインターフェイスを提供するためです。
モデルの選択
先に進む前に、モデルの互換性について説明することが重要です。すべてのモデルがツールまたは関数の呼び出しをまだサポートしているわけではありません。
私たちの理解では、ミストラル7Bは正式にツールサポートを追加しました 指示バージョン 0.3 5月にMetaは リリース の ラマ 3.1 先月。Ollama のリポジトリからツール サポートを利用できるその他の注目すべきモデルには、Mistral の NeMo、Large、Mixtral モデル、および Cohere の Command R+ があります。
このガイドでは、 ミストラル・ネモただし、リソースが不足している場合は、Llama 3.1-8B が動作し、6GB のメモリでも動作することを確認できます。
LLMツールボックスの構築
先ほどの例に戻ると、選択した LLM に、時々発生する数学の問題に対処できるように計算機を提供するのは良い考えかもしれません。
新しいツールを作成するには、ワークスペースタブを開き、ツールに移動して、+ ボタンをクリックして新しいツールを作成します。クリックして拡大
開始するには、Open WebUI サイドバーの「ワークスペース」タブに移動し、「ツール」セクションを開いて、新しいツールを作成します。
デフォルトのスクリプトは、計算機、ユーザー情報収集、時間と日付、天気 API の機能を提供します。クリックして拡大
デフォルトでは、Open WebUI は、次のようなさまざまな便利なツールを追加するサンプル スクリプトをフィールドに入力します。
- Open WebUIから名前とメールアドレスを取得する機能
- 時計とカレンダー
- 計算機
- 天気アプリ
このスクリプトは変更せずにそのままにしておくこともできますが、動作しているかどうかを確認しやすくするために、次のように def __init__(self): の下に self.citation = True を追加できます。
クラスツール: def __init__(self): self.citation = True 渡す
最後に、「BasicTools」のような名前と簡単な説明を付けて、「保存」をクリックします。
ツールをモデルで使用できるようにするには、必ずツールを有効にしてください – クリックして拡大
ツールを使用するには、モデルを選択して新しいチャットを開始し、メッセージ ボックスの左側にある「+」アイコンを押して BasicTools を有効にします。これにより、会話中、適切な場所でモデルがこれらのツールを使用するようになります。
結局、法学修士課程の学生に計算機を与えただけでは、答えを幻覚的に表示し始めることはないようです。クリックして拡大
ここで、先ほどの数学の問題をモデルに提示すると、正しい答えが返されるだけでなく、その数字に到達するために使用されたツールも表示されます。
会話のコンテキストに応じて、リクエストに対応するために複数のツールが呼び出される場合があります。
詳しく見る
では、ここで何が起こっているのでしょうか? 少なくとも Open WebUI では、ツールは Python スクリプトとして定義されています。正しくフォーマットされていれば、モデルによって呼び出され、特定の問題を解決できます。
これをわかりやすくするために、前のステップで見た Open WebUI デモからこの例を抜粋しました。この例では、Python の datetime ライブラリを使用して、モデルに時間の感覚を与えています。
import os from datetime import datetime class Tools: def __init__(self): self.citation = True # ツールの使用時に OpenWebUI にレポートさせたい場合はこれを追加します。 pass def get_current_time(self) -> str: “”” より人間が読みやすい形式で現在の時刻を取得します。 :return: 現在の時刻。 “”” now = datetime.now() current_time = now.strftime(“%I:%M:%S %p”) # AM/PM 付きの 12 時間形式を使用 current_date = now.strftime( “%A, %B %d, %Y” ) # 完全な曜日、月名、日、年 return f”現在の日付と時刻 = {current_date}, {current_time}”
実際に日付と時刻を取得する作業を行う get_current_time 関数の他に、注意すべき要素が 2 つあります。
1 つ目は Tools クラスで、モデルに呼び出すことができる関数を指示します。
class Tools: def __init__(self): self.citation = True # ツールの使用時に OpenWebUI にレポートさせたい場合はこれを追加します。
ここでの 2 番目の要素は、実際には主要な関数の直下にある docstring です。これは関数が何を行うかを示すだけでなく、コードで何を行うかについての LLM 指示も提供します。
“”” 現在の時刻をより人間が読みやすい形式で取得します。 :return: 現在の時刻。 “””
モデルがツールの使用にあまりにも保守的であることに悩んでいる場合は、モデルがツールをどのように、いつ、どのような形式で使用すべきかについての指示をドキュメント文字列に追加することが役立つことがわかりました。
LLMをあらゆるものに接続
これらのツールは、時計、カレンダー、電卓などの基本的な機能に加えて、公開された API を持つほぼすべてのものと連携できます。
リモート ソースからデータを取得するだけでなく、API 呼び出しを使用して、Proxmox などのハイパーバイザーを含むあらゆるものを自動化できます。
この例では、Proxmoxer Python モジュールを使用して LLM が Proxmox クラスターの API に接続し、リソース使用率に関する情報を収集できるようにするツールをまとめました。
“”” title: Proxmox-Status-Report version: 1.0 description: proxmox からステータス レポートを取得するための API 呼び出し。 requirements: proxmoxer “”” from proxmoxer import ProxmoxAPI class Tools: def __init__(self): pass def proxmox_resource_report(self, node: str = None) -> str: “”” 指定されたノード名に基づいて、クラスター内の Proxmox ノードのリソース使用率レベルを確認します。この情報の要求例: – “ノードの状況はどうですか” – “ホームラボのステータス レポートをください” – “Jupiter のリソース使用率を確認してください” :param node: Proxmox ノードの名前。ノード名はアンダーケースになります。ノード名が不明な場合は、クラスター内のすべてのノードの使用率データが提供されます。 :return: リソース使用率を含む文字列。 “”” try: # API トークンを使用して Proxmox API に接続します proxmox = ProxmoxAPI( “proxmox_host”, user=”username@realm”, token_name=”token_name”, token_value=”your_token_here”, verify_ssl=False, #SSLを使用する場合はコメントアウトしてください) # クラスターリソースを取得します cluster_resources = proxmox.cluster.resources.get() result = []
cluster_resourcesのリソースの場合: リソースの場合[“type”] == “node” かつ ( ノードは None またはリソース[“node”] == ノード): node_name = リソース[“node”]
# 関連するシステム情報を抽出します cpu_cores = resource[“maxcpu”]
メモリ_gb = round(リソース[“maxmem”] / 1024**3, 2) ディスクギガバイト = round(リソース[“disk”] / 1024**3, 2) ディスクサイズ = round(リソース[“maxdisk”] / 1024**3, 2) # ノードのリソース使用率を取得します。 node_status = proxmox.nodes(node_name).status.get() cpu_usage = round(node_status[“cpu”] * 100, 2) メモリ使用量 = round( ノードステータス[“memory”][“used”]
/ ノードステータス[“memory”][“total”]
* 100, 2, ) ディスク使用量 = round(リソース[“disk”] / リソース[“maxdisk”] * 100, 2) # フォーマットされた文字列で情報を収集します result.append( f”ノード: {node_name} | CPU コア: {cpu_cores} | CPU 使用率: {cpu_usage}% | ” f”メモリ: {memory_gb} GB | メモリ使用量: {memory_usage}% | ” f”ディスク: {disk_gb} GB / {disk_size} GB | ディスク使用量: {disk_usage}%” ) if not result: return f”ノード ‘{node}’ のデータが見つかりません。” if node else “データが見つかりません。” return “n”.join(result) except Exception as e: return f”予期しないエラーが発生しました: {str(e)}” # 使用例 if __name__ == “__main__”: tools = Tools() result = tools.proxmox_resource_report(“saturn”) print(result)
Open-WebUI に保存したら、チャットで有効にして、Proxmox クラスターの正常性レポートを要求するだけです。この場合、すべてが正常であるように見えます。
ツールで API 呼び出しを使用すると、Proxmox クラスターのヘルス レポートの生成など、さまざまなタスクを自動化できます – クリックして拡大
この例で注目すべきは、スクリプトの先頭にある docstring です。これは、実行前に関連する Python パッケージを取得するために Open WebUI によって使用されます。
一方、もう少し下を見ると、proxmox_resource_report 関数の docstring が、プロンプトを処理するときにどのパラメータに注意する必要があるかをモデルに伝えていることがわかります。
これよりさらに進んで、適切な安全対策を講じて VM と LXC コンテナの起動、クローン作成、管理を行う関数を定義することもできますが、これでこれらの関数がどれだけ拡張可能であるかがおわかりいただけたと思います。
インスピレーションを探しているなら、Open WebUIの コミュニティページダッシュボードにコードを盲目的に貼り付けないように注意してください。
追加リソース
Open WebUI のツール呼び出し実装は、実装が最も簡単なものの 1 つですが、これは数ある実装の 1 つにすぎません。
使用事例に応じて、これらのいずれかがニーズに適している可能性があります。また、これらのツールを活用するようにトレーニングされたモデルの数は、今後数か月で増加すると予想されます。
レジスター あなたに よりローカルなAI コンテンツ このような 近い将来、ぜひコメント欄であなたの熱い質問を共有し、次に何を見たいか教えてください。®
編集者注: – は、このような記事をサポートするために、Nvidia から RTX 6000 Ada Generation グラフィックス、および Intel から Arc A770 GPU の提供を受けました。どちらの会社も、この記事の内容に関して一切関与していません。
#LLM #におけるツール呼び出しのクイックガイド #Register