見出し画像

LangChain の Tavily Serch API を試す

「LangChain」の「Tavily Serch API」を試したので、まとめました。

1. Tavily

Tavily」は、AIエージェント専用に構築された検索エンジンです。AIの機能を強化し、リアルタイムで正確かつ事実に基づいた結果を迅速に提供します。「Search API」を使用することで、AIエージェントが信頼できるリアルタイムな知識を取得できるようになり、ハルシネーションや偏見を軽減し、より適切な意思決定が可能になります。

LangChain」では「Retriever」(TavilySearchAPIRetriever) などで利用することができます。

2. Tavilyの使用料金

毎月1,000 API コールまで無料で利用できます。

3. TavilyのAPIキーの取得

Tavily」のサイトにログインすることで、APIキーを取得できます。

4. Colabでの実行

Colabでの実行手順は、次のとおりです。

(1) パッケージのインストール。

# パッケージのインストール
!pip install -U langchain langchain_openai tavily-python

(2) 環境変数の準備。
左端の鍵アイコンで「OPENAI_API_KEY」と「TAVILY_API_KEY」を設定してからセルを実行してください。

# 環境変数の準備 (左端の鍵アイコンでOPENAI_API_KEYTAVILY_API_KEYを設定)
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")

(3) TavilySearchAPIRetrieverの準備と確認。
TavilySearchAPIRetrieverでRetrieverを生成します。取得するドキュメントは3つを設定しています。

from langchain.retrievers.tavily_search_api import TavilySearchAPIRetriever

# TavilySearchAPIRetrieverの準備と確認
retriever = TavilySearchAPIRetriever(k=3)
retriever.invoke("ぼっち・ざ・ろっくのぼっちちゃんの得意な楽器は?")
[
    Document(
        page_content='家では専ら映画鑑賞などインドア派だが、前述の古着屋・廃墟巡りをしたりと一応アウトドアな面もある。音楽や楽器にうるさく、語り始めると人が変わったかのように饒舌\xa0...', 
        metadata={
            'title': 'ぼっち・ざ・ろっく!', 
            'source': 'https://ja.wikipedia.org/wiki/%E3%81%BC%E3%81%A3%E3%81%A1%E3%83%BB%E3%81%96%E3%83%BB%E3%82%8D%E3%81%A3%E3%81%8F!', 
            'score': 0.97694, 
            'images': None
        }
    ),
    Document(
        page_content='Dec 26, 2022 — Dec 26, 2022喜多ちゃんギター上達していますね。手首が柔らかいストロークができていて、短期間でもしっかり練習していたが分かります。 何より曲に合わせて表情が\xa0...',
        metadata={
            'title': 'アニメ『ぼっち・ざ・ろっく!』12話最終回 感想 ロックは最高! ...', 
            'source': 'https://anigenavi.com/entry/bocchitherock-ep12', 
            'score': 0.95729, 
            'images': None
        }
    ),
    Document(
        page_content='劇場総集編「ぼっち・ざ・ろっく!」 前編:2024年春 / 後編:2024年夏 公開! あらすじ「ぼっちちゃん」こと後藤ひとりは、ギターを愛する孤独な\xa0...', 
        metadata={
            'title': '劇場総集編「ぼっち・ざ・ろっく!」特報|前編 - YouTube', 
            'source': 'https://www.youtube.com/watch?v=6MIoFigu3Fg', 
            'score': 0.94001, 
            'images': None
      }
    )
]

(4) 質問応答チェーンにRetrieverを組み込む。

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()
)

(5) 質問応答。

chain.invoke({"question": "ぼっち・ざ・ろっくのぼっちちゃんの得意な楽器は?"})
ぼっち・ざ・ろっくのぼっちちゃんの得意な楽器はギターです。


chain.invoke({"question": "薬屋のひとりごとの主人公の名前は?"})
薬屋のひとりごとの主人公の名前は、猫猫(マオマオ)です。


chain.invoke({"question": "勇気爆発バーンブレイバーンの主人公の名前は?"})
勇気爆発バーンブレイバーンの主人公の名前はイサミです。



この記事が気に入ったらサポートをしてみませんか?