オープンアクセス(オープンウェイト)の大規模言語モデルは、アーキテクチャの透明性や自由なデプロイが可能な点で優れていますが、学習データのカットオフ以降の情報や最新の学術論文、ニッチな技術仕様に関してはハルシネーション(事実誤認)を起こしやすいという課題があります。Hugging Faceが提供するオープンソースのチャット環境「HuggingChat」(内部エンジンは chat-ui)には、モデルの回答を信頼できるリアルタイムのWeb情報に結びつける(グラウンディングする)ための2つの機能が標準装備されています。それが「Web Search(Web検索)」と「Community Tools(コミュニティツール)」です。
本記事では、研究者や開発者がHuggingChatのWebインターフェースやセルフホスト環境において、リアルタイム検索を設定し、独自のGradioツールSpaceを連携させ、Command R+やLlama 3.1、Qwen 2.5などのモデルを活用して根拠のある分析アシスタントを構築する実践的な手順を解説します。
1. 手軽に事実検証:HuggingChatの組み込みWeb検索
日常的な文献調査やニュースの事実確認には、HuggingChatに統合されている検索拡張生成(RAG)パイプラインを利用するのが最も効率的です。
チャット画面での有効化手順
- HuggingChat(
https://huggingface.co/chat)にアクセスします。 - 指示追従性と論理的推論に優れたベースモデル(Meta Llama 3.1 70B、Cohere Command R+、Qwen 2.5 72Bなど)を選択します。
- 画面下部のプロンプト入力欄にある地球アイコンの「Search web」スイッチをオンにします。
- 質問を入力します(例:「今週発表されたDeepSeek-V3テクニカルレポートの主なベンチマーク結果は何ですか?」)。
組み込み検索パイプラインの動作メカニズム
HuggingChatは単に検索エンジンのスニペットを貼り付けるだけではありません。バックエンドの chat-ui が自動的に6段階のRAG処理を実行します:
- 検索クエリの最適化: 内部タスクモデルがユーザーのプロンプトから意図を抽出し、検索エンジンに適したキーワードに変換します。
- Web検索の実行: 外部プロバイダー(SerperやSearXNGなど)を経由して関連する信頼性の高いURLを取得します。
- ヘッドレススクレイピング: ヘッドレスブラウザPlaywrightを用いて対象ページを取得し、生のHTMLをクリーンなMarkdownテキストに変換します。
- チャンク分割と埋め込み: 抽出したテキストを意味のあるセグメントに分割し、軽量な埋め込みモデル(
gte-smallなど)でベクトル化します。 - 類似度ランキング: ユーザーの質問とのコサイン類似度や内積スコアを計算し、最も関連性の高いテキストチャンク(通常最大8,000文字程度)を抽出してモデルのコンテキストに注入します。
- 回答生成と引用リンク: モデルが注入された最新情報に基づいて回答を生成し、参照した元のURLを引用チップとして提示します。
2. 高度なユースケース:カスタムコミュニティツールの作成と登録
一般的なWeb検索では、論文リポジトリや社内データベースなどの特定フォーマットを柔軟に扱えないことがあります。HuggingChatの「Community Tools」機能を使えば、公開されている任意のHugging Face Space(Gradioアプリ)をモデルから呼び出し可能な外部ツールとして登録できます。
ステップ1:GradioツールSpaceの準備
Gradioで構築された公開Spaceで、関数インターフェースを備えていればツールとして利用可能です。
- 公式テンプレートの活用: Hugging Faceが公開している
nsarrazin/rag-tool-templateを複製し、sources/フォルダにPDFやMarkdown資料を配置するだけで、独自のドキュメントRAGツールが完成します。 - 独自のPythonツールの作成: 無料のCPU Basic Spaceでシンプルな
app.pyを作成します。以下はArXiv論文を検索する簡易ツールの例です:
import gradio as gr
import urllib.request
import xml.etree.ElementTree as ET
def search_arxiv(query: str, max_results: int = 3) -> str:
url = f"http://export.arxiv.org/api/query?search_query=all:{urllib.parse.quote(query)}&max_results={max_results}"
response = urllib.request.urlopen(url).read().decode("utf-8")
root = ET.fromstring(response)
results = []
for entry in root.findall("{http://www.w3.org/2005/Atom}entry"):
title = entry.find("{http://www.w3.org/2005/Atom}title").text.strip()
summary = entry.find("{http://www.w3.org/2005/Atom}summary").text.strip()
results.append(f"Title: {title}\nSummary: {summary}\n")
return "\n---\n".join(results) if results else "No papers found."
demo = gr.Interface(
fn=search_arxiv,
inputs=[gr.Textbox(label="Query"), gr.Number(label="Max Results", value=3)],
outputs="text",
title="ArXiv Search Tool"
)
demo.launch()
ステップ2:HuggingChatにツールを登録する
https://huggingface.co/chat/toolsにアクセスし、「Create New Tool」をクリックします(またはhttps://huggingface.co/chat/tools/newを直接開きます)。- 「Hugging Face Space URL」欄に作成したSpaceのURL(例:
https://huggingface.co/spaces/your-username/arxiv-search)を貼り付けます。 - 入力すると、HuggingChatがGradioのスキーマを自動解析し、関数や引数設定を読み込みます。
- 以下の項目を設定します:
- Tool Description(ツールの説明): LLMがツールの用途を理解できるよう簡潔に記述します(例:「Searches ArXiv for the latest AI and computer science preprints based on query keywords」)。
- AI Function Name(関数名): スネークケースで一意の識別名を入力します(例:
search_arxiv_preprints)。 - Arguments(引数の属性設定):
- Required(必須): モデルが呼び出し時に必ず値を指定する必要がある引数。
- Optional(任意): デフォルト値があり、必要に応じてモデルが上書きできる引数。
- Fixed(固定値): ツール作成時に値を固定し、モデルには変更させない引数(内部APIキーや固定フィルタに便利です)。
- 保存すると、個人ツールライブラリからいつでも呼び出せるようになります。
3. 専用リサーチアシスタント(Assistant)への統合
チャットセッションを開始するたびに設定をやり直す手間を省くため、HuggingChat Assistants を作成して検索設定とツールを固定化します。
- 「Settings > Assistants」または
https://huggingface.co/chat/settings/assistants/newを開きます。 - 名前とアイコン: アシスタント名(例:「AI論文調査アシスタント」)を設定します。
- モデルの選択: ツール呼び出し能力が高いモデルを選択します。Cohere Command R+ や Llama 3.1 70B は、マルチステップの関数呼び出しや正確な出典参照に最適化されています。
- システムプロンプト(System Instructions): 事実確認の厳密さとツールの呼び出し方針を指定します:
あなたは厳格な学術調査アシスタントです。 最新の研究動向、ベンチマーク数値、公開日に関する質問には、回答する前に必ずWeb検索または連携されたツールを実行して事実を確認してください。 取得した資料に記載されていない推測や推論は行わないでください。 回答には必ず参照したWebページのタイトルとURLを明記してください。 - 機能とツールの割り当て:
- 「Web search」を有効にして、常時Web検索を行えるようにします。
- 「Community Tools」から、作成したツールや公開ツールを最大3つまで選択して追加します。
- 「Create」をクリックして保存します。完成したAssistantは専用URLで一般公開することも、プライベートな検証環境として運用することも可能です。
4. 研究室・エンタープライズ向けセルフホスト設定(chat-ui)
データの機密性が重視される環境では、Hugging Faceが公開しているオープンソースリポジトリ huggingface/chat-ui を用いて、独自の完全プライベートなHuggingChatインスタンスを構築できます。
環境変数設定(.env.local)
Web検索プロバイダーや社内推論エンドポイントの設定例:
# MongoDBデータベース
MONGODB_URL=mongodb://localhost:27017
MONGODB_DB_NAME=chat-ui
# OpenAI互換推論エンドポイント(vLLM、Ollama、llama.cpp、Hugging Faceルーターなど)
OPENAI_BASE_URL=https://router.huggingface.co/v1
OPENAI_API_KEY=hf_your_huggingface_access_token
# Web検索プロバイダーの設定
SERPER_API_KEY=your_serper_api_dev_key
# またはセルフホストのSearXNGを利用する場合:
# SEARXNG_QUERY_URL=http://localhost:8080/search?q=<query>&format=json
# スクレイピングとセキュリティ制御
USE_LOCAL_WEBSEARCH=false
WEBSEARCH_ALLOWLIST=[]
WEBSEARCH_BLOCKLIST=[]
この設定により、外部へのデータ漏洩を防ぎつつ、社内モデルとリアルタイム検索を組み合わせたセキュアなRAG基盤を構築できます。
実践におけるトレードオフと推奨事項
- モデル規模とツール呼び出しの安定性: 8B以下の小型モデルは引数フォーマットのミスが発生しやすく、検索結果が見つからない場合に架空のURLを生成してしまう傾向があります。厳密な調査には70Bクラスのモデルか、Command R+のようなエージェント特化型モデルの採用を推奨します。
- レイテンシと精度のバランス: 単純なテキスト生成は1〜3秒で完了しますが、Web検索を伴うRAG処理(クエリ生成、Playwrightによる巡回、ベクトル埋め込み、集約)は追加で3〜6秒ほどかかります。頻繁に参照する固定ドキュメント群は、毎回Web検索するのではなく、Space上で永続的なベクトルインデックス化を行う方が効率的です。
- 引用情報の直接確認: オープンソースRAGの最大の利点は検証可能性にあります。モデルが提示した結論を鵜呑みにせず、生成された引用カードをクリックして元の文脈と乖離がないか確認する習慣を持つことが重要です。
HuggingChatのWeb検索とCommunity Toolsを組み合わせることで、オープンアクセスモデルは静的な知識の枠を超え、最新の動向を自律的に調査・検証できる強力な研究パートナーへと進化します。