週末にLangChainを使って遊んでみた。LangChainはLLMを便利に使うためのPythonライブラリだ。先日動画で使い方を学んだので、それを参考にLLMが外部のデータを参照して質問に答えるのを試した。
DocumentLoader
LanChainにはLoaderというものがあって、テキストファイルやCSVやPDFなどのファイルをロードすることができる。VectorstoreIndexCreatorというクラスを使ってLoaderを渡してインデックスを作ることができる。VectorstoreIndexCreatorはデータのインデックスを作りLLMがそれを利用できるようにするためのもののようだ。
『走れメロス』の全文のテキストをロードしてインデックスを作り、小説の内容について質問したところ、以下のように小説の内容を参照しているような答えが返ってきた。一見それらしい返答だが、国語のテストだったら満点は取れなさそうだ。
メロスは走ったのは、友人のセリヌンティウスが死刑になるという情報を聞き、彼を助けるために刑場に間に合おうとしたからです
死刑になったのメロスだよね。
ファイル以外にも、サードパーティのLoaderを使うことで、WikipeidaやNotionのDBなどをロードできる。WikipediaLoaderを試してみた。
from langchain.document_loaders import WikipediaLoader from langchain.indexes import VectorstoreIndexCreator from IPython.display import display, Markdown from langchain.vectorstores import DocArrayInMemorySearch from langchain.chat_models import ChatOpenAI # Wikipedia Loader # see https://python.langchain.com/docs/integrations/document_loaders/wikipedia loader = WikipediaLoader(query="HUNTER X HUNTER", load_max_docs=2, lang="ja") llm = ChatOpenAI(temperature=0.0) index = VectorstoreIndexCreator( vectorstore_cls=DocArrayInMemorySearch ).from_loaders([loader]) # %% display(Markdown(index.query("ハンターハンターの主人公の目的は何?", llm=llm))) # %% display(Markdown(index.query("アニメの放送開始日はいつ?", llm=llm))) # %% display(Markdown(index.query("最初にアニメ化されたアニメ作品が放送開始されたのはいつ?", llm=llm)))
Wikipediaの情報を元にした答えを返すことが確認できた。
Document loaders | 🦜️🔗 Langchain Wikipedia | 🦜️🔗 Langchain
VSCodeのJupyter code cells
ちなみに、上記のスクリーンショットのように VSCode で Pythonのコードに # %% というコメントで区切りを入れると、Jupyter Notebookのセル単位で実行するように# %%で区切られたブロックごとに実行できる。週末に知ったのだが、これが便利だった。Jupyter NotebookよりもVSCodeのほうがエディタとして使いやすいし、コードの管理もしやすくなる。
これは Jupyter code cells という名前の機能のようだった。おすすめです。
LangChainの機能はまだまだこんなものじゃないので、もうちょっと頑張ってLLMを使った気の利いたアプリケーションを自分向けにつくって遊んでみたい。