1年遅れぐらいでGPT Researcherやってみたらもう最高！（マルチエージェント版もあるよ）

遅ればせながら、GPT Researcherについて調べました。


![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/0fe60e05-3f07-2dcf-1b70-e7f2960e7ab4.png)

公式サイト： https://gptr.dev/
GitHub： https://github.com/assafelovic/gpt-researcher

:::note
開発は[Tavily Search](https://tavily.com/)と同じところのようです。
:::

## とりあえずやってみる

`README.md`に従って実行します。

```shell
git clone https://github.com/assafelovic/gpt-researcher.git
cd gpt-researcher
```

```shell
export OPENAI_API_KEY={OpenAI API Key}
export TAVILY_API_KEY={Tavily API Key}
```

```shell
pip install -r requirements.txt
python -m uvicorn main:app --reload
```

ブラウザで`http://localhost:8000`にアクセスします。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/7c06a05c-5647-7bdc-874e-12c9e839d098.png)

「What would you like me to research next?」に調べたい内容を入力します。

オプション設定項目は以下のような値を設定可能です。

<details><summary>オプション項目</summary>

* **What type of report would you like me to generate?**
    1. Summary - Short and fast (~2 min)
    1. Detailed - In depth and longer (~5 min)
    1. Resource Report


* **In which tone would you like the report to be generated?**
    
    1. Objective - 事実と調査結果を公平かつ偏りなく提示する
    1. Formal - 学術的基準を遵守し、洗練された言葉遣いや構造を用いる
    1. Analytical - データや理論の批判的評価と詳細な検討
    1. Persuasive - 特定の視点や主張について聴衆を説得する
    1. Informative - 主題に関する明確で包括的な情報を提供する
    1. Explanatory - 複雑な概念やプロセスを明確にする
    1. Descriptive - 現象、実験、または事例研究の詳細な描写
    1. Critical - 調査結果や結論の妥当性と関連性を評価する
    1. Comparative - 異なる理論、データ、または方法を比較して相違点や共通点を強調する
    1. Speculative - 仮説や潜在的な影響、将来の研究方向性を探求する
    1. Reflective - 調査プロセスや個人的な洞察や経験を考察する
    1. Narrative - 調査結果や方法論を説明するための物語を語る
    1. Humorous - 親しみやすく、軽快で、内容をより身近に感じさせる
    1. Optimistic - 肯定的な発見や潜在的な利益を強調する
    1. Pessimistic - 制約、課題、または否定的な結果に焦点を当てる

* **What sources would you like me to research from?**
    1. The Web
    1. My Documents
    1. Hybrid

</details>




**「Amazon Novaの各モデルの詳細と既存の他社モデルとの比較」** と入力して実行してみました。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/ab1d0750-f79f-55d2-17b5-e53b253ddfaf.png)

すんげー！！！！！！！！！！！！！！！！！！！！

Markdownでの出力結果はこちらです。

https://qiita.com/moritalous/private/e8e7a6961647637fb338

Google翻訳で日本語にしてもらったのがこちらです。

https://qiita.com/moritalous/private/593b6d48643275671c49

:::note
もうこれでいいです。はい。
:::

## さらにマルチエージェント版を試す

続いてマルチエージェント版です。

マルチエージェントの実装はLangGraphを使って実装されています。
アーキテクチャーはこうなっているとのことです。

READMEから引用
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/0b330a52-7422-1ce6-cb15-48dedfcf41ac.png)

:::note
詳細はREADMEを読んでもらうとして、とりあえず実行します！
:::

```shell
cd multi_agents/
pip install -r requirements.txt
```

マルチエージェント版は、Webインターフェイスは用意されていません。
`task.json`に設定を記述し、コマンド実行するスタイルです。

```json:task.json（デフォルト設定）
{
  "query": "Is AI in a hype cycle?",
  "max_sections": 3,
  "publish_formats": {
    "markdown": true,
    "pdf": true,
    "docx": true
  },
  "include_human_feedback": false,
  "follow_guidelines": false,
  "model": "gpt-4o",
  "guidelines": [
    "The report MUST be written in APA format",
    "Each sub section MUST include supporting sources using hyperlinks. If none exist, erase the sub section or rewrite it to be a part of the previous section",
    "The report MUST be written in spanish"
  ],
  "verbose": true
}
```

以下のように変更しました。

```diff_json:task.json（変更後）
  {
+   "query": "Amazon Novaの各モデルの詳細と既存の他社モデルとの比較",
    "max_sections": 3,
    "publish_formats": {
      "markdown": true,
      "pdf": true,
      "docx": true
    },
    "include_human_feedback": false,
    "follow_guidelines": false,
    "model": "gpt-4o",
    "guidelines": [
      "The report MUST be written in APA format",
      "Each sub section MUST include supporting sources using hyperlinks. If none exist, erase the sub section or rewrite it to be a part of the previous section",
+     "The report MUST be written in 日本語"
    ],
    "verbose": true
  }
```

実行します！！

```shell
python main.py
```

実行結果

https://qiita.com/moritalous/private/d87ec06738bf69834a4d

日本語になっていないところとなってるところが変な感じですが、まとめとしてはいい感じだと思います。

:::note
マルチエージェント版の恩恵はよくわからず、かな？
:::

## まとめ

もうこれでいいです！