😎

【AI_19日目】大規模言語モデル1冊目

2024/11/09に公開

こんにちは投資ロウトです。

背景

AI開発ができるために大規模言語モデルについて理解を深めていきます。

LangChain

・Prompts・・・LLMを使ったアプリで重要な要素が入力のプロンプト
→以下のようにするとプロンプトをテンプレート化できるとのことでした。

https://python.langchain.com/docs/concepts/prompt_templates/

from langchain_core.prompts import PromptTemplate

template = """
無名の投資系youtuberを教えてください。

Youtuber名: {youtuber}
"""

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

result = prompt.format(youtuber="投資ロウト")
print(result)

結果

無名の投資系youtuberを教えてください。

Youtuber名: 投資ロウト

・ChatPromptTemplate・・・Chat Completions API形式に合わせたもの

https://python.langchain.com/api_reference/core/prompts/langchain_core.prompts.chat.ChatPromptTemplate.html

テンプレートも下記のように使えるとのこと

from langchain_core.prompts import ChatPromptTemplate, HumanMessagePromptTemplate, SystemMessagePromptTemplate

chat_prompt = ChatPromptTemplate.from_messages(
    [
        SystemMessagePromptTemplate.from_template("あなたは{country}のプロフェッショナルの公務員です。"),
        HumanMessagePromptTemplate.from_template("少子高齢化を改善する施策を考えてください。")
    ]
)

messages = chat_prompt.format_prompt(country="日本").to_messages()
print(messages)

出力結果

[SystemMessage(content='あなたは日本のプロフェッショナルの公務員です。', additional_kwargs={}, response_metadata={}), HumanMessage(content='少子高齢化を改善する施策を考えてください。', additional_kwargs={}, response_metadata={})]

・Output Parsers・・・特定の形式に出力させたい時に使えるもの

Pydanticなどの型制御を入れて、型を守るように入力させると、決められたjson等で返却をもらうことも可能とのこと。

https://python.langchain.com/v0.1/docs/modules/model_io/output_parsers/quick_start/

※ただし適切なjson形式で返却されないこともあるため、OutputFixingParserやRetryWithErrorOutputParserといったクラスもあるとのことでした。

・Chains・・・PropmtTemplateやLanguage model, OutputParserを繋いで処理をし、連鎖させてくれるもの。

https://python.langchain.com/api_reference/langchain/chains/langchain.chains.llm.LLMChain.html#langchain.chains.llm.LLMChain.invoke

上記で確認すると、今の書き方はというように変えないといけないとのことでした。

chain = prompt | llm | StrOutputParser()
# ※LLMChainの書き方は非推奨。
# 実行時は以下で呼ぶ

result = chain.invoke({"key": "value"})

・SimpleSequentialChain・・・ChainとChainを繋ぐもの

https://python.langchain.com/api_reference/langchain/chains/langchain.chains.sequential.SimpleSequentialChain.html

・Memory・・・会話履歴などを保存する機能

本にはConversationBufferMemoryなどを使うと記載されていますが、LangGraphを使うのがv0.3系の主流とのこと。
※過去のMemoryでは、Pythonのインスタンス変数に会話履歴が保存されていたので、AWS Lambdaのようなサーバーレスな環境では上手く動作しませんとのことでした。

https://python.langchain.com/docs/how_to/chatbots_memory/

と一旦以上で学習を区切りたいと思います。ご精読ありがとうございました。焦らずコツコツ進めていきたいと思います。
※先にシステムを作るかもしれないので、更新が遅くなるかもしれません。

Discussion