ここだけは押さえておきたいLangChain機能【LangChain-備忘録-#1】

自然言語処理・画像解析

生成AIでアプリケーションを開発するといえば”LangChain”がまず初めに出てくると思います。LangChainを使い始める上で押さえておきたい6つのことについてまとめています。

LangChain概要

LangChainと関係図

LangChainは利用者と生成AI(LLM)やその他外部メディアなどをつなぎ、生成AIを用いたアプリケーション開発を円滑に行うためのライブラリです。

生成AIモデルを利用して実行したいアクションを連鎖的に実行できるようになります。

LangChainの要素

LangChainの要素は以下の6つがメインとなっています。(その他にもありますが、まず覚えるのは以下だと考えています)

Models

生成AIのモデルを読み出すための箱。APIを呼び出して活用します。

api keyの読み込み(行わないとOpenAIのモデルが使えません)(例)

os.environ['OPENAI_API_KEY'] = 'あなたのopenai api key'

LLMs(例)

from langchain.llms import OpenAI

llm = OpenAI(model_name="text-davinci-003", temperature=0)

result = llm.predict("あなたの自己紹介してください。")
print(result)

ChatModels(例)

from langchain.chat_models import ChatOpenAI

chat = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)

result = chat.predict("あなたの自己紹介してください。")
print(result)

Prompts / Prompt Templates

プロンプトをテンプレート化させ、使いまわすことができるようにするもの。

最新のデータベースの情報を後で入れたりなどの状況に対応できるようになる。

Prompt Templates(例)

from langchain.prompts import PromptTemplate
#1
template = ""“
参考書:
{DB}

上記を参考にして次の料理について説明してください。

料理名: 
{input}
"""
#2
prompt = PromptTemplate(
    input_variables=["DB","input"],
    template=template,
)
#3
result = prompt.format(DB="DBの対応するレシピなどの情報",input="パスタ")
print(result)

1.あらかじめtemplateを作成する。template内の{}の箇所が後から挿入する部分。それ以外を使いまわすことができる。

2.PromptTemplateのinput_variablesに{}の変数をセット+tempalteにあらかじめ用意したtemplateを代入

3.prompt.formatに変数の中身を入れる

Chat Prompt Templates(例)

システムプロンプトなどを活用する場合は、以下のようにChatPromptTemplateを活用します。

from langchain.prompts import (
     ChatPromptTemplate,
     PromptTemplate,
     SystemMessagePromptTemplate,
     HumanMessagePromptTemplate,
     )
from langchain.schema import HumanMessage,SystemMessage

chat_prompt = ChatPromptTemplate.from_messages([
      SystemMessagePromptTemplate.from_template("あなたは{input1}のプロです。"),
      HumanMessagePromptTemplate.from_template("以下の料理のレシピを考えてください。\n\n料理名: {input2}")
    ])

messages = chat_prompt.format_prompt(input1 ="日本の郷土料理", input2 ="筑前煮").to_messages()
print(messages)

Output parsers

今回は省略。出力の形状を指定しやすくするためのもの。

Chains

prompt,model,outputをつなぐもの。この機能を活用してアプリケーションのフローを現実化させる。

LLM Chain(例)

プロンプトをモデルに挿入し、出力するまでの基本的な1連を1つの箱に入れ、より使いやすくするイメージ。

# Prompt を用意
template = """
以下の内容に必要な要素を教えてください。。

内容: {input}
"""

prompt = PromptTemplate(
      input_variables=["input"],
      template=template,
)

# Chain を作成
chain = LLMChain(llm=chat, prompt=prompt)

# 実行
result = chain.run(input="生成AIのアプリケーション")
print(result)

SequentialChain / RouterChain

SequentialChain : Chain同士を連結することができるもの

RouterChain : LLMの判断によってChainを分岐することができる。

Memory

会話の履歴の役割を果たすもの。

# メモリの初期化
memory_history = ConversationBufferMemory()

# chainの作成
chain = LLMChain(llm=chat, prompt=prompt,memory=memory_history)

Indexes(Data Conneciton)

モデル内にない新情報やプライベートなデータを活用するために、外部データを活用するための仕組みであり、RAGと呼ばれるものを実装可能。

以下の機能があります。

  • Document Loaders
    • データの読み込み
    • データ形式に応じて各種Loaderを活用
  • Document Transformers(Text Splitters)
    • 管理しやすい単位にテキスト分割、冗長なテキストを除去などを行える
  • Vector Stores:
    • ベクトル化された文章を管理・保管するための機能
  • Retrievers(queryで検索する):
    • Vector Storesへのアクセスと、LLMを呼び出して意図したデータの検索を行うための機能

VectorStoreでの新情報の獲得・利用(例)

#indexesで参照を行う
loader = DirectoryLoader("参照したいデータの格納場所", glob="*.txt")
#vectorstoreの作成
index = VectorstoreIndexCreator().from_loaders([loader])

query="検索したい内容"#prompt
response = index.query(query, llm=llm)

Agents

まとめ中。後日更新します。

おススメ講座

概要をつかむ+高度なアプリ開発を試してみたい場合

↓をクリックでサイトに飛べます

最低限、「LangChain入門の前半・後半」の約2時間見るだけで全体像を詳しく理解できると思います。

手軽に勉強したい場合

↓をクリックでサイトに飛べます

Google Colaboratoryで手軽にLangChainを使ったアプリ開発を体験することができます。

まとめ

LangChainは生成AIを用いたアプリケーション開発を実現することを簡略化させることができるライブラリです。上記の機能を組み合わせることで生成AIを用いたアプリケーションを実現することができます。

開発したいアプリケーションの機能とLangChainの機能を照らし合わせて、有効と判断した場合にはクイックに開発を行うことができるためとても有用であります。ただ、オープンソースであることやversionによって書き方が異なったりとするため、作りこむ際には注意してください。

コメント

タイトルとURLをコピーしました