Rainbow Engine

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

IT技術 (Technology)

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

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

 

<目次>

(1) LangChainのChainやAgentとは?概要やサンプルプログラムをご紹介
 (1-1) やりたいこと
 (1-2) Chain概要
 (1-3) Chainサンプルプログラム(Chainの適用)
 (1-4) Agent概要
 (1-5) Agentサンプルプログラム

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

(1-1) やりたいこと

・LangChainのChainやAgentの概要について理解する
・LangChainのChainやAgentのサンプルプログラムを動かし、理解を深める
・LangChainのAgentが「自律的に段取りを考える」様子を肌で実感する
 
(前提)

(1-2) Chain概要

・LangChainではLLMの連結(Chain)により複雑な処理を実現する
・Chainを用いる事で、1つの完結したアプリを作る事ができる
・例えば、ユーザー入力→プロンプト生成→LLMへ連携→応答の一連の流れを実現

(1-3) Chainサンプルプログラム(Chainの適用)

前回の記事のプログラムに対して微修正しました(LLMChainを導入)。
 
(修正前)
    # モデルにPrompt(入力)を与えCompletion(出力)を取得する
    response = llm(chat_prompt.format_prompt(
        prefectures=input("都道府県名を入力してください : "),
        text="調子はどうですか?").to_messages()
    )
(修正後)
    # chainを用いて、ModelとPromptを紐づけ
    chain = LLMChain(llm=llm, prompt=chat_prompt)
    # chainを用いてモデルを実行(Prompt(入力)を与えCompletion(出力)を取得する)
    response = chain.run(prefectures=input("都道府県名を入力してください : "), text="調子はどうですか?")
(全体)サンプルプログラム
import os
from dotenv import load_dotenv
from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import (ChatPromptTemplate,SystemMessagePromptTemplate,HumanMessagePromptTemplate)
from langchain import LLMChain

# 環境変数読み込み
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])

    # chainを用いて、ModelとPromptを紐づけ
    chain = LLMChain(llm=llm, prompt=chat_prompt)
    # chainを用いてモデルを実行(Prompt(入力)を与えCompletion(出力)を取得する)
    response = chain.run(prefectures=input("都道府県名を入力してください : "), text="調子はどうですか?")
    print(response)

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

(1-4) Agent概要

・今までは「アクション」の実行順序が事前に定義されていた
・Agentは実行順序すらもLLMに判断させる
・「アクション」の内容はTool(何かの処理をする関数)を使い出力を得るなど、多岐にわたる
→例えばGoogle検索、DBルックアップ、他Chainの利用など。

(1-5) Agentサンプルプログラム

●STEP0:SerpAPIのAPIキー取得

・①下記URLにアクセス
https://serpapi.com/manage-api-key
・②GitHubやGoogleアカウントでサインイン
(図121)

・③サインイン完了
(図122)
・④確認メールを送付
(図123)
・⑤メールを確認
(図124)

・⑥電話番号の確認
(図125①)
(図125②)
(図125③)
・⑦登録
(図126①)
・⑧「API Key」押下
(図127①)

・⑨表示されたAPIキーを控える(後のサンプルプログラムの「SERPAPI_API_KEY」で使用)

●STEP1:パッケージのインストール

> pip install google-search-results
(図131)

●STEP2:サンプルプログラムの実行(Agentが自律的に段取りを考える!)

(サンプルプログラム)
import os
from dotenv import load_dotenv
from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.llms import OpenAI

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

def main():

    # 言語モデル(OpenAIのチャットモデル)のラッパークラスをインスタンス化
    llm = OpenAI(
        openai_api_key=api_key,
        temperature=0.0
    )
    # ツールのロード。`llm-math`はllmを使用するため、引数に与える
    tools = load_tools(["serpapi", "llm-math"], llm=llm)

    # Agentを初期化。Tool、LLM、Agentの種別を与える。
    agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)

    # 実行
    agent.run("昨日の東京の気温は摂氏で何度?その数字を3乗すると?")

if __name__ == "__main__":
    main()

 
(実行結果例)
> Entering new AgentExecutor chain...
 I need to find the temperature in Tokyo yesterday and then cube it.
Action: Search
Action Input: Tokyo temperature yesterday
Observation: Tokyo Temperature Yesterday. Maximum temperature yesterday: 70 °F (at 1:00 pm) Minimum temperature yesterday: 61 °F (at 8:30 am) Average temperature ... 
Thought: I need to convert the temperature from Fahrenheit to Celsius
Action: Calculator
Action Input: (70-32)*5/9
Observation: Answer: 21.11111111111111
Thought: I now need to cube the temperature
Action: Calculator
Action Input: 21.11111111111111^3
Observation: Answer: 9408.779149519889
Thought: I now know the final answer
Final Answer: 9408.779149519889

> Finished chain.
 

Adsense審査用広告コード


Adsense審査用広告コード


-IT技術 (Technology)
-

執筆者:


comment

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

関連記事

Azure Machine Learningでエラー「Experiment name must be 1-256 characters」が発生した際の原因と対処方法について

  <目次> (1) Azure Machine Learningでエラー「Experiment name must be 1-256 characters」が発生した際の原因と対処方法につ …

Pythonで行列の計算方法をご紹介(Numpyを使用した四則演算や内積計算)

  <目次> (1) Pythonで行列の計算方法をご紹介(Numpyを使用した四則演算や内積計算)  (1-1) 概要  (1-2) STEP1:Numpyのインストール  (1-3) S …

CelonisのコネクタでOracle DBと接続を試した際の設定手順について

  <目次> (1) CelonisのコネクタでOracle DBと接続を試した際の設定手順について  (1-0) 概要  (1-1) STEP1:Data Poolの設定  (1-2) S …

Interstageのワークユニット内でプロセスを分離する方法

  <目次> (1) Interstageのワークユニット内でプロセスを分離する方法  (1-1) STEP1:WUのサンプルの確認(1プロセス)  (1-2) STEP2:WU内で複数プロ …

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

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

  • English (United States)
  • 日本語
Top