【Langchain】ChatGPTを万能AIにできるオープンソースの使い方から実践まで

Langchain ChatGPT 使い方

皆さんは、Langchainというライブラリをご存知でしょうか?

Langchainを使うことで、ChatGPTの機能を高め、より実用的に使えるようになるのです。

現代においてChatGPTは、プログラミングやWebライティングをはじめ、あらゆる業種において「なくてはならない存在」となっているのが現状。

他社よりもできる限りChatGPTを有効活用したいですよね。

そこで、ライブラリ「Langchain」の出番です!

映画『マトリックス』で主人公ネオがマトリックス内で即座に新しい技術やスキルをダウンロードし学習するかのように、あなたのChatGPTをパワーアップすることができるのです!

具体的にどのような変化があり、どの点が便利になるのか、そして導入方法は何か、気になりますよね?
そこで今回の記事では、Langchainの概要や導入方法、実際に使ってみた感想をお伝えしていきます。

本記事を一読することで、いつも使用しているChatGPTが見違えるほど高機能になり、生産性を格段にアップさせられます。

ぜひ最後までお読みいただき、参考にしてください!

なお弊社では、生成AIの開発について1時間無料相談を承っています。こちらからお気軽にご相談ください。
→無料相談で話を聞いてみる

目次

Langchainの概要

LangChainは、2022年10月にオープンソースプロジェクトとして立ち上げられました。

その後、急激に人気を集め、2023年3月の時点で、AmazonやGoogle、Microsoft Azureのクラウドストレージなどのシステムと統合されるなど、いまやLLMを使ったアプリケーション開発のスタンダードになりつつあります。

そんなLangchainの機能などをわかりやすくまとめました。

Langchainとは?

Langchainは、デフォルトのChatGPT単体ではできない機能を追加して、効率化を高めるライブラリです。

ChatGPTなどの大規模言語モデル(LLM)と外部リソース(データソース、言語処理系)を組み合わせることで、ChatGPT単体ではできなかった機能を拡張させ、より高度なサービスが展開できます。

Langchainの機能

Langchainによって追加できる機能は、主に次のとおりです。それぞれ一つの機能としてますが、機能全体を連携して動作させることも可能です。

・LLMのカスタマイズ(Models)
Modelsとは、ChatGPTといったさまざまな大規模言語モデル(LLM)、チャットモデル、埋め込みモデルを同じインターフェース上で取り扱えるようにする機能です。これにより、モデル同士の組み合わせや、カスタマイズが実現でき、応用の幅が広がります。

・外部ツールとの連携(Indexes)
Indexesは、外部データを利用して連携するための機能です。PDFやCSVファイルといった様々な外部データの文書を取得し、回答を生成できます。この効率的な検索システムによって、外部データを利用した最適な指示を送ることができます。

・テンプレートでの効率化(Prompts)
Promptsは、言語モデルへの入力を生成するためのプロンプトの管理や最適期化を行うための機能です。LLMを使用したサービスを行う際には、プロンプトの機能を付け加える必要があります。LangChainのPromptsの機能によって、プロンプトテンプレートや統一された記述方法でコーディングが可能となり、実装コストを抑えることができます。

・対話履歴の記憶(Memory)
Memoryは、ユーザーとの対話の履歴を記憶する機能です。これにより、過去の会話を参照して、より一貫性のある回答生成が可能となります。過去に言語モデルが出力した結果や回答履歴を記憶しておくことで、必要に応じて再び活用することができるようになるのです。

・複雑な回答への対応(Chains)
Chainsは、一度の指示だけで複雑な回答生成が可能となる複数のプロンプトを実行できる機能です。一度指示したプロンプトから生成された回答をもとに、次のプロンプトが実行され、繰り返すことで高精度の回答を生成することができます。さらに、長い文章を分割して要約したり、要約した文章を一つにまとめるといった利用方法が可能となります。

・複数ツールの連携(Agents)
Agentsは、複数の異なったツールを組み合わせて実行する機能です。検索エンジンツールと、グラフを生成するツールを組み合わせて活用するといった方法が可能となります。必要な情報だけを収集して正しいグラフを生成できるまで修正を繰り返してくれるので、正確なデータを効率よく取得できます。

参考記事:https://ai-market.jp/technology/langchain/#LangChain6

上記の機能はいずれもLangchainを使わずとも、長いコードを使用すれば実践できます。
しかし、Langchainならそれぞれの機能だけでなく全体に連携させて実践することができるため、時間の手間を省いて効率よく実用できるのでとても便利です。

Langchainの料金体系

Langchainを利用する際は、「OpenAI API」と「SerpAPI」のそれぞれのキーの取得が必要です。そしてそれぞれのキーの取得には、以下の料金がかかります。ただし、提示された無料の範囲であれば料金をかけることなく使用することが可能です。

OpenAI API(GPT-3.5 Turbo)の費用

OpenAI APIは従量課金制となっています。

モデル入力出力
4K context$0.0015 / 1Kトークン$0.002 / 1Kトークン
16K context$0.003 / 1Kトークン$0.004 / 1Kトークン

SerpAPIの費用

SerpAPIは無料プランがあるので、まずは無料プランで試してみることをおすすめします。

プラン月額検索数
Free Plan無料100検索 /月
DEVELOPER$50 /月5,000検索 /月

また、Meta社からリリースされている「Llama2」や、rinna社からリリースされているオープンソースモデルを活用すれば、上記のようなAPIキーを使用せずともLangChainを使うことが可能になります。

Langchainを実際に使ってみた

Langchainは使える機能が多いPythonを利用することが推奨されていますが、Javascriptでも利用できるので両方の使い方を試してみましょう。

Langchainをpythonで使う

環境構築はGoogleColabで行いました。
今回はそれほど重たい処理をしないので無料プランでもスペックは十分でした。

まず、LangchainとOpenAI APIをインストールします。

!pip install langchain
!pip install openai

次に、OpenAI API KEYを設定します。

「*************」の部分は各自のAPI KEYを入力してください。

import os

os.environ["OPENAI_API_KEY"] = "*************"

これで準備完了です。

Langchainの基本であるLLMを呼び出してみましょう。

from langchain.llms import OpenAI

# LLMを準備する

llm = OpenAI(temperature=0.9)

# LLMを呼び出し

print(llm.predict("今までにない全く新しい生成AIの名前を日本語で考えてください。"))

生成結果はこちらです。

ネオテルス・・・!

ナイスセンス!!

Langchainをjavascriptで使う

次に、javascriptでLangchainを使ってみましょう。

Langchainの推しポイントであるChatGPTを拡張できるのは本当か?


Langchainにはいくつか機能があるのですが、今回はその中の「Retrieval」と「Agents」を使ってChatGPTを拡張していきます。

LangchainのRetrievalを使ってみる

まず、LangchainのRetrievalを使ってPDFを読み込み、その情報をもとに回答を生成できるようにしましょう。

今回はRetrievalの中の機能のひとつである、PDFの長文を読み込んで検索する機能「Document Loader」を使ってみます。

LangChainとOpenAIのモデルを利用するので、環境構築としてGoogleColaboratoryでプロジェクトを立ち上げ、次のコマンドを入力してそれぞれ実行します。

!pip install langchain
!pip install openai

OpenAIのインストールが終了したら、OpenAIのAPIキーを紐付けるので、次のコマンドを入力して実行します。

import os

os.environ["OPENAI_API_KEY"] = "ここに各々のAPIキーを入力"

環境構築自体は、これで終了です。

次に、Documents Loaderを使用するためには、次の3つのパッケージが必要になります。

  • pypdf
  • tiktoken
  • faiss-cpu

以下のコマンドを実行し、それぞれインストールを行います。

!pip install pypdf
!pip install tiktoken
!pip install faiss-cpu

今回は仮に、航空大手ANAの決算情報のPDFファイルを選択し、「ANAIR.pdf」という名前でアップロードしました。

from langchain.document_loaders import PyPDFLoader

from langchain.vectorstores import FAISS

from langchain.embeddings.openai import OpenAIEmbeddings

loader = PyPDFLoader("ANAIR.pdf")

pages = loader.load_and_split()

print(pages[0])

faissIn = FAISS.from_documents(pages,OpenAIEmbeddings())

docs = faissIn.similarity_search("PDFの発行元の企業名を教えて", k=2)

for doc in docs:

  print(doc.page_content)

実行結果を確認すると、「上場会社名 ANAホールディングス株式会社」と、PDFの内部の情報が読み込まれていることを確認できました。

LangchainのAgentsを使ってみる


次に、LangchainのAgentsを使ってインターネットの情報を利用してみましょう。

今回は弊社のドメインから、会社名を検索して調べてもらい、その後、各種企業情報を取得してもらいます。

追加の設定

検索結果を取得するための追加パッケージと、SerpAPIのAPIキーを設定します。

!pip install google-search-results

import os

import pprint

os.environ[“SERPAPI_API_KEY”] = “ここは各自取得したAPIキーを入力してください”

ドメインから会社名を取得

まず、from〜の部分で必要なagentやtoolをインポートします。

from langchain.llms import OpenAI

from langchain.chains import LLMMathChain

from langchain.agents import Tool

from langchain.agents import load_tools

from langchain.agents import initialize_agent

from langchain.agents import AgentType

from langchain.utilities import SerpAPIWrapper

次にChatGPTのモデルを指定します。

llm = OpenAI(model_name="text-davinci-003")

Google検索機能を提供するツールである「SerpApi」を指定します。

tool_names = ["serpapi"]

tools = load_tools(tool_names,llm=llm)

日本語で結果を返すパラメータを指定したSerpAPIWrapperを設定します。

params = {

    "gl": "jp",

    "hl": "ja",

}

search = SerpAPIWrapper(params=params)

agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)

プロンプトを入力します。ここでは弊社のドメインを指定して

agent.run("""

weel.co.jpを所有する会社名を日本語で教えて?

""")

■結果

実行結果を見てみると「weel.co.jp 会社名」で検索していることがわかりますね。

そして検索結果の中から会社名だけを抽出して「株式会社WEEL」と結果を教えてくれています!

設立日を取得

会社名が株式会社WEELとわかったので、設立日を教えてもらいます。

上記の続きにagunt.run(“”)で追加のプロンプトを入力します。

agent.run("""

株式会社WEELの設立を教えて?

""")

■設立日の取得結果

一番最初に「検索するのが早そう」というAIの感想が表示されて思わず笑ってしまいました・・・。

実行結果を見ているとAIが何を考えて検索しているのか、どういう情報を取得できてどうしたいのかなどを把握できるのでとても面白いですね。

さて、結果は「2017年9月に設立されました」と、しっかり情報が返ってきています!

資本金、業務内容を取得

同じ手順で株式会社WEELの資本金とサービス内容を取得してみましょう。

■資本金の取得結果

資本金の取得時には何度か検索を繰り返していますね。そして、ホームページのaboutから情報を取得したようです。

■業務内容の取得結果

業務内容取得時の際、一度は別の会社情報を取得したようです。その後、今までの検索した結果と違うと理解したのか再検索して業務内容を取得する動きをしていますね。すごい!

従業員数の取得

では最後に従業員数を取得してみます。

■従業員数の取得結果

実は何度試してみても弊社の正確な従業員数を取得することはできませんでした。おそらく弊社ホームページ内の企業情報に従業員数が掲載されていないため、同名の別会社の情報を取得してきているのだと思われます。

LangChainを使ってChatGPTを拡張すると、インターネット上から最新情報を取得することができますが、こちらが意図していない結果を返してくることも度々あります。

そのため、入力するプロンプトの精度を高めることや、取得した情報のファクトチェックも合わせて行うことをおすすめします。

LangChainのマルチモーダルRAGを試してみた

次に、公式のGitに上がっているLangChainのマルチモーダルRAGを試してみました。

今回はPDFファイルからイメージとテキストを分離するというものをやってみます。

GoogleColabで実行したのですが、popplerとtesseractが必要になるので関連するパッケージも含めてインストールします。

! pip install -U langchain openai chromadb langchain-experimental

! pip install "unstructured[all-docs]==0.10.19" pillow pydantic lxml pillow matplotlib tiktoken open_clip_torch torch

!sudo apt-get update

!sudo apt-get install pdfinfo poppler-utils tesseract-ocr libtesseract-dev

次にtesseractにパスを通します。

!export PATH=$PATH:/path/to/tesseract

PDFファイルを格納するディレクトリを作成し、パスを通します。

このディレクトリ内に、サンプルとしてpdf1.pdfとpdf2.pdfというファイルを置いています。

path = "./pdf/"

使用したPDFは公式にもサンプルとして上がっていた下記のものです。

このようなポスターから、テキストだけをうまく抜き出すことができるのでしょうか・・・?

では、PDFからイメージとテキストを分離します。

from unstructured.partition.pdf import partition_pdf

raw_pdf_elements = partition_pdf(

    filename=path + "pdf2.pdf",

    extract_images_in_pdf=True,

    infer_table_structure=True,

    chunking_strategy="by_title",

    max_characters=4000,

    new_after_n_chars=3800,

    combine_text_under_n_chars=2000,

    image_output_dir_path=path,

)

tables = []

texts = []

for element in raw_pdf_elements:

    if "unstructured.documents.elements.Table" in str(type(element)):

        tables.append(str(element))

    elif "unstructured.documents.elements.CompositeElement" in str(type(element)):

        texts.append(str(element))

変数:textsに分離したテキストが格納されているのでprint文で出力してみます。

print(texts)

以下が出力結果です。

順番はバラバラですが、PDFファイル内のテキストを抽出し出力することができました。

すごい!

まとめ

LangchainはChatGPTの機能を高機能化するライブラリで、ChatGPTの能力をさらに拡張するためのツールです。

このライブラリにより、現在のChatGPT単体ではできない機能を拡張させ、効率化を高めることができます。主な機能として、言語モデルのカスタマイズ(Models)、外部ツールとの連携(Indexes)、テンプレートでの効率化(Prompts)、対話履歴の記憶(Memory)などが挙げられます。

使用例として、「Document Loader」機能を使ってPDF文書の内容を検索する方法とChatGPTの拡張をご紹介しました。Langchainを利用するには、OpenAIやSerpAPIのAPIキーの取得が必要で、無料の範囲であれば利用は可能ですが、使用量によっては料金がかかる場合があります。

マトリックスのように即時にパワーアップ!・・・とまで簡単ではありませんが、Langchainを利用することでChatGPTの使用において高精度なテキスト処理や情報検索が効率的に進みます。

Langchainは競合他社より大きなアドバンテージを得るのに大いに役立つのでぜひ試してみてはいかがでしょうか。

最後に

いかがだったでしょうか?

弊社では

・マーケティングやエンジニアリングなどの専門知識を学習させたAI社員の開発
・要件定義・業務フロー作成を80%自動化できる自律型AIエージェントの開発
・生成AIとRPAを組み合わせた業務自動化ツールの開発
・社内人事業務を99%自動化できるAIツールの開発
ハルシネーション対策AIツールの開発
自社専用のAIチャットボットの開発

などの開発実績がございます。

まずは、「1時間の無料相談」にてご相談を承っておりますので、ご興味がある方はぜひご連絡ください。

➡︎生成AIを使った業務効率化、生成AIツールの開発について相談をしてみる。

生成AIを社内で活用していきたい方へ

「生成AIを社内で活用したい」「生成AIの事業をやっていきたい」という方に向けて、生成AI社内セミナー・勉強会をさせていただいております。

セミナー内容や料金については、ご相談ください。

また、弊社紹介資料もご用意しておりますので、併せてご確認ください。

投稿者

  • Hiromi Sai

    ChatGPTメディア運営 / テクニカルライター リベラルアーツ専攻。大学休学中は、Webマーケティング会社のマネージャーとしてライター、ディレクター100名のマネジメントをする。南米のチリとタイでの長期居住歴を持つ。

  • URLをコピーしました!
  • URLをコピーしました!
目次