【Fate・東方ネタで学ぶ】LangChain の Tavily Search API を使ってみる【GooggleColabノートブック付】

## はじめに 

最近のAI技術の進化に伴い、LangChain と Tavily Search API が注目されています。この記事では、LangChain の枠組みと Tavily Search API の特徴に焦点を当て、初心者向けに簡潔に解説します。特に、下記のコードブロックを用いて、実際の使用方法を詳細に説明します。

---

こちらの記事もおすすめ

https://hamaruki.com/automatic-generation-of-qa-database-using-gemini-api/

https://hamaruki.com/youri-7b-chat-gptq-to-googlecolab/

## LangChainとは？ 

LangChainは、言語モデルを利用したアプリケーション開発のためのフレームワークです。このフレームワークは、コンテキストに基づいた対話や、提供されたコンテキストに基づいて答えるための推論などを可能にします。

https://www.langchain.com/

## Tavilyとは？ 

Tavilyは、リアルタイムのオンライン情報を活用するAIエージェントの開発をサポートするツールです。従来の検索エンジンAPIとは異なり、Tavily Search APIはAI開発者や自律AIエージェントに特化した検索エンジンを提供しています。

https://tavily.com/

## LangChain と Tavily Search API の組み合わせ 

LangChainとTavily Search APIを組み合わせることで、効率的かつ迅速に関連情報を検索し、より高度なAIアプリケーションを開発することが可能になります。---

## コードの実行  

### パッケージのインストール 

まず、必要なパッケージをインストールします。以下のコードを実行して、LangChainとTavily Search APIのライブラリをインストールします。

```python

!pip install -U langchain langchain_openai tavily-python
``` 

### 環境変数の設定 

次に、環境変数を設定します。これにより、LangChainとTavily Search APIに必要なAPIキーを設定できます。

```python

import os
from google.colab import userdata
os.environ["OPENAI_API_KEY"] = userdata.get("OPENAI_API_KEY")
os.environ["TAVILY_API_KEY"] = userdata.get("TAVILY_API_KEY")
``` 

### Tavily Search APIの使用 

Tavily Search APIを使用するための準備をします。ここでは、特定の質問に対して関連する情報を検索する例を示します。

```python

from langchain.retrievers.tavily_search_api import TavilySearchAPIRetriever

retriever = TavilySearchAPIRetriever(k=10)
retriever.invoke("トカマクラブのメンバーは誰？")
``` 

```python

[Document(page_content='トカマ・クラブとは、「東方M-1ぐらんぷり」における漫才コンビの1つである。 第4回大会と第6回大会の2つに出場した経験がある。 概要 第4回大会の最終決戦で突如結成されたコンビ。 本作では乱入がない代... トカマ・クラブ を含むタグ一覧 トカマ・クラブ マイリスト数が多い順 コメントが新しい順 コメントが古い順 再生数が少ない順 コメント数が多い順 コメント数が少ない順 いいね! 数が少ない順 マイリスト数が少ない順 「トカマ・クラブ」動画 18本「第4回東方M-1ぐらんぷり 『最終決戦1組目』」「支援動画を頂いちゃいました! 感激のPart2」「トカマクラブな日常 オープニング (仮)」', metadata={'title': '人気の「トカマ・クラブ」動画 18本 - ニコニコ動画', 'source': 'https: //www.nicovideo.jp/tag/トカマ・クラブ', 'score': 0.95751, 'images': None}),
 Document(page_content='1,
        020 likes,
        3 comments - abema_official on January 13,
        2024: "【 神回確定 】豪華"異色"メンバーによるラブキャッチャー副音声が..." ABEMA（アベマ） on Instagram: "【💎神回確定💎】豪華"異色"メンバーによるラブキャッチャー副音声がABEMA公式YouTubeチャンネルで公開中 秀逸 ...', metadata={'title': 'ABEMA（アベマ） on Instagram: "【 神回確定 】豪華"異色"メンバーによるラブキャッチャー副音声がABEMA公式 ...', 'source': 'https: //www.instagram.com/abema_official/p/C2EyncRvcI3/', 'score': 0.94106, 'images': None}),
 Document(page_content='以上はあくまで考察や予想なので、参考程度にしてみてくださいね。. 最終結果は随時更新していきます!. 韓国Mnetの「ラブキャッチャー」日本版・恋愛リアリティ番組『LOVE CATCHER Japan (ラブキャッチャージャパン)』 2023年1月27日配信の最終回でついに最終 ...', metadata={'title': 'ラブキャッチャージャパン【最終回】結末・マネー＆ラブは誰？最終メンバーや予想・考察・ネタバレ随時更新! | Kポざんまい', 'source': 'https: //mino-jiyu.jp/love-catcher-japan/', 'score': 0.93897, 'images': None}),
 Document(page_content='と題してお届けしてきました。. ラブキャッチャーは誰が愛か金か？. の面白さと、誰と誰がカップルになるかのかけひきもありとても面白かったですね。. ラブキャッチャーメンバーのその後を調査しました。. 撮影後5ヶ月ほど経過しましたが、付き合って ...', metadata={'title': 'ラブキャッチャーメンバーその後を調査!付き合ってるカップルは誰と誰？｜ナナカマドおすすめ情報雑記 Blog', 'source': 'https: //nanakamado.net/lpvechapter-sonogodousita', 'score': 0.93295, 'images': None}),
 Document(page_content='0 0pt お年玉を 手に入れろ! 掲示板へ 記事編集 概要 コンビデータ（第4回大会） コンビデータ（第6回大会） 関連動画 関連項目 掲示板 トカマ・クラブとは、「 東方M-1ぐらんぷり 」における 漫才 コンビ の1つである。 第4回大会と第6回大会の2つに出場した経験がある。 概要 第4回大会の最終 決戦 で突如結成された コンビ 。 本作では 乱入 がない代わりにこの メンバー チェンジ が行われる。 より強い ツッコミ が可 能 である お燐 になったことで、 お空 の 暴走 にも対応できるようになった……と思いきや、 彼女 は 主 でないことをいいことに制御棒でゲンコツを かます ようになった。 まさに ツッコミ （物理） ならぬ ボケ （物理） である。', metadata={'title': 'トカマ・クラブとは (トカマクラブとは) [単語記事
                    ] - ニコニコ大百科', 'source': 'https: //dic.nicovideo.jp/a/トカマ・クラブ', 'score': 0.91357, 'images': None}),
 Document(page_content='document5にトカマクラブの情報を記載しておきます。 ... 彼女の趣味は死体集めで、手に入れた死体は自前の猫車に積んで持ち去ります。しかし、生きている人間や妖怪に殺された死体には興味がありません。 """ document5 = """ トカマ・クラブは「東方m-1ぐらん ...', metadata={'title': 'トカマクラブで学ぶGeminiAPIのEmbeddingに関する解説記事 - Sun wood AI labs.2', 'source': 'https: //hamaruki.com/explanatory-article-on-gemini-embedding-learned-at-the-tokama-club/', 'score': 0.86096, 'images': None}),
 Document(page_content='「トカマクラブ」動画 9本「パルちゃん妬きそば」「【東方mmd】フルモーション お空お燐で漫才」「罰ゲーム受けたい変な奴」 キーワード タグ', metadata={'title': '人気の「トカマクラブ」動画 9本 - ニコニコ動画', 'source': 'https: //www.nicovideo.jp/tag/トカマクラブ', 'score': 0.86079, 'images': None}),
 Document(page_content='そして、#5の5戦目に日本人のタクマが参加するアイドル派のチームが登場。誰がチームメンバーになるのかが読めないなか、誰に来てほしいかと尋ねられたハ・ソクヒは「僕が来てほしいのはクマ（タクマ）ちゃん」「クマ（タクマ）は、ダンスも表情も ...', metadata={'title': '日本人・タクマが健闘!Tomorrow X Togetherの「Crown」を披露『青春スター』', 'source': 'https: //times.abema.tv/articles/-/10028468', 'score': 0.83777, 'images': None}),
 Document(page_content='TALENTS. ホロライブプロダクションの女性VTuberタレントグループ「hololive（ホロライブ）」の公式サイトです。. このページでは所属タレント一覧を掲載しています。.', metadata={'title': '所属タレント一覧 | hololive（ホロライブ）公式サイト', 'source': 'https: //hololive.hololivepro.com/talents', 'score': 0.8133, 'images': None}),
 Document(page_content='mcを務めるのはお笑いコンビ「麒麟」の川島明さんと、tbsアナウンサーの田村真子さんです。 さて、番組の内容はというと、 「衣」「食」「住」「遊」をテーマに、一流のプロたちのお気に入り(Love it＝ラヴィット)を通じて、すぐに手が届く"楽しい"をお ...', metadata={'title': '「ラヴィット!」レギュラー出演者一覧／麒麟川島がmcのtbs朝のバラエティー! | よろず堂通信', 'source': 'https: //yorozu-do.com/love-it/', 'score': 0.8085, 'images': None})]


```


### 質問への応答 (トカマクラブ編)

最後に、LangChainを使用して、検索結果に基づいて質問に答えます。

```python
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_openai import ChatOpenAI

prompt = ChatPromptTemplate.from_template(
    """提供されたコンテキストのみに基づいて質問に答えてください。

Context: {context}

Question: {question}"""
)
chain = (
    RunnablePassthrough.assign(context=(lambda x: x["question"]) | retriever)
    | prompt
    | ChatOpenAI(model="gpt-4-turbo-preview")
    | StrOutputParser()
)


```

```python

chain.invoke({"question": "トカマクラブのメンバーは誰？"})
```

>トカマクラブのメンバーについての直接的な情報は提供されたコンテキストには含まれていません。そのため、具体的なメンバー名を特定することはできません。


```python

chain.invoke({"question": "トカマクラブとは？"})
```
>トカマクラブは、「東方M-1ぐらんぷり」における漫才コンビの1つです。第4回大会と第6回大会の2つに出場した経験があります。

```python

chain.invoke({"question": "トカマクラブの漫才の内容を教えて？"})
```

>提供されたコンテキストには、トカマクラブの漫才の内容に関する情報は含まれていません。コンテキストは主にデジタルセキュリティ、特に証明書データ、信頼できるルート証明書のリスト、MACアドレスの検索、およびDigiCertのルート証明書に関連する情報に焦点を当てています。したがって、トカマクラブの漫才についての質問に答えることはできません。

---

### 質問への応答 (Fate/Apocrypha編)

```python

from langchain.retrievers.tavily_search_api import TavilySearchAPIRetriever

# TavilySearchAPIRetrieverの準備と確認
retriever = TavilySearchAPIRetriever(k=5)
retriever.invoke("fate apocrypha ついて")
```



```python

[Document(page_content='Fate/Apocryphaとは、TYPE-MOONの作品「Fate/stay night」を原作として企画された作品である。 概要 元々は聖杯戦争を舞台としたオンラインゲームとして企画さ...', metadata={'title': 'Fate/Apocryphaとは (フェイトアポクリファとは) [単語記事] - ニコニコ大百科', 'source': 'https://dic.nicovideo.jp/a/fate/apocrypha', 'score': 0.97452, 'images': None}),
 Document(page_content='概要 『 Fate/stay night 』のスピンアウト小説。 "黒"のサーヴァント7騎 VS "赤"のサーヴァント7騎、計14騎＋1騎で展開されていく物語となる。 元々は 聖杯戦争 を舞台にしたオンラインゲームとして『 Fate/EXTRA 』と同時期に企画された作品。 ゲーム企画はお蔵入りとなっていたが、2011年6月発売の「Fate/complete material IV Extra material」にて登場 サーヴァント の設定が公開される。 余談だが武内崇によれば元々は『三国志大戦』のような色々な英雄を複数の作家に描いてもらうというところからスタートした企画だった。', metadata={'title': 'Fate/Apocrypha - TYPE-MOON Wiki', 'source': 'https://typemoon.wiki.cre.jp/wiki/Fate/Apocrypha', 'score': 0.97031, 'images': None}),
 Document(page_content='「アポクリファ」の名の通り、 外典 という形容詞がしばしば用いられている。 TYPE-MOONエース VOL.7にて、新作シリーズとして第1話（ACT1）が発表された。 この短編は結局シリーズ化はせず、本編とは一部設定が異なり、舞台は 新宿 。 冬木の聖杯戦争は継続されており、時系列的には『 Fate/Zero 』で描かれた第四次聖杯戦争より後とされていた。 2012年12月31日、TYPE-MOON BOOKSのオリジナルレーベル「TYPE-MOON BOOKS」から単行本第1巻が発刊。 同年冬開催の コミックマーケット 83では先行販売されている。 当初は全4巻を予定していたが制作の過程で1冊増えることとなり、2014年12月30日に発売された第5巻で最終巻となった。', metadata={'title': 'Fate/Apocrypha - Wikipedia', 'source': 'https://ja.wikipedia.org/wiki/Fate/Apocrypha', 'score': 0.9543, 'images': None}),
 Document(page_content='3.1 キャラ 3.3 声優 3.3 この作品のあらすじ 作品情報・関連情報 レビュー・感想を書く （視聴情報を登録する） みんなが書いた レビュー・感想を読む みんなが選んだこの作品のジャンル・おすすめポイント! 笑える 0 pt', metadata={'title': 'Fate／Apocryphaの評価・感想・レビュー｜あにらぼJAPAN', 'source': 'https://anilab-japan.com/production/detail.php?id=3691', 'score': 0.95114, 'images': None}),
 Document(page_content='ふぇいとあぽくりふぁ 『Fate/Apocrypha』とは、Fateシリーズのひとつである聖杯大戦を描いた小説。 pixivで「Fate/Apocrypha」のイラストを見る pixivで「Fate/Apocrypha」の小説を読む pixivで「Fate/Apocrypha」のイラストを投稿する pixivで「Fate/Apocrypha」の小説を投稿する 目次 [ 非表示 ] 1 概要 1.1 小説版発売までの経緯 2 ストーリー 3 登場キャラクター 3.1 ルーラー陣営 3.2 黒陣営 3.2.1 サーヴァント 3.2.2 マスター 3.3 赤陣営 3.3.1 サーヴァント 3.3.2 マスター 3.4 魔術協会 3.5 ユグドミレニア 3.6 その他 3.6.1 過去の人物', metadata={'title': 'Fate/Apocrypha (ふぇいとあぽくりふぁ)とは【ピクシブ百科事典】', 'source': 'https://dic.pixiv.net/a/Fate/Apocrypha', 'score': 0.93573, 'images': None})]

```



```python

chain.invoke({"question": "fate apocrypha ついて教えて"})
```
>『Fate/Apocrypha』は、TYPE-MOONが提供する「Fate」シリーズの一つで、独自の世界観を持つ物語です。この物語は、第二次世界大戦の前夜に行われた第三次聖杯戦争の最中に何者かによって大聖杯が奪われた結果、世界中で「小規模な亜種の聖杯戦争」が起きているという設定が舞台となっています。『Fate/stay night』の並行世界に位置付けられており、そのため冬木市での大聖杯が失われていることから、第四次以降の聖杯戦争は発生していません。

>物語には、ルーラー陣営、黒陣営、赤陣営、魔術協会、ユグドミレニアなどの多様なグループが登場し、各グループはそれぞれサーヴァント（召喚された英霊）とマスター（サーヴァントを召喚・指揮する魔術師）から成り立っています。『Fate/Apocrypha』は、これらの陣営がそれぞれの目的と願いを叶えるために争う物語です。

>この物語は小説版から始まり、その後コミカライズ版やTVアニメ版が制作されました。アニメ版では、主題歌や制作スタッフ、放送スケジュールなどがファンに提供されています。2023年にはTVアニメ「Fate/Apocrypha」の再放送が実施されることが決定しており、配信情報も提供されています。特にNetflixで見放題となっており、見逃した方やもう一度見たい方にとってはうってつけの配信サービスとなっています。

>以上の情報に基づき、『Fate/Apocrypha』は「Fate」シリーズのファンであれば是非とも楽しむべき作品であり、その独自の世界観と魅力的なキャラクターが多くの視聴者を惹きつけています。


```python

chain.invoke({"question": "fate apocryphaの各陣営ついて教えて"})
```
>『Fate/Apocrypha』では、主に二つの陣営が登場します。「赤の陣営」と「黒の陣営」です。この二つの陣営は、聖杯戦争において互いに対立しています。

>- **黒の陣営**：黒の陣営は、トリファスに拠点を置くユグドミレニア家が率いています。彼らは聖杯戦争のルールを変更し、通常の聖杯戦争とは異なる形式である7対7の団体戦を提案しました。黒の陣営は、主にヨーロッパの魔術師たちや、ユグドミレニア家に忠誠を誓うサーヴァントたちで構成されています。

>- **赤の陣営**：赤の陣営は、マギアス協会が支援しており、主に協会に所属する魔術師たちや、彼らが召喚したサーヴァントで構成されています。赤の陣営は、黒の陣営が提案した団体戦の形式で、黒の陣営と対抗しています。

>どちらの陣営もそれぞれの目的や信念に基づき行動しており、一方が絶対的な正義というわけではありません。物語はこれら二つの陣営の戦いを軸に展開していきますが、中には陣営の枠を超えて行動するキャラクターも存在し、複雑な人間関係や思惑が絡み合っています。



```python

chain.invoke({"question": "fate apocryphaの各陣営のサーバントを箇条書きでください"})
```
>赤の陣営サーヴァント:
- 赤のランサー（カルナ）
- 赤のライダー（アキレウス）
- 赤のアサシン（セミラミス）
- 赤のセイバー（モードレッド）

>黒の陣営サーヴァント:
- 黒のセイバー（ジークフリート）
- 黒のアーチャー（ケイローン）
- 黒のランサー（ヴラド三世）
- 黒のライダー（アストルフォ）
- 黒のキャスター（アヴィケブロン）
- 黒のアサシン（ジャック・ザ・リッパー）



## まとめ 

LangChain と Tavily Search API を利用することで、AIアプリケーション開発がより簡単かつ効率的になります。この記事で紹介したコード例を通じて、初心者でもこれらのツールの基本的な使用方法を理解し、実践することができます。


## 使用ノートブック

https://colab.research.google.com/drive/1v31q7IDKkh2c1_ENaO1ijR0Fqt1nnkYK?usp=sharing

https://colab.research.google.com/drive/1YSTKn974kbnZQvtBamntXBcHItlD7nwz?usp=sharing

## 参考サイト

https://note.com/npaka/n/n9fe8a607c56e?sub_rt=share_h