【GPT】今日から使えるOSSライブラリまとめ

はじめまして、sonesuke( [https://twitter.com/sonesuke](https://twitter.com/sonesuke) ) です。 LLMのニュースを追っかけ続けたので、これからキャッチアップする人用にまとめておきます。

各手法の説明を読む前に、「これだけは知っとけ用語」を読んでおくと意味がわかります。知っている人は飛ばしてください。

# これだけは知っとけ用語

## Retriever

LLMの入力として含められる情報には上限があります。GPT-3.5で4k トークン。GPT-4でも、8K, 32Kトークンです。十分大きくなったとはいえ、本一冊分とかは無理なわけです。これをうまくチャンクに分けて、質問から、チャンク化された文章を検索できるようにしたものを、Retriverと言います。

詳しくは、下記のページが参考になります。

https://tech.acesinc.co.jp/entry/2023/03/31/121001

## 埋め込み(Embeddings)

簡単にいうと、LLMを使って、入力を固定長のベクトル表現にすることを言います。

ここで、大事なのはLLM的に似ているものは似たベクトルになり、離れているものは異なるベクトルになるというところです。これだけだと、あまり、ありがたみがわからないかもしれませんが、次に紹介するベクトル検索と合わせて使うことで、Retrieverを構成する一つの方法になります。

埋め込みという言葉自体はもっと一般的な言葉で、LLM以外の界隈でも使われるので要注意。

## ベクトル検索

ベクトルの類似度を用いて、検索する方法です。従来のキーワード検索とは異なり、意味的に近いものが上位にくるため、セマンティック検索と呼ばれることもあります。

上述のRetrieverは、入力コンテキストに含めるべき文章を、このベクトル検索を使用して抽出しているものが多いです。

# フレームワーク系

## LangChain

LLMフレームワークの老舗。更新スピード、実績ともに随一。

モジュールとして下記があり、これらを組みわあせて複雑なアプリケーションを作ることができます。

- Prompt
- Chain
- Model
- Memory
- Agent
- Evaluation

LLMを使って賢いことをやっていると思ったら、これが入っているんじゃないかと疑った方がいいぐらいです。先日、資金調達もしており、最も勢いのあるOSSのうちの一つです。Python製と、Typescript製があります。

https://github.com/hwchase17/langchain

## LlamaIndex

LangChainと並んで老舗のフレームワーク。更新スピードもかなり早いです。Python製。

埋め込みを使って、膨大な記憶をうまく管理してプロンプトに入れていこうというライブラリ。

インデックスの構造として、下記の種類があり、本やWebサイトぐらい大きな文章構造を持つものであっても、対応できることが特徴です。

- List Index
- Vector Store Index
- Tree Index
- Keyword Table Index

https://gpt-index.readthedocs.io/en/latest/guides/primer/index_guide.html

https://github.com/jerryjliu/llama_index

## ChatGPT Retrieval Plugin

OpenAI公式のChatGPT Pluginのフレームワーク。

text-embedding-ada-002を利用したRetriever が入っています。Python製。

https://github.com/openai/chatgpt-retrieval-plugin

## Semantic Kernel

マイクロソフト製のLLMアプリのフレームワーク。C#で、PythonはまだPreview版。

https://github.com/microsoft/semantic-kernel

下記のページがとてもわかりやすいです。

https://qiita.com/nohanaga/items/430b59209b02c298ef2a

## HuggingGPT / JARVIS

HuggingGPTのフレームワーク。Microsoft製。Python製。

下記のステージで処理することが特徴です。

- Task Planning
- Model Selection
- Task Execution
- Response Generation

この中では後発ですが、Taskプランニングというステージがあることで、いろいろなツールを使いこなすことができることが特徴です。

https://arxiv.org/abs/2303.17580

https://github.com/microsoft/JARVIS

## Promptable

シンプルなLangChainのNode.js版。そもそも、LangChain自体にNode.js版があるので、立ち位置が微妙ですが、シンプルな実装を見てたかったら、こちらを。Model, Prompt, Embedding, Chainで、LLMアプリを作るフレームワークを提供しています。

https://github.com/cfortuner/promptable

# ユーティリティ系

## Guardrails

LLMの出力をきちんと構造化しようという発想のフレームワーク。Python製。

LLMアプリケーションを作ろうと思ったら、出力を安定させることに苦労したと思います。このライブラリでは、RAILという形式で出力が満たすべき仕様を書き、満たさない場合に指定したふるまいをさせます。

https://github.com/ShreyaR/guardrails

## Kor

入力に対して、あらかじめ定義した構造で情報を抽出しようというライブラリ。Python製。

https://github.com/eyurtsev/kor

## Chatarena

複数のLLMにゲームさせようというフレームワーク。どう使うのかはさておき、アイデアとして面白かったのでのせました。

https://github.com/chatarena/chatarena

# ベクトル検索エンジン

## FAISS

近傍探索ライブラリ。ベクトル検索エンジン。Meta社製。Pythonラッパーあり。

内部的にはC++を使用してBLASで作られており、高速に動作することが期待できます。また、GPUを使うことで、さらなるパフォーマンスを引き出すことができそうです。

https://github.com/facebookresearch/faiss

## Chroma

インメモリのベクトル検索エンジン。お手軽に使うならこちらかもしれません。PythonとJavascriptのクライアントがあります。

https://github.com/chroma-core/chroma

## qdrant

Rust製のベクトル検索エンジン。まだ、ちょっと調査不足でよくわかっていませんが、FAISSに比べて高機能であるらしいです。

https://qdrant.tech/

## Pinecone

AIの長期記憶と書いていますが、ベクトル検索エンジン。SaaSで、APIとして提供されています。無料利用枠あり。

https://www.pinecone.io/

## pgVector

ベクトル検索。PostgreSQLの拡張。諸事情で載せておきます。

https://github.com/pgvector/pgvector

# まとめ

OSSのライブラリを紹介してきました。これらのライブラリは使用するだけではなく、ぜひ中のソースコードを見てみることをおすすめします。最新のプロンプトエンジニアリングがみることができ、プログラミングの仕方が変わったんだなと実感できることでしょう。

もっと中身の学術的なところだったりを知りたい場合は、こちらを参照してください。

https://qiita.com/sonesuke/items/24ac25322ae43b5651bc