Open7
LangChainについてまとめとく

概要
- LLMを使ったアプリケーション開発のフレームワーク
- pythonやjs/tsで実装されている
ユースケース
- 文書の要約
- チャットボット
- ドキュメントへのQ&A など

LangChainのモジュール
Models > Prompts > Chains > Indexes > Memory > Agents の6つ。
Models
Langchainで使用する機械学習のモデル。
LLMS:
- OpenAIのCompletions API(text-davinci-003)などの大規模言語モデル
Chat Models:
- Open AIのChat API(gpt-4やgpt-3.5-turbo)のためのモジュール
Text Embedding Models:
- テキストをベクトル化するモデル
Completions API 実装例:
from langchain.llms import OpenAI
llm = OpenAI(model_name="text-davinci-003", temperature=0)
result = llm.predict("自己紹介しなさい")
print(result)
Chat API実装例:
from langchain.chat_models import ChatOpenAI
chat = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)
result = chat.predict("自己紹介しなさい")
print(result)

Prompts
モデルへの入力を組み立てるためのモジュール。
4つの要素がある。
- Prompt Templates
- Chat Prompt Templates
- Example Selectors
- Output Parsers
Prompt Templates 実装例:
from langchain.prompts import PromptTemplate
template = """
次のコマンドを説明してください。
コマンド: {command}
"""
prompt = PromptTemplate(
input_variables=["command"],
template=template
)
result = prompt.format(command="ls")
print(result)

Chains
モジュールの(Models、 Templates、Chainsなど)を連結する。
Chains実装例:
import langchain
from langchain.chains import LLMChain
from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
langchain.verbose = True
chat = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)
template = """
次のコマンドを説明してください。
コマンド: {command}
"""
prompt = PromptTemplate(
input_variables=["command"],
template=template
)
chain = LLMChain(llm=chat, prompt=prompt)
result = chain.run("ls")
print(result)

Retrieval(Indexes)
外部のデータを用いて回答を生成する。
種類
- Document Loaders: いろんなリソースからドキュメントをロードする。PDFやCSVなどのデータを読み込むための機能。
- Document Transformers: 読み込まれたドキュメントやテキストデータを大規模言語モデルが扱いやすい形に変換する機能。
- Text Embeding Models: 自然言語の文章や単語を数値のベクトルに変換するモデル。
- Vector Stores: ベクトル化されたデータを管理するための機能。
- Retrievers: ドキュメント検索するための機能。
- Indexing: 大量のテキストデータを効率よく検索できるように整理・構造化する機能。

Memory
プロンプトに履歴を残すことによって過去の会話を踏まえた応答ができるようになる。
種類
- Chat Message History
- Chatの履歴データを管理するための機能
- Simple Memory
- Chain上で最初に設定できる共有メモリの機能
- Buffer memory
- ChainsやAgents間で履歴データを共有するためのメモリ機能
BufferMemory実装例
import langchain
from langchain.chains import ConversationChain
from langchain.chat_models import ChatOpenAI
from langchain.memory import ConversationBufferMemory
langchain.verbose = True
chat = ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo", max_tokens=100)
conversation = ConversationChain(llm=chat, memory=ConversationBufferMemory())
while True:
user_message = input("You: ")
ai_message = conversation.predict(input=user_message)
print(f"AI: {ai_message}")

Agents
LLMが様々なツールを選択して使用しながら動作する。
ツールの例
- Bash
- Google Search
- Wikipedia API