【Langchain】何ができるのかや日本語での使い方、GPT-4との連携方法を解説
皆さんは、Langchainというライブラリをご存知でしょうか?
Langchainを使うことで、ChatGPTの機能を高め、より実用的に使えるようになるのです。現代においてChatGPTは、プログラミングやWebライティングをはじめ、あらゆる業種において「なくてはならない存在」となっているのが現状。
他社よりもできる限りChatGPTを有効活用したいですよね。そこで、ライブラリ「Langchain」の出番です!
具体的にどのような変化があり、どの点が便利になるのか、そして導入方法は何か、気になりますよね?
そこで今回の記事では、Langchainの概要や導入方法、実際に使ってみた感想をお伝えしていきます。
本記事を一読することで、いつも使用しているChatGPTが見違えるほど高機能になり、生産性を格段にアップさせられます。
ぜひ最後までお読みいただき、参考にしてください!
Langchainの概要
LangChainは、2022年10月にオープンソースプロジェクトとして立ち上げられました。
その後、急激に人気を集め、2023年3月の時点で、AmazonやGoogle、Microsoft Azureのクラウドストレージなどのシステムと統合されるなど、いまやLLMを使ったアプリケーション開発のスタンダードになりつつあります。
そんなLangchainの機能などをわかりやすくまとめました。
Langchainとは?
Langchainは、デフォルトのChatGPT単体ではできない機能を追加して、効率化を高めるライブラリです。2024年4月現在はLangChain v0.1.0が最新バージョンとしてリリースされています。
ChatGPTなどの大規模言語モデル(LLM)と外部リソース(データソース、言語処理系)を組み合わせることで、ChatGPT単体ではできなかった機能を拡張させ、より高度なサービスが展開できます。
例えば、LLMに対し「外部データを参考にして、事実をもとに回答を出力させる」といった、いわゆるRAG(Retrieval-Augumented Generation)の実装も可能になります。こうすることで、ハルシネーションを低減できると言われているのです。
特定のタスクに特化させるという手段では、ファインチューニングという選択肢もありますが、Langchainならモデルに追加学習させることなく機能を追加できるのが魅力です。
Langchainの開発元
Langchainを開発したのは、機械学習スタートアップ企業Robust Intelligenceに勤務していたハリソン・チェイス(Harrison Chase)という人物です。
冒頭で紹介したとおり、2022年10月にオープンソースプロジェクトとして立ち上げられ、その後法人化しています。
法人化するまでに成長したのは、GitHub・Twitter・Discordなど、さまざまなプラットフォームで多くの協力者を得られたことが関係しているようです。
Langchainで何ができるのか
ここでは、Langchainで何ができるのか気になっている方のために、基本的な6つの機能を紹介します。それぞれ一つの機能としてますが、機能全体を連携して動作させることも可能です。※1
・LLMのカスタマイズ(Models)
Modelsとは、ChatGPTといったさまざまな大規模言語モデル(LLM)、チャットモデル、埋め込みモデルを同じインターフェース上で取り扱えるようにする機能です。これにより、モデル同士の組み合わせや、カスタマイズが実現でき、応用の幅が広がります。
・外部ツールとの連携(Indexes)
Indexesは、外部データを利用して連携するための機能です。PDFやCSVファイルといった様々な外部データの文書を取得し、回答を生成できます。この効率的な検索システムによって、外部データを利用した最適な指示を送ることができます。
・テンプレートでの効率化(Prompts)
Promptsは、言語モデルへの入力を生成するためのプロンプトの管理や最適期化を行うための機能です。LLMを使用したサービスを行う際には、プロンプトの機能を付け加える必要があります。LangChainのPromptsの機能によって、プロンプトテンプレートや統一された記述方法でコーディングが可能となり、実装コストを抑えることができます。
・対話履歴の記憶(Memory)
Memoryは、ユーザーとの対話の履歴を記憶する機能です。これにより、過去の会話を参照して、より一貫性のある回答生成が可能となります。過去に言語モデルが出力した結果や回答履歴を記憶しておくことで、必要に応じて再び活用することができるようになるのです。
・複雑な回答への対応(Chains)
Chainsは、一度の指示だけで複雑な回答生成が可能となる複数のプロンプトを実行できる機能です。一度指示したプロンプトから生成された回答をもとに、次のプロンプトが実行され、繰り返すことで高精度の回答を生成することができます。さらに、長い文章を分割して要約したり、要約した文章を一つにまとめるといった利用方法が可能となります。
・複数ツールの連携(Agents)
Agentsは、複数の異なったツールを組み合わせて実行する機能です。検索エンジンツールと、グラフを生成するツールを組み合わせて活用するといった方法が可能となります。必要な情報だけを収集して正しいグラフを生成できるまで修正を繰り返してくれるので、正確なデータを効率よく取得できます。
上記の機能はいずれもLangchainを使わずとも、長いコードを使用すれば実践できます。しかし、Langchainならそれぞれの機能だけでなく全体に連携させて実践することができるため、時間の手間を省いて効率よく実用できるのでとても便利です。
なお、Langchainの使い方については「LangChain完全入門」という書籍でも詳しく解説されています。操作が不安な方は、ぜひチェックしてみてください。
Langchainのライセンス
LangchainはMITライセンスで提供されており、配布や商用利用も可能になっています。
詳しくはライセンスページをご確認ください。
利用用途 | 可否 |
---|---|
商用利用 | ⭕ |
改変 | ⭕ |
配布 | ⭕ |
特許使用 | ⭕ |
私的利用 | ⭕ |
Langchainの料金体系
Langchainを利用する際は、「OpenAI API」と「SerpAPI」のそれぞれのキーの取得が必要です。そしてそれぞれのキーの取得には、以下の料金がかかります。ただし、提示された無料の範囲であれば料金をかけることなく使用することが可能です。
OpenAI API(GPT-3.5 Turbo)の費用
OpenAI APIは従量課金制となっています。
利用するモデルによって入出力ともに費用が変わりますのでご注意ください。
モデル | 入力 | 出力 |
---|---|---|
gpt-3.5-turbo-0125 | $0.50 / 1M トークン | $1.50 / 1M トークン |
gpt-4 | $30.00 / 1M トークン | $60.00 / 1M トークン |
SerpAPIの費用
SerpAPIは無料プランがあるので、まずは無料プランで試してみることをおすすめします。
プラン | 月額 | 検索数 |
---|---|---|
Free Plan | 無料 | 100検索 /月 |
DEVELOPER | $75 /月 | 5,000検索 /月 |
また、Meta社からリリースされている「Llama2」や、rinna社からリリースされているオープンソースモデルを活用すれば、上記のようなAPIキーを使用せずともLangChainを使うことが可能になります。
なお、Llamaindexを使った開発について知りたい方はこちらをご覧ください。
Langchainを実際に使ってみた
Langchainはローカルでインストールし実行することもできますが、GoogleColabでも動かすことが可能です。
Langchainを実行するのに必要なスペック
今回、GoogleColabでLangchainを動かしてみました。その際の動作環境は下記の通りです。
■GoogleColab
・GPU:T4
なんと無料プランで使えるGPUのT4でも問題なく動かすことができました。
今回はそれほど重たい処理をしなかったのでスペック的には問題ありませんでしたが、複雑な処理を行う場合は有料プランのGPUを利用することをおすすめします。
Langchainをpythonで使う
では早速GoogleColab上でLangchainを使う準備をしていきましょう。
まず、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にGitHubリポジトリを学習させる
今度はLangchainにGitHubリポジトリを学習させてみます。LangchainとOpenAI APIをインストールするところまでは、上記の手順と同じです。
次にIndexesを使うためのライブラリをインストールします。
pip install chromadb
pip install tiktoken
上記コードを入力して実行したあとは、GitHubリポジトリを読み込むためのライブラリのインストールしましょう。
pip install GitPython
あとは前述した手順と同じようにOpenAIのAPIキーを指定します。
その後、以下のコードを実行してLangChainに読み込ませるGitHubリポジトリのURLとブランチ名を準備、最後にqueryの部分に質問を入力してください。
import os
from langchain.vectorstores import Chroma
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.indexes import VectorstoreIndexCreator
from langchain.document_loaders import GitLoader
clone_url = "https://github.com/hwchase17/langchain"
branch = "master"
repo_path = "./temp/"
filter_ext = ".py"
if os.path.exists(repo_path):
clone_url = None
loader = GitLoader(
clone_url=clone_url,
branch=branch,
repo_path=repo_path,
file_filter=lambda file_path: file_path.endswith(filter_ext),
)
index = VectorstoreIndexCreator(
vectorstore_cls=Chroma, # Default
embedding=OpenAIEmbeddings(disallowed_special=()), # Default
).from_loaders([loader])
query = "質問を入力"
answer = index.query(query)
print(answer)
リポジトリ内の全ファイルを読み込むこともできますが、時間を短縮するためにも拡張子を指定することをおすすめします。
なお、生成AIの機能を拡張できるLlamaIndexについて知りたい方はこちらをご覧ください。
LangchainをChatGPTと連携する方法
Langchainにはいくつか機能があるのですが、今回はその中の「Retrieval」と「Agents」を使ってChatGPTを拡張していきます。
LangchainのRetrievalを使ってみる
まず、LangchainのRetrievalを使ってPDFを読み込み、その情報をもとに回答を生成できるようにしましょう。
今回はRetrievalの中の機能のひとつである、PDFの長文を読み込んで検索する機能「Document Loader」を使ってみます。
LangChainとOpenAIのモデルを利用するので、環境構築としてGoogleColaboratoryでプロジェクトを立ち上げ、次のコマンドを入力して必要なパッケージなどをセットアップします。
基本となるlangchainとopenaiの他に、Documents Loaderを使用するためには次の3つのパッケージが必要になります。
- pypdf
- tiktoken
- faiss-cpu
まとめてインストールしてしまいましょう。
!pip install langchain
!pip install openai
!pip install pypdf
!pip install tiktoken
!pip install faiss-cpu
次にOPENAI_API_KEYを設定します。「*****」の箇所は各自発行したKEYを入力してください。
import os
os.environ["OPENAI_API_KEY"] = "*******"
環境構築は、これで終了です。
今回は仮に、航空大手ANAの決算情報のPDFファイルをダウンロードしてきて、「ANAIR.pdf」という名前でアップロードしました。
アップした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)
実行結果は下記のようになりました。
結果を確認すると、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_openai import ChatOpenAI
from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.utilities import SerpAPIWrapper
次にChatGPTのモデルを指定します。
llm = ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0)
そして、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ファイルからイメージとテキストを分離するというものをやってみます。
まずは必要なパッケージをインストールします。
! 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
上記コードを実行したあと、セッションの再起動を求められるのでリスタートします。
セッションリスタート後、popplerとtesseractが必要になるので関連するパッケージをインストールします。
!sudo apt-get update
!sudo apt-get install pdfinfo poppler-utils tesseract-ocr libtesseract-dev
次にtesseractにパスを通します。
!export PATH=$PATH:/path/to/tesseract
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でGPT4を指定する方法
LangchainをChatGTPと連携する際は、モデルをGPT4に指定することもできます。環境構築とOPENAI_API_KEYの設定が完了したら、以下のコードを入力してください。
ChatOpenAI(model='gpt-4-0125-preview')
あとは、プロンプトを入力して応答を待つだけです。生成AIの回答精度を高めたい方はGPT4を使ってみてください。
Langchainを使ってChatGPTを使いやすく拡張しよう!
LangchainはChatGPTの機能を高機能化するライブラリで、ChatGPTの能力をさらに拡張するためのツールです。
このライブラリにより、現在のChatGPT単体ではできない機能を拡張させ、効率化を高めることができます。主な機能として、言語モデルのカスタマイズ(Models)、外部ツールとの連携(Indexes)、テンプレートでの効率化(Prompts)、対話履歴の記憶(Memory)などが挙げられます。
使用例として、「Document Loader」機能を使ってPDF文書の内容を検索する方法とChatGPTの拡張をご紹介しました。Langchainを利用するには、OpenAIやSerpAPIのAPIキーの取得が必要で、無料の範囲であれば利用は可能ですが、使用量によっては料金がかかる場合があります。Langchainは競合他社より大きなアドバンテージを得るのに大いに役立つのでぜひ試してみてはいかがでしょうか。
生成系AIの業務活用なら!
・生成系AIを活用したPoC開発
・生成系AIのコンサルティング
・システム間API連携
最後に
いかがだったでしょうか?
弊社では
・マーケティングやエンジニアリングなどの専門知識を学習させたAI社員の開発
・要件定義・業務フロー作成を80%自動化できる自律型AIエージェントの開発
・生成AIとRPAを組み合わせた業務自動化ツールの開発
・社内人事業務を99%自動化できるAIツールの開発
・ハルシネーション対策AIツールの開発
・自社専用のAIチャットボットの開発
などの開発実績がございます。
まずは、「無料相談」にてご相談を承っておりますので、ご興味がある方はぜひご連絡ください。
➡︎生成AIを使った業務効率化、生成AIツールの開発について相談をしてみる。
「生成AIを社内で活用したい」「生成AIの事業をやっていきたい」という方に向けて、生成AI社内セミナー・勉強会をさせていただいております。
セミナー内容や料金については、ご相談ください。
また、サービス紹介資料もご用意しておりますので、併せてご確認ください。