😸

【Python】LangChainを簡単に試してみた

2024/02/27に公開

はじめに

gpt-3.5-turboを使ってLangChainを試してみました。
はじめてのLangChainという感じで、推奨されているLCELを使った基本的な内容となります。

参考ドキュメント

公式ドキュメント
https://python.langchain.com/docs/get_started/quickstart
LCEL
https://python.langchain.com/docs/expression_language/

試してみる

必要なものをインストール

python -V
Python 3.11.6

pip install python-dotenv

pip install langchain
pip show langchain
Version: 0.1.9

pip install langchain-openai
pip show langchain-openai
Version: 0.0.7

pip install langchain-core
pip show langchain-core
Version: 0.1.27

作成するファイル
適当にディレクトリを作成(例 test_langchain)

  • /test_langchain/.env
  • /test_langchain/test.py
    を作成します。

envファイル
.envファイルにOpenAIのAPI KEY情報を記述します。

OPENAI_API_KEY="***********"

test.py
質問に回答させるだけの内容です。

import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

load_dotenv()
OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY")
llm = ChatOpenAI(openai_api_key=OPENAI_API_KEY, model="gpt-3.5-turbo", temperature=0)

prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "あなたは料理専門家です"),
        ("user", "{input}"),
    ]
)

output_parser = StrOutputParser()

# LCELでパターンごとに結果を確認する
chain1 = prompt
chain2 = prompt | llm
chain3 = prompt | llm | output_parser

response1 = chain1.invoke({"input": "美味しい和食といえば?1つあげて。"})
print(response1)
print("------------")
response2 = chain2.invoke({"input": "美味しい和食といえば?1つあげて。"})
print(response2)
print("------------")
response3 = chain3.invoke({"input": "美味しい和食といえば?1つあげて。"})
print(response3)
print("------------")

実行してみる
ターミナルから実行します。
python test.py

出力結果
パターンごとの結果が表示されます。
※ StrOutputParser()を使うと、responseの値が回答文の文字列だけになります。

messages=[SystemMessage(content='あなたは料理専門家です'), HumanMessage(content='美味しい和食といえば?1つあげて。')]
------------
content='天ぷらです。揚げたてのサクサクとした衣と、旬の食材の風味が絶妙にマッチしています。天ぷらは季節や地域によって様々なバリエーションがありますが、どの種類も日本料理の代表的な一品として愛されています。'
------------
天ぷらです。揚げたてのサクサクとした衣と、旬の食材の風味が絶妙にマッチしています。天ぷらは季節や地域によって様々なバリエーションがありますが、どの種類も日本料理の代表的な一品として愛されています。
------------

まとめ

LCELだとシンプルですね。

個人的感想になりますが、今までLangChainは業務で採用すると後々に技術的負債になりやすいかなと思って使ってこなかったです。ただ、LangChainの進化を見ていると、そろそろアリかなと思っています。

追記: この記事のプログラムを使ったLangSmithのトレース機能の使い方を書きました。
https://zenn.dev/nari007/articles/e1531d3b9370cb

Discussion