ローカルニューラルネットワークを自律型インターネット研究者に変える方法
Webアクセス対応の標準的なチャットボットはシンプルなパターンで動作します。質問すると、モデルは1回の検索クエリを実行し、数件のスニペットを取得して、素早く回答を生成します。トピックが複雑な場合、表面的な検索では不十分です。結局、手動でリンクを開き、クエリを再構成し、少しずつ事実を結びつけていくことになります。
Automated-AI-Web-Researcher-Ollamaプロジェクトは異なるアプローチを取っています。Ollamaで実行されるローカル言語モデルを自律型リサーチエージェントに変えるPythonコンソールユーティリティです。1つの質問を入力してスクリプトを実行すれば、コーヒーを飲みながらのんきに待っていられます。プログラム自体がトピックをサブタスクに分解し、DuckDuckGo経由で記事を検索し、Webサイトを解析してテキストを抽出し、見つけた資料に基づいてトピックに反復的に深く掘り下げていきます。
内部構造と動作原理
プロジェクト作者は、このユーティリティをオープンモデルでの作業のためのオープンプロトタイプとして作成しました。すべてのテキスト処理はローカルマシンで行われるため、クエリやダウンロードしたテキストがOpenAIやAnthropicのようなサードパーティサーバーに送信されることはありません。
アルゴリズムは次のように動作します:
- 研究トピックを定義します。例えば:
@В каком году население Земли начнет сокращаться по прогнозам демографов? - モデルは質問を検討し、5つの具体的な検索方向のリストを作成して優先順位をつけます。
- 各方向について順番に、スクリプトが検索クエリを生成し、DuckDuckGoに送信し、適切なページを選択して内容を解析します。
- 見つかったテキストとリンクはすべてローカルテキストファイルに即座に保存されます。
- 最初のラウンドを完了した後、モデルは収集したデータを分析し、ギャップを特定して、次の検索方向のリストを作成します。
プロセスは停止コマンドを出すまでループを続けます。短時間で、スクリプトは数十件の検索クエリを実行し、何十ものページをダウンロードします。
停止コマンドを押すと、LLMは蓄積されたファイル全体をレビューし、ソースリンクを含む詳細な最終レポートを作成します。その後すぐに、収集したナレッジベースについてフォローアップの質問ができるインタラクティブモードが起動します。
インストールとセットアップ
OllamaのインストールとPython 3.10以上が必要です。スクリプトは大量のテキストを収集するため、モデルは長いコンテキストウィンドウを必要とします。作者は128kコンテキストウィンドウ付きのPhi-3ファミリーを推奨しています(例:phi3:3.8b-mini-128k-instructまたはphi3:14b-medium-128k-instruct)。
リポジトリをクローンして仮想環境を作成します:
git clone https://github.com/TheBlewish/Automated-AI-Web-Researcher-Ollama
cd Automated-AI-Web-Researcher-Ollama
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Windowsユーザーはfeature/windows-supportブランチに切り替えする必要があります。
次に、llm_config.pyファイルを開いてOllamaへの接続を設定します:
LLM_CONFIG_OLLAMA = {
"llm_type": "ollama",
"base_url": "http://localhost:11434",
"model_name": "phi3:3.8b-mini-128k-instruct",
"temperature": 0.7,
"top_p": 0.9,
"n_ctx": 55000,
"stop": ["User:", "\n\n"]
}
n_ctxパラメータはトークン単位のコンテキストウィンドウサイズを設定します。利用可能なRAMとビデオメモリに基づいて調整してください。
Ollamaサーバーとスクリプト自体を起動します:
ollama serve
python Web-LLM.py
コンソールで@シンボルを入力し、質問を書いて、CTRL+Dで確定して開始します。
研究プロセスの管理
スクリプト実行中、ターミナルにステータスインジケーターが表示されます。プロセスは完全にインタラクティブです。いつでもユーティリティに1文字コマンドを送信できます(各コマンドはCTRL+Dで確定):
sは現在のステータスと収集した資料の統計を表示します。fはモデルが現在検討している検索方向を出力します。pは収集を一時停止します。モデルは蓄積された資料を急速に評価し、包括的な回答に必要な情報が十分かどうか報告します。その後、収集を続けるか(c)終了するか(q)を選びます。qは研究を即座に停止し、最終サマリー生成をトリガーします。
停止後、すべてのソース資料、リンク、構造化されたサマリーは作業フォルダ内のテキストファイルに残ります。
注意点
このプロジェクトは動作中のプロトタイプ段階にあります。コードは比較的シンプルに書かれており、LangChainやAutoGenのようなヘビーフレームワークは使用されていません。これはむしろ利点であり、パーシングロジックとOllamaとのやり取りは読みやすく、自分のタスクに合わせて変更しやすいです。
いくつかのニュアンスがあります:
- 速度はハードウェアに直接依存します。CPU上で14Bパラメータモデルを50kトークンコンテキストで実行すると、中間ステップの生成に 상당な時間がかかります。VRAM 12〜16GBのGPUでは、ユーティリティは非常に高速に動作します。
- 深度分析には、長いコンテキストサポート優れたモデルを使用するのが良いでしょう。Phi-3 외에도、最新のMistral NeMoやQwen 2.5がこれに最適です。
- ページパーサーは基本的なため、クライアントサイドJavaScriptが重い複雑なサイトは不完全な内容を返す場合があります。
このユーティリティが役立つ人
このスクリプトは、新しいテクノロジーに素早く飛び込む必要がある開発者やアナリスト、希少なライブラリの技術ドキュメントを収集する必要がある人、または市場トレンドを分析する必要がある人に役立ちます。単調なブラウザSurfingの代わりに、タスクをローカルエージェントに委任すれば、検証済みのリンクを含む完成されたサマリーをすぐに取得できます。
Ollamaベースのエージェントパイプラインを実験している場合、このプロジェクトは、最小限の依存関係でオープンモデル上に自律型リサーチサイクルを構築する方法の良い実例になります。
関連プロジェクト
