Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

IT技術 (Technology)

LangChainとは?概要やサンプルプログラムをご紹介

投稿日:2023年7月12日 更新日:

 

<目次>

(1) LangChainとは?概要やサンプルプログラムをご紹介

(1-1) やりたいこと

・LangChainの概要について理解する
・LangChainのHello World(Python)を行い、基礎理解を深める
 
※以降はPythonを使う前提で進めます

(1-2) LangChainの概要

・「大規模言語モデル」(LLM)を用いたアプリ開発のためのフレームワーク
・原則①:外部データと接続する
・原則②:エージェントとして対話的に動作する→複数のModelプロバイダ、データストア、APIを連動させる

(1-3) LangChainのHello World

Hello Worldの題材は「OpenAIのChatモデルとの疎通」を行います。
(参考:https://python.langchain.com/en/latest/modules/models/chat/integrations/openai.html)

(1-3-0) STEP0:前提事項

→Open AIのAPIが疎通済(★20230604_IT#0732_OpenAI_API_使い方)

(1-3-1) STEP1:パッケージのインストール

> pip install langchain
(図111)

(1-3-2) STEP2:環境構築

・①「openai」のパッケージをインストール
> pip install openai
(図112)
・②「python-dotenv」のパッケージをインストール
> pip install python-dotenv
(図113)

(1-3-3) STEP3:疎通①「LLMから応答を取得する」

・「OpenAIのChatモデル」に対してPrompt(入力)を与えCompletion(出力)を取得する
・メッセージ(→AIMessage、SystemMessage、HumanMessage)を与えるとCompletionを得られる。
 
(サンプルプログラム)メインモジュール
import os
from dotenv import load_dotenv
from langchain.chat_models import ChatOpenAI
from langchain.schema import (AIMessage, HumanMessage, SystemMessage)

# 環境変数読み込み
load_dotenv()
#OpenAIの接続情報など
api_key = os.environ.get('OPEN_AI_KEY')

def main():

    # 言語モデル(OpenAIのチャットモデル)のラッパークラスをインスタンス化
    openai = ChatOpenAI(
        model="gpt-3.5-turbo",
        openai_api_key=api_key,
        temperature=0.0
    )

    # モデルにPrompt(入力)を与えCompletion(出力)を取得する
    # SystemMessage: OpenAIに事前に連携したい情報。キャラ設定や前提知識など。
    # HumanMessage: OpenAIに聞きたい質問
    response = openai([
        SystemMessage(content="あなたは沖縄出身です。沖縄の方言で返答してください。"),
        HumanMessage(content="調子はどうですか?")
    ])
    print(response)

if __name__ == "__main__":
    main()
(サンプルプログラム).envファイル
OPEN_AI_KEY='xxxx'
(実行結果)
content=’ちょーびんぼうでーびるねー。 (ちょっと貧乏だけど、元気だよ。)’ additional_kwargs={}
(図211)

(1-3-4) STEP4:疎通②「PromptTemplate」の活用

・AI系アプリで「ユーザー入力」は基本的にそのままの状態では渡さず、その内容からPromptを組み立ててから送るのが一般的である。
・前の例では「あなたは沖縄出身です。沖縄の方言で返答してください。」固定になっていたが、実際は「沖縄」などの都道府県名のみを受け取ってPromptを作りたい。
(サンプルプログラム)

import os
from dotenv import load_dotenv
from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.schema import (AIMessage, HumanMessage, SystemMessage)

# 環境変数読み込み
load_dotenv()
#OpenAIの接続情報など
api_key = os.environ.get('OPEN_AI_KEY')

def main():

    # 言語モデル(OpenAIのチャットモデル)のラッパークラスをインスタンス化
    openai = ChatOpenAI(
        model="gpt-3.5-turbo",
        openai_api_key=api_key,
        temperature=0.0
    )

    ############# 追記START #############
    prompt = PromptTemplate(
        input_variables=["prefectures"],
        template="あなたは{prefectures}出身です。{prefectures}の方言で返答してください。",
    )
    ############# 追記END #############

    # モデルにPrompt(入力)を与えCompletion(出力)を取得する
    # SystemMessage: OpenAIに事前に連携したい情報。キャラ設定や前提知識など。
    # HumanMessage: OpenAIに聞きたい質問
    response = openai([
        ############# 修正START #############
        # SystemMessage(content="あなたは沖縄出身です。沖縄の方言で返答してください。"),
        SystemMessage(content=prompt.format(prefectures=input("都道府県名を入力してください : "))),
        ############# 修正END #############
        HumanMessage(content="調子はどうですか?")
    ])
    print(response)

if __name__ == "__main__":
    main()

 
(図212)
 

(1-3-5) STEP5:疎通③「ChatPromptTemplate」の活用

・前の例の「PromptTemplate」は画一的なプロンプトでしたが「ChatPromptTemplate」はSystemMessageとHumanMessageを分けたりと、より柔軟に対応が可能です。
 
(サンプルプログラム)
import os
from dotenv import load_dotenv
from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import (ChatPromptTemplate,SystemMessagePromptTemplate,HumanMessagePromptTemplate)

# 環境変数読み込み
load_dotenv()
#OpenAIの接続情報など
api_key = os.environ.get('OPEN_AI_KEY')

def main():

    # 言語モデル(OpenAIのチャットモデル)のラッパークラスをインスタンス化
    llm = ChatOpenAI(
        model="gpt-3.5-turbo",
        openai_api_key=api_key,
        temperature=0.0
    )
    # プロンプトのテンプレート生成
    system_template = "あなたは{prefectures}出身です。{prefectures}の方言で返答してください。"
    system_message_prompt = SystemMessagePromptTemplate.from_template(system_template)
    human_template = "{text}"
    human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
    chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])

    # モデルにPrompt(入力)を与えCompletion(出力)を取得する
    response = llm(chat_prompt.format_prompt(
        prefectures=input("都道府県名を入力してください : "),
        text="調子はどうですか?").to_messages()
    )
    print(response)

if __name__ == "__main__":
    main()
(図311)
(参考)
 

Adsense審査用広告コード


Adsense審査用広告コード


-IT技術 (Technology)
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

Fit & Gapのやり方やテンプレートについて

  <目次> (1) Fit & Gapのやり方やテンプレートについて  (1-1) Fit & Gapとは?  (1-2) 現行機能の整理(機能一覧)  (1-3) 要件の …

SlackのRequest URLで「Your URL didn’t respond with the value of the challenge parameter.」エラーが出た時の対処方法

  <目次> (1) SlackのRequest URLで「Your URL didn’t respond with the value of the challenge par …

no image

Miroでプランを確認する方法

  <目次> (1) Miroでプランを確認する方法  (1-1) 確認方法  (1-2) 【注意点】基本的にプラン(≒Subscription)は「アカウント」ではなく「チーム」に紐づく …

ValgrindのIndirectly Lostの意味や実際のサンプルをご紹介

  <目次> (1) ValgrindのIndirectly Lostの意味や実際のサンプルをご紹介  (1-1) Valgrindの「Indirectly Lost」はどんな状況?  (1 …

Interstage Application ServerにJavaのWebアプリ(Servlet)をデプロイする流れ

  <目次> (1) Interstage Application ServerにJavaのWebアプリ(Servlet)をデプロイする流れ  (1-1) STEP1:EARファイル/WAR …

  • English (United States)
  • 日本語
Top