Google Colaboratory上でLangChainのLLMRequestsChainを使って、読み込んだウェブページを元に会話をする

本記事ではGoogle Colaboratory上でLangChainのLLMRequestsChainを使って、読み込んだウェブページを元に会話をしていきます。

Google Colaboratoryの使い方がわからない方は、まずこちらの記事をご覧ください。

LangChainのLLMRequestsChainでは、ウェブサイトのURLを指定し、そのウェブサイトの内容から会話の返事を返してくれる機能となります。

LLM内のデータは古い

LLMのモデルによっては内部のデータが古く、会話の中に最新の情報が反映されない場合があります。GPTの中のデータは2021年9月までの情報に限られていることが知られています。

このことから、GPTにLangChainのことを聞いても以下のような回答が返ってきます。

前のライブラリが存在しないか、もしくは別の名前で知られている可能性があります。

もし具体的な情報や背景があれば、それに基づいてより具体的な回答を提供することができるかもしれません。また、ライブラリの用途や目的、開発言語などの情報も提供していただけると、より具体的な回答ができるかもしれません。

2021年だと本記事を執筆時から2年も古い状態です。これだと新しい情報を知りたいときや要約したい時に困ります。

LLMRequestsChainではウェブサイトのデータを活用し回答を返してもらうことができます。

スクリプトを書いてみる

LLMRequestsChainを使ったスクリプトを書いてみましょう。この例では、ハリーポッターのWikipediaサイトを使ってみました。

# !pip install langchain openai
# !pip install pydantic
# langchain.verbose = True
# langchain.debug = True


from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain, LLMRequestsChain

chat = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0, api_key="ここにAPI Keyを貼る")

template = """The part below surrounded between >>> and <<< is the response data of a website.
Extract the answer to the question "{query}". If there is no specific answer in the website, answer "Answer Not Found".
Use the answer format below
Answer:<Answer or "Answer Not Found">
>>> {requests_result} <<<
Answer:"""

PROMPT = PromptTemplate(
    input_variables=["query", "requests_result"],
    template=template,
)

chain = LLMRequestsChain(llm_chain = LLMChain(llm=chat, prompt=PROMPT, verbose=False), verbose=False)

question = "Describe the character Harry Potter in 3 lines"
inputs = {
    "query": question,
    "url": "https://en.wikipedia.org/wiki/Harry_Potter"
}

chain(inputs)

このスクリプトでは、ハリーポッターのWikipediaにある情報の中で、質問に対する答えがある場合はそれを返してもらう、もし見つからなかった場合はAnswer Not Foundを返してもらいます。

上記例では

Describe the character Harry Potter in 3 lines

と質問を投げています。これは、ハリーポッターというキャラクターを三行で説明してください、と聞いています。その返答がこちらです。

Answer: Harry Potter is a young wizard who attends Hogwarts School of Witchcraft and Wizardry. He is known for surviving an attack by the dark wizard Lord Voldemort as a baby, which left him with a lightning-shaped scar on his forehead. Harry is brave, loyal, and determined to stop Voldemort's plans for power.

英語で申し訳ないのですが、しっかり説明してくれています。すごいですね。。。

ちょっと意地悪もしてみました。URLをロード・オブ・ザ・リングのWikipedia https://en.wikipedia.org/wiki/The_Lord_of_the_Rings にして同じ質問をしてみたところ、下記の回答が返ってきました。

Answer: Answer Not Found

ちゃんと見つからなかったと返してくれました。

この機能を使えば新しい情報を使って回答を引き出すことができます。いろんな使い方ができそうなので、色々試してみたいと思います。

Related Posts