【第6回】AI記事作成 Researcher AIとWeb検索機能で最新情報に対応する

スポンサーリンク
この記事は約51分で読めます。

第6回AI記事作成では、Planner AI、Writer AI、Reviewer AIに加えて、調査役となるResearcher AIを追加します。

ローカルLLMは便利ですが、単体では最新ニュースや現在の製品情報、直近のアップデート内容を自動取得できません。
そこでBrave Search APIを使ったWeb検索MCP風ツールを追加し、Researcher AIが検索結果を整理してWriter AIへ渡すことで、最新情報を踏まえた記事作成へ発展させます。

第5回AI記事作成まででできたこと

第5回では、Reviewer AIの判定結果をJSON形式で受け渡す構成にしました。

それまでは、Reviewer AIの自然文レビューから、

判定:OK
判定:修正必要

のような行をPython側で読み取り、次の処理を判断していました。

しかし、LLMの出力は揺れます。

判定:OK
判定:
OK
判定:このまま公開可能
判定:A+

このような出力は、人間には意味が分かっても、Python側では安定して処理しにくい問題があります。

そこで第5回では、Reviewer AIの結果を次のようなJSONとして受け渡す構成にしました。

これにより、AIエージェント間の受け渡しが安定し、将来的なイベント駆動型にも発展させやすくなりました。

そして第6回AI記事作成では、次の課題の最新情報への対応を実装します。

なぜResearcher AIが必要なのか

これまでのシステムでは、Planner AI、Writer AI、Reviewer AIが記事作成を担当していました。

Planner AI

Writer AI

Reviewer AI

Python側チェック

保存

この構成でも、一般的な解説記事は作成できます。

たとえば、以下のようなテーマであれば、ローカルLLMだけでもある程度対応できます。

・ブロックチェーンとは何か
・AIエージェントとは何か
・SEO記事の基本構成
・Pythonの仮想環境とは何か
・MCPの考え方

しかし、次のようなテーマでは問題が出やすくなります。

・2026年時点の最新AIモデル
・最新のWordPressアップデート
・直近のGoogle検索アルゴリズム変更
・現在公開されているツールやライブラリ
・最新ニュースを反映した記事

ローカルLLMは、基本的にモデルに学習済みの知識をもとに回答します。

そのため、現在のWeb情報を自動で見に行くわけではありません。

キーワードに「最新」「2026年」「新機能」「リリース」などを入れても、ローカルLLMが実際に検索しているわけではないため、古い情報や推測が混ざる可能性があります。

そこで必要になるのが、調査担当のAIエージェントです。

それが、今回追加する Researcher AI です。

Researcher AIの役割

Researcher AIは、記事を書くAIではありません。

役割は、記事を書く前に必要な情報を集め、整理することです。

具体的には、次のような作業を担当します。

・検索キーワードを作る
・Web検索MCP風ツールへ検索依頼を出す
・Brave Search APIの検索結果を受け取る
・重要な情報を整理する
・出典URLをまとめる
・Writer AIに渡す調査メモを作る

つまり、Researcher AIは、記事作成における「調査担当」です。

人間の作業でたとえると、次のような役割です。

編集者:
記事の方向性を決める

リサーチ担当:
必要な資料や最新情報を集める

ライター:
集めた情報をもとに記事を書く

校閲担当:
内容を確認する

AIエージェント構成に置き換えると、こうなります。

Planner AI
→ 記事設計

Researcher AI
→ 最新情報・参考情報の収集

Writer AI
→ 記事本文の作成

Reviewer AI
→ 内容・構成・HTML形式の確認

第6回AI記事作成ではBrave Search APIを使う

第6回AI記事作成では、Web検索部分に Brave Search API を使います。

Brave Search APIは、Braveの検索インデックスを利用してWeb検索結果を取得できるAPIです。
公式ドキュメントでは、Web検索APIのエンドポイントとして https://api.search.brave.com/res/v1/web/search が案内され、X-Subscription-Token ヘッダーでAPIキーを渡す形式が示されています。

参考:
Documentation – Brave Search API
Search – API Reference

今回のシリーズでは、検索処理を以下のように整理します。

Researcher AI

Web検索MCP風ツール

Brave Search API

JSON形式の検索結果

Researcher AIが調査メモ化

Brave Search APIを使う理由は、検索結果をJSON形式で扱えるからです。

検索結果がJSONで返ってくると、Python側で次のような情報を取り出しやすくなります。

・title
・url
・description
・検索クエリ
・検索結果の件数

これにより、web_search_results.json として保存しやすくなり、Researcher AIへ渡す調査材料としても扱いやすくなります。

Brave Search APIを使うために必要なもの

Brave Search APIを使うには、APIキーが必要です。Brave公式の認証ガイドでは、すべてのリクエストに X-Subscription-Token ヘッダーでサブスクリプショントークンを含める必要があると説明されています。

APIキーは、Pythonコードに直接書かず、環境変数として管理します。

WSLやGit Bashで一時的に設定する場合は、以下のようにします。

設定した環境変数の確認方法は以下の通りです。

永続的に使う場合は、今回のWSL環境では、以下のコマンドで、 ~/.bashrc に追記します。

APIキーをPythonファイルに直接書くと、GitHubなどへ公開した際に漏えいする危険があります。必ず環境変数や .env で管理し、公開リポジトリには含めないようにします。

Brave Search APIの取得方法

Brave Search API アカウントの作成

まず、API専用のポータルサイトにアクセスします。

  1. Brave Search API Dashboard にアクセスします。
  2. 「Sign Up」 をクリックします。
  3. メールアドレス、または Google / GitHub アカウントを使用してサインアップします。

2. プランの選択と支払い設定

Brave Search APIは従量課金制ですが、初回登録時に5ドル分の無料クレジットが付与されることが一般的です。

  1. ダッシュボードの 「Settings」 または 「Billing」 タブに移動します。
  2. クレジットカード情報を登録します(無料枠内であっても、本人確認と悪用防止のために登録が必要です)。
  3. 利用目的に合わせてプラン(Search, Answers, LLM Contextなど)を選択します。
    (今回は、基本の「Search」プランを選択します。)

    3. APIキーの生成

    インフラの準備が整ったら、実際に通信に使う「鍵」を発行します。

    1. ダッシュボードの 「API Keys」 セクションへ移動します。
    2. 「Create New Key」 をクリックします。
    3. キーに名前(例:Dev-Desktop-WSL2 など)を付けて保存します。
    4. 重要: キーは一度しか表示されません。必ず安全なパスワードマネージャー等に保存してください。

    4. 接続テスト(クイックスタート)

    APIキーが正しく動作するか、ターミナル(WSL2やコマンドプロンプト)から curl コマンドで確認します。

    正常にレスポンスが返ってくれば、取得完了です。

    なお、Brave Search APIの料金は変更される可能性があります。
    現在の公式料金ページでは、Search APIは $5.00 per 1,000 requests と表示され、毎月$5分のクレジットが含まれると案内されています。
    利用前に最新の料金ページを確認してください。

    第6回AI記事作成で追加する全体像

    第6回AI記事作成では、これまでの流れにResearcher AIを追加します。

    キーワード入力

    Planner AI

    Researcher AI

    Brave Search API

    Researcher AI

    Writer AI

    Reviewer AI

    Python側チェック

    保存

    もう少し詳しく見ると、以下のようになります。

    1. ユーザーがキーワードを入力
    2. Planner AIが記事構成を作る
    3. Researcher AIがWeb検索キーワードを作る
    4. Web検索MCP風ツールがBrave Search APIへ検索リクエストを送る
    5. Brave Search APIからJSON形式の検索結果を受け取る
    6. Researcher AIが検索結果を調査メモに整理する
    7. Writer AIが記事設計と調査メモをもとに記事を書く
    8. Reviewer AIが記事をレビューする
    9. Python側でHTML形式を検証する
    10. OKなら保存する

    第6回AI記事作成のポイントは、Writer AIにいきなり記事を書かせないことです。

    先にResearcher AIが情報を整理し、その結果をWriter AIへ渡します。

    第6回の検索処理の流れを示した図。ユーザーのキーワード入力から、Planner AIによる記事設計、Researcher AIによる検索クエリ作成、mcp_client.py、mcp_server.py、web_search_tool.pyを経由したWeb検索MCP風ツール、Brave Search APIでの検索、JSON形式の検索結果取得、Researcher AIによる整理、research_note.txt作成、Writer AIによる記事本文作成までの流れを図解している。
    Web検索MCP風ツールがBrave Search APIを使いweb検索を実行、
    Researcher AIが調査メモに整理し、Writer AIに渡す

    Web検索MCP風ツールとは何か

    ここでいうWeb検索MCP風ツールは、正式なMCPサーバーではありません。

    第4回と同じように、Python関数で疑似的にMCPの考え方を再現したものです。

    main.py

    mcp_client.py

    mcp_server.py

    web_search_tool.py

    Brave Search API

    この流れにすることで、main.py は「検索したい」という依頼を出すだけで済みます。

    実際にAPIキーを使ってBrave Search APIへアクセスする処理は、web_search_tool.py にまとめます。

    つまり、役割は以下のように分かれます。

    main.py
    → 全体の流れを管理する

    mcp_client.py
    → Web検索ツールを呼び出す入口

    mcp_server.py
    → Web検索ツールを実行する疑似MCPサーバー

    web_search_tool.py
    → Brave Search APIへアクセスして検索結果を取得する

    実際にWeb検索を行う場所

    実際にWeb検索を行うのは、web_search_tool.pyweb_search() 関数です。

    Brave Search API版では、検索エンドポイントに対して、以下のようにリクエストを送ります。

    検索クエリはURLパラメータとして渡します。

    そして、APIキーはHTTPヘッダーで渡します。

    Brave Search APIはREST形式で利用でき、リクエスト時にはAPIキーを X-Subscription-Token ヘッダーに含める必要があります。

    参考Search – API Reference

    Brave Search API版の web_search_tool.py の考え方

    第6回AI記事作成では、web_search_tool.py を以下の考え方で作ります。

    1. 環境変数 BRAVE_SEARCH_API_KEY を読む
    2. 検索クエリを受け取る
    3. Brave Search APIへリクエストする
    4. JSONレスポンスを受け取る
    5. title / url / snippet に整形する
    6. main.pyへ検索結果を返す

    返す形式は、次のように統一しておきます。

    第6回AI記事作成でのファイル構成

    第6回AI記事作成のファイル構成は、以下の通りです。

    article-agent/
    ├ main.py
    ├ llm_client.py
    ├ validators.py
    ├ review_parser.py
    ├ agents/
    │ ├ planner.py
    │ ├ researcher.py
    │ ├ writer.py
    │ └ reviewer.py
    ├ mcp_client.py
    ├ mcp_server.py
    ├ web_search_tool.py
    └ output/

    新しく追加するファイルは、以下になります。

    agents/researcher.py
    web_search_tool.py

    変更するファイルは以下です。

    main.py
    agents/writer.py
    mcp_client.py
    mcp_server.py

    第6回AI記事作成では、Researcher AIを追加し、Writer AIへ調査メモを渡すため、main.pyagents/writer.py にも変更が入ります。

    Researcher AIが作る調査メモ

    Researcher AIが最終的にWriter AIへ渡すのは、検索結果そのものではなく、整理済みの調査メモです。

    たとえば、キーワードが次のような場合を考えます。

    AIエージェント 2026年 最新動向

    Researcher AIは、Brave Search APIの検索結果をもとに次のようなメモを作ります。

    調査メモ:

    1. 主要な論点
    - AIエージェントは、単なるチャットボットではなく、計画・実行・検証を含むワークフローとして整理されることが多い。
    - 2026年時点では、業務自動化、開発支援、検索・調査支援などで利用が広がっている。

    2. 記事で扱うべき内容
    - AIエージェントの定義
    - 従来のチャットAIとの違い
    - 業務活用例
    - 導入時の注意点
    - 人間による確認の必要性

    3. 注意点
    - 最新情報は変化が早いため、特定サービス名や料金を断定しすぎない。
    - 出典が不明な情報は使用しない。

    4. 参考URL
    - https://...
    - https://...

    Writer AIは、この調査メモを参考に記事を書きます。

    このとき重要なのは、Researcher AIに「検索結果をそのまま貼り付けさせない」ことです。

    検索結果を整理し、記事で使いやすい情報に変換する役割を持たせます。

    Writer AIへの渡し方

    第6回AI記事作成では、Writer AIに渡す情報が増えます。

    第5回までは、主に以下でした。

    キーワード
    記事設計
    レビュー指摘
    前回ドラフト

    第6回では、ここに調査メモを追加します。

    キーワード
    記事設計
    調査メモ
    レビュー指摘
    前回ドラフト

    つまり、run_writer() の引数に research_note を追加します。

    イメージは以下です。

    修正時にも、調査メモを維持したままWriter AIへ渡します。

    これにより、Writer AIは最新情報や参考情報を踏まえた記事を書けるようになります。

    Web検索結果をそのまま信じない

    Brave Search APIを使うと、検索結果を構造化されたJSONで取得できます。

    しかし、検索APIを使っても、Web検索結果が常に正しいとは限りません。

    ・古い情報が上位に出る
    ・信頼性の低いサイトが混ざる
    ・広告や転載記事が混ざる
    ・一次情報ではない場合がある
    ・同じ情報が複数サイトに転載されている場合がある

    そのため、Researcher AIには次のようなルールを与えます。

    ・公式サイトや一次情報を優先する
    ・複数の情報源を確認する
    ・出典URLを残す
    ・不確かな情報は断定しない
    ・日付が重要な情報は更新日を確認する
    ・Writer AIには「確実な情報」と「注意が必要な情報」を分けて渡す

    特に、AIモデル、料金、サービス仕様、リリース情報などは変化が早いため、検索結果の扱いには注意が必要です。

    第6回AI記事作成で追加・変更となるファイル

    第6回AI記事作成では、以下の6ファイルが追加・変更となります。

    追加:
    ・agents/researcher.py
    ・web_search_tool.py

    変更:
    ・main.py
    ・agents/writer.py
    ・mcp_client.py
    ・mcp_server.py

    追加:web_search_tool.py

    追加:agents/researcher.py

    変更:mcp_server.py

    変更:mcp_client.py

    変更:agents/writer.py

    変更:main.py

    第6回AI記事作成の処理途中で保存するファイル

    第6回でも、途中保存の仕組みは維持します。

    さらに、Researcher AI関連のファイルを追加します。

    plan.txt
    research_query.txt
    web_search_results.json
    research_note.txt
    draft_1.html
    review_1.txt
    review_result_1.json
    validation_1.txt
    final_article.html
    run_summary.txt

    それぞれの意味は以下です。

    ファイル内容
    plan.txtPlanner AIの記事設計
    research_query.txtResearcher AIが作成した検索クエリ
    web_search_results.jsonBrave Search APIから取得した検索結果
    research_note.txtResearcher AIが整理した調査メモ
    draft_1.htmlWriter AIの初稿
    review_1.txtReviewer AIの自然文レビュー
    review_result_1.jsonReviewer AIの判定JSON
    validation_1.txtPython側HTMLチェック結果
    final_article.html最終記事
    run_summary.txt実行概要

    これにより、記事がどの情報をもとに作られたのか追跡しやすくなります。

    第6回AI記事作成でできること

    第6回AI記事作成では、以下の機能を持ちます。

    ・Researcher AIを追加する
    ・Brave Search APIを使ったWeb検索MCP風ツールを追加する
    ・検索結果をJSON形式で取得する
    ・検索結果を調査メモに整理する
    ・Writer AIが調査メモをもとに記事を書く
    ・最新情報を扱う記事に対応しやすくする
    ・検索結果や調査メモも途中保存する

    ここまでできると、ローカルAI記事作成システムは、単なる文章生成ツールではなく、調査・執筆・レビュー・検証を分担するマルチエージェント構成に近づきます。

    第6回AI記事作成の実行と実行結果

    Brave Search APIキーの設定

    環境変数を利用する場合

    設定

    確認

    .bashrcを利用する場合

    設定

    .bashrc は、Bashが起動するたびに読み込む設定ファイル

    最新の状態に更新

    プログラムの実行

    実行結果

    ターミナル出力

    (UTF-8)

    (SHIFT-JIS)

    作成記事

    (UTF-8)

    (SHIFT-JIS)

    第6回では、Planner AI、Writer AI、Reviewer AIに加えて、Researcher AIを追加しました。
    Researcher AIは、記事を書く前に検索クエリを作成し、Brave Search APIを使ったWeb検索MCP風ツールから検索結果を受け取り、Writer AIへ渡す調査メモを作成します。

    これにより、ローカルLLMだけでは不足しやすい最新情報を、記事作成フローに取り込めるようになりました。
    まだ参考URLの本文反映など改善余地はありますが、Researcher AIを含む調査・執筆・レビュー・検証の流れは一通り動作しました。

    まとめ:Brave Search APIでローカルLLMの弱点を補う

    第6回AI記事作成では、Planner AI、Writer AI、Reviewer AIに加えて、Researcher AIを追加する流れを整理しました。

    ローカルLLMは便利ですが、単体では最新情報を取得できません。

    そこで、Brave Search APIを使ったWeb検索MCP風ツールを使い、Researcher AIが検索結果を整理してWriter AIへ渡す構成にします。

    Brave Search API

    Researcher AI

    調査メモ

    Writer AI

    この流れにより、AI記事作成システムは、最新情報を扱う記事にも対応しやすくなります。

    ただし、検索APIを使っても、検索結果をそのまま信じるのではなく、Researcher AIが出典や信頼性を整理し、Writer AIには調査メモとして渡すことが重要です。

    第6回AI記事作成は、ローカルAIマルチエージェント記事作成システムを、調査もできる記事作成システムへ発展させる回でした。

    第7回では、イベントに応じて各AIエージェントやツールを呼び出す構成へ進めます。

    第7回:イベント駆動型マルチエージェントへ発展させる