Loading [MathJax]/jax/output/HTML-CSS/config.js

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:パッケージのインストール

  1. > pip install langchain
(図111)

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

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

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

・「OpenAIのChatモデル」に対してPrompt(入力)を与えCompletion(出力)を取得する
・メッセージ(→AIMessage、SystemMessage、HumanMessage)を与えるとCompletionを得られる。
 
(サンプルプログラム)メインモジュール
  1. import os
  2. from dotenv import load_dotenv
  3. from langchain.chat_models import ChatOpenAI
  4. from langchain.schema import (AIMessage, HumanMessage, SystemMessage)
  5.  
  6. # 環境変数読み込み
  7. load_dotenv()
  8. #OpenAIの接続情報など
  9. api_key = os.environ.get('OPEN_AI_KEY')
  10.  
  11. def main():
  12.  
  13. # 言語モデル(OpenAIのチャットモデル)のラッパークラスをインスタンス化
  14. openai = ChatOpenAI(
  15. model="gpt-3.5-turbo",
  16. openai_api_key=api_key,
  17. temperature=0.0
  18. )
  19.  
  20. # モデルにPrompt(入力)を与えCompletion(出力)を取得する
  21. # SystemMessage: OpenAIに事前に連携したい情報。キャラ設定や前提知識など。
  22. # HumanMessage: OpenAIに聞きたい質問
  23. response = openai([
  24. SystemMessage(content="あなたは沖縄出身です。沖縄の方言で返答してください。"),
  25. HumanMessage(content="調子はどうですか?")
  26. ])
  27. print(response)
  28.  
  29. if __name__ == "__main__":
  30. main()
(サンプルプログラム).envファイル
  1. OPEN_AI_KEY='xxxx'
(実行結果)
content=’ちょーびんぼうでーびるねー。 (ちょっと貧乏だけど、元気だよ。)’ additional_kwargs={}
(図211)

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

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

  1. import os
  2. from dotenv import load_dotenv
  3. from langchain.chat_models import ChatOpenAI
  4. from langchain.prompts import PromptTemplate
  5. from langchain.schema import (AIMessage, HumanMessage, SystemMessage)
  6.  
  7. # 環境変数読み込み
  8. load_dotenv()
  9. #OpenAIの接続情報など
  10. api_key = os.environ.get('OPEN_AI_KEY')
  11.  
  12. def main():
  13.  
  14. # 言語モデル(OpenAIのチャットモデル)のラッパークラスをインスタンス化
  15. openai = ChatOpenAI(
  16. model="gpt-3.5-turbo",
  17. openai_api_key=api_key,
  18. temperature=0.0
  19. )
  20.  
  21. ############# 追記START #############
  22. prompt = PromptTemplate(
  23. input_variables=["prefectures"],
  24. template="あなたは{prefectures}出身です。{prefectures}の方言で返答してください。",
  25. )
  26. ############# 追記END #############
  27.  
  28. # モデルにPrompt(入力)を与えCompletion(出力)を取得する
  29. # SystemMessage: OpenAIに事前に連携したい情報。キャラ設定や前提知識など。
  30. # HumanMessage: OpenAIに聞きたい質問
  31. response = openai([
  32. ############# 修正START #############
  33. # SystemMessage(content="あなたは沖縄出身です。沖縄の方言で返答してください。"),
  34. SystemMessage(content=prompt.format(prefectures=input("都道府県名を入力してください : "))),
  35. ############# 修正END #############
  36. HumanMessage(content="調子はどうですか?")
  37. ])
  38. print(response)
  39.  
  40. if __name__ == "__main__":
  41. main()
  42.  
 
(図212)
 

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

・前の例の「PromptTemplate」は画一的なプロンプトでしたが「ChatPromptTemplate」はSystemMessageとHumanMessageを分けたりと、より柔軟に対応が可能です。
 
(サンプルプログラム)
  1. import os
  2. from dotenv import load_dotenv
  3. from langchain.chat_models import ChatOpenAI
  4. from langchain.prompts.chat import (ChatPromptTemplate,SystemMessagePromptTemplate,HumanMessagePromptTemplate)
  5.  
  6. # 環境変数読み込み
  7. load_dotenv()
  8. #OpenAIの接続情報など
  9. api_key = os.environ.get('OPEN_AI_KEY')
  10.  
  11. def main():
  12.  
  13. # 言語モデル(OpenAIのチャットモデル)のラッパークラスをインスタンス化
  14. llm = ChatOpenAI(
  15. model="gpt-3.5-turbo",
  16. openai_api_key=api_key,
  17. temperature=0.0
  18. )
  19. # プロンプトのテンプレート生成
  20. system_template = "あなたは{prefectures}出身です。{prefectures}の方言で返答してください。"
  21. system_message_prompt = SystemMessagePromptTemplate.from_template(system_template)
  22. human_template = "{text}"
  23. human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
  24. chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
  25.  
  26. # モデルにPrompt(入力)を与えCompletion(出力)を取得する
  27. response = llm(chat_prompt.format_prompt(
  28. prefectures=input("都道府県名を入力してください : "),
  29. text="調子はどうですか?").to_messages()
  30. )
  31. print(response)
  32.  
  33. if __name__ == "__main__":
  34. main()
(図311)
(参考)
 

Adsense審査用広告コード


Adsense審査用広告コード


-IT技術 (Technology)
-

執筆者:


comment

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

関連記事

no image

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

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

システム開発における設計品質の分析の進め方(一例)について

  <目次> (1) システム開発における設計品質の分析の進め方(一例)について  (1-1) まえがき  (1-2) 前提事項  (1-3) 進め方  (1-4) 参考:分析の手法について …

ストーリーポイント(SP)とは?定義やポイントについて

  <目次> (1) ストーリーポイント(SP)とは?定義やポイントについて  (1-1) ストーリーポイント(SP)とは?  (1-2) ストーリーポイント(SP)の注意点  (1-3) …

CORBA通信とは?概要やアーキテクチャについて

  <目次> (1) CORBA通信とは?概要やアーキテクチャについて  (1-1) CORBA通信とは?  (1-2) CORBAのアーキテクチャについて (1) CORBA通信とは?概要 …

Outlookの代行機能(代理人アクセス)の概要および出来る事/出来ない事の整理

  <目次> (1) Outlookの代行機能(代理人アクセス)の概要および出来る事/出来ない事の整理  (1-1) 「代理人アクセス機能」の概要  (1-2) 「代理人アクセス機能」の権限 …

  • English (United States)
  • 日本語
S