LangChainを使ってFAQサイトを検索してみる

注意事項

この記事は、Notion AIに対して

  • 問題と解決策の概要
  • 例示用のコード

を渡して生成した実験的な記事になります。

概要

LangChainは、言語モデルを組み合わせて使用することで、より強力なアプリケーションを作成できるようになる技術です。
LangChainを使用して、所属している会社のFAQサイトから情報を取得する方法について説明します。

LangChainとは

LangChainは、大規模言語モデル(LLM)を使用したアプリケーション開発を可能にする技術です。
LLMを単独で使用することは、本当に強力なアプリケーションを作成するためには不十分であり、他の計算や知識のソースと組み合わせることが本当の力を発揮するのです。
LangChainは、そのような多様な情報源を統合することで、さまざまなタスクに対応できるようになります。

LangChainは、自然言語処理技術により、FAQサイトのコンテンツを解析して、適切な情報を取得することができます。
FAQサイトは企業の業務やサービスに関する情報を提供する重要な場所であり、多くの場合、問題解決に必要な情報が含まれています。

しかし、FAQサイトは通常、大量の情報を含むため、情報を探すのは非常に困難な場合があります。
LangChainを使用することで、FAQサイトの情報をより簡単に取得することができます。

LangChainを使用したコードの例

LangChainを使用してCustom Search Engineで指定したサイトから検索するようにしています。

# 以下の環境変数を設定
# OPENAI_API_KEY="x"
# GOOGLE_CSE_ID="x"
# GOOGLE_API_KEY="x"

from langchain import OpenAI, ConversationChain
from langchain.chains.conversation.memory import ConversationSummaryMemory
from langchain.agents import initialize_agent
from langchain.agents import load_tools
from langchain.agents import ZeroShotAgent, Tool, AgentExecutor
from langchain.chains.conversation.memory import ConversationBufferMemory
from langchain import OpenAI, GoogleSearchAPIWrapper, LLMChain, LLMMathChain

def make_tools(llm):
    search = GoogleSearchAPIWrapper()
    llm_math_chain = LLMMathChain(llm=llm, verbose=True,)
    return [
        Tool(
            name="Search",
            func=search.run,
            description="useful for when you need to answer questions about current events"
        ),
        Tool(
            name="Math",
            func=llm_math_chain.run,
            description="useful for when you need to answer questions about math"
        ),
    ]

def build_prompt(tools):
    prefix = """Have a conversation with a human, answering the following questions as best you can.
    You must answer in Japanese.
    You have access to the following tools:"""
    suffix = """Begin!
    {chat_history}
    Question: {input}
    {agent_scratchpad}"""
    input_variables = ["input", "chat_history", "agent_scratchpad"]
    return ZeroShotAgent.create_prompt(tools,prefix=prefix,suffix=suffix,input_variables=["input", "chat_history", "agent_scratchpad"])

if __name__ == "__main__":
    llm = OpenAI(temperature=0.7)
    tools = make_tools(llm)
    prompt = build_prompt(tools)
    llm_chain = LLMChain(llm=llm, prompt=prompt)
    agent = ZeroShotAgent(llm_chain=llm_chain, tools=tools, verbose=True)
    memory = ConversationBufferMemory(memory_key="chat_history")
    agent_chain = AgentExecutor.from_agent_and_tools(agent=agent, tools=tools, verbose=True, memory=memory)

    while True:
        print('Input:', end=' ')
        text = input()
        if text == 'exit':
            break
        s = agent_chain.run(input=text)
        print("[%s]"%s)

このコードは以下の記事を参考にしつつ書いています。

qiita.com

note.com

回答を確認してみる

所属している会社のヘルプサイトの内容で検索するようにしてみます。

まずは、アップロードできる画像のサイズ上限を教えてください で、どんな回答が返ってくるのかを確認してみます。

Input: アップロードできる画像のサイズ上限を教えてください

> Entering new AgentExecutor chain...

Thought: ネットから検索する必要がある
Action: Search
Action Input: アップロードできる画像のサイズ上限
Observation: 画像 制限、上限 画像登録 1グループあたりの合計画像数 制限なし 1グループあたりの合計画像容量 制限なし 表紙、ステップの画像1つあたりのファイルサイズ 最大20MB ... 2021/08/27 ... マニュアルの表紙やステップに、画像や動画を登録・差し替え・削除 ... アップロ ードすることができる画像・動画データの形式やサイズの上限について. 2023/02/28 ... 選択可能な動画ファイルの詳細はリンク先をご参照くだ さい。 Link. Teachme Bizにアップロードすることができる画像・動画データの形式やサイズの上限 ... 2022/10/13 ... マニュアルの表紙やステップに登録した画像や動画を、差し替えたり、削除 ... にアップロードすることができる画像・動画データの形式やサイズの上限 ... 2021/05/27 ... ... できる画像ファイルの形式はリンク先をご参照ください。 Link. Teachme Bizにアップロードすることができる画像・動画データの形式 やサイズの上限 ... 2022/09/26 ... 1名がアップロードできるファイル数, 3ファイル/月, 5ファイル/月, 20ファイル/月, 100ファイル/月. 最大ファイルサイズ, 5MBまで, 10MBまで ... ... 設定でIPアドレスによるアクセス制限を行っていることを前提に、アプリの固有識別子「端末ID」で特定のアプリからのアクセスを「例外」として許可できる機能です。 WindowsデスクトップアプリにてWord, PowerPointのインポートが可能です。以下の手順でお試しください。 ▽Word, PowerPoint,... 2021/09/15 ... ... 2022/10/18 画像・動画マーキングの設定メニューを移動できるよう になりました · 2022/10/14 特定の操作を行うと、上限数を超えてゲストを登録 ... 2021/04/26 ... 概要 動画のアップロード時にエラーが発生 する障害が発生しておりました。 □発生日時 2021年04月26日 13:09頃~2021年04月26日 13:45頃 □影響範囲 ...
Thought: 上限サイズは20MBと5MBのようです
Final Answer: アップロードできる画像のサイズ上限は20MBと5MBのようです。

アップロードできる画像のサイズ上限は20MBと5MBのようです。 という回答が返ってきており、正解ではありますがどういう種別なのかまでは分からないように見えますね。

次はIP制限 をするためにはで確認します。

Input: IP制限 をするためには


> Entering new AgentExecutor chain...

Thought: IP制限で利用をするためにはどうかを教えてくれるツールを探す。
Action: Search
Action Input: IP制限で利用をする方法
Observation: IPアドレス制限対象拡張に関する申込フォームよりお申し込みください。https://studist.my.site.com/forms/s/ip-expansion... 2022/12/22 ... 【前提】機能を利用できるプランと、設定/解除できる人の条件 ... ・「フォルダIP制限」を設定する方法 選択した外部公開フォルダに対してのみ、外部 ... 2020/03/22 ... 指定IPアドレスの解除をする方法を説明します。 2021/09/28 ... 指定IPアドレスを制限下でも利用できる方法をご案内します。 HTTPステータス:401、403エラーが出る場合など. 2023/01/11 ... IPアドレス制限を設定する方法です。 STEP. 1. STEP. 1. 管理者メニューを表示する. Seculioにログイン後、右上の会社名をクリックし、いずれかの項目 ... kitnoneに帳票出力機能を追加するプラグインRepotoneU Proの利用マニュアルです。 ... 指定IPアドレスを制限下でも利用できる方法をご案内します。 Teachme Biz の操作方法か ら導入・定着・促進のための活用ナレッジをご紹介します。 ... リファラー(遷移元)制限機能を利用するために、リファラー情報を確認でき ... 2022/12/23 ... 外部公開フォルダで「グループIP制限適用」を「する」に設定している場合には、 ... 利用可能なプラン- エンタープライズ- エントリー- スタンダード- ... 2023/02/21 ... フォルダの情報を確認したり、設定を変更する方法を説明します。 ... IPアドレスで外部公開フォルダへのアクセスを制限する(Webブラウザ版). ※外部公開フォルダで「グループIP制限適用」を「する」に設定している場合には、外部公開フォルダの閲覧にも影響します。 5,416. 2022/12/23 01:37. IPアドレスで内部公開 ...
Thought: IP制限で利用をするためには、IPアドレスを外部公開フォルダに設定し、グループIP制限適用を「する」に設定する必要があることが分 かった。
Final Answer: IPアドレスを外部公開フォルダに設定し、グループIP制限適用を「する」に設定することで、IP制限で利用できます。

> Finished chain.
[IPアドレスを外部公開フォルダに設定し、グループIP制限適用を「する」に設定することで、IP制限で利用できます。]

大分それっぽいですが具体的な情報については分かりませんので、そこに関しては課題になりそうです。

まとめ

LangChainは、大規模言語モデルを使用して強力なアプリケーションを作成するための技術です。
LangChainを使用することで、FAQサイトから情報を簡単に取得することができましたが、シンプルに検索エンジンとの組み合わせだけでは あまり欲しい情報が取得できませんでした。
このあたりは、チューニングやソースとなるデータの改善を行えばよりよい精度が高く回答できそうなので、そこは改善していけると面白いかもしれません。