Back to Blog

FlaskとLang Smithを連携する方法について解説

flask

2024年12月2日

こんにちは!

今回の記事では、FlaskとLang Smithを連携する方法について解説します。LangSmithは、大規模言語モデル(LLM)を活用したアプリケーションの開発、デバッグ、モニタリングを行うSaasです。

ChatGPTとWebアプリを連携している方は、LangSmithを使うことをぜひおすすめします!

Lang Smithとは?

まずは、Lang Smithについて解説します。

LangSmithは、大規模言語モデル(LLM)を活用したアプリケーションの開発、デバッグ、モニタリングを支援するプラットフォームです。

これにより、LLMアプリケーションの信頼性と保守性を向上させることができます。

以下のように、どのような推論をしたのか、どのくらいトークンをしているのか、どのくらい時間がかかったのかなど、LLMに関するログを表示してくれます。

詳細は、Lang Smithのドキュメントご覧ください。

FlaskとLang Smithを連携する方法

ここからは、FlaskとLang Smithを連携させる方法について解説します。

Lang Smithに登録

まずは、Lang Smithに登録します。以下のURLをクリックします。

https://smith.langchain.com

Googleのアカウントを持っている方は、そのままGoogleのアカウントでログインすることができます。

APIキーの作成

続いて、APIキーを作成します。

画面左下の歯車マーク”settings”をクリックします。

その後、「Create API Key」をクリックしてAPIキーを作成します。

APIキーが作成できたらLang Smith側の準備は完了です。

Flask側の実装

次にFlask側の実装を行います。

今回は、以下の記事のコードを使用します。

FlaskとLangChainを使った簡単な質問応答アプリの作り方(RetrievalQA)

Lang Smith設定前のapp.pyです。

from flask import Flask, request, render_template
from langchain_openai import OpenAI, OpenAIEmbeddings
from langchain_community.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.docstore.document import Document

# Flaskアプリの初期化
app = Flask(__name__)

# OpenAIのAPIキー設定(環境変数を使用することを推奨)
import os
os.environ["OPENAI_API_KEY"] = "自身のOPEN AIのAPIを記述"

# ドキュメントの用意
documents = [
    Document(page_content="『【推しの子】』は赤坂アカと横槍メンゴによる青年漫画で、2020年から2024年まで週刊ヤングジャンプで連載されました。ジャンルは転生、サスペンスで、芸能界の光と闇を描いています。"),
    Document(page_content="主人公アクアは、前世の記憶を持ちながらアイドルの子供として生まれ変わり、母を殺害した犯人を探し復讐を誓います。一方で妹ルビーはアイドルとして活躍を目指します。"),
    Document(page_content="作中のB小町は、主人公たちが活動するアイドルグループで、新旧2つの世代があります。旧B小町は主人公たちの母アイが所属し、新B小町はルビーたちが中心となって活動します。"),
    Document(page_content="【推しの子】のアニメ版は2023年から放送が開始され、2024年には第2期が放送されました。さらに、実写化も進行中で、Amazon Prime Videoで配信され、劇場公開も予定されています。"),
    Document(page_content="本作は芸能界の闇や現代社会の問題を描きつつも、復讐劇や人間ドラマが中心です。主人公アクアの復讐や、妹ルビーのアイドル活動を通じて、家族の絆や葛藤も描かれています。")
]

# ドキュメントの埋め込みとインデックスの作成
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(documents, embeddings)

# RetrievalQAチェーンの作成
llm = OpenAI(temperature=1)
qa_chain = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=vectorstore.as_retriever())

# ルートの定義
@app.route("/", methods=["GET", "POST"])
def index():
    answer = None
    if request.method == "POST":
        question = request.form["question"]
        response = qa_chain.invoke({"query": question})
        answer = response['result']
    return render_template("index.html", answer=answer)

# アプリの実行
if __name__ == "__main__":
    app.run(debug=True)

ここにLang Smithのコードを設定します。以下の内容を追加します。

import os
os.environ["OPENAI_API_KEY"] = "自身のOPEN AIのAPIを記述"
### ↓ここから追加 ###
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_ENDPOINT"] = "https://api.smith.langchain.com"
os.environ["LANGCHAIN_API_KEY"] = "[あなたのAPIキー]"

実装はこれだけです。

動作確認

Flaskを起動して、確認をしてみます。

ブラウザにて、「こんにちは!」と入力してみます。

すると、Lang Smith側に今回のログが表示されています。

このように、FlaskとLang Smithを連携させます。

まとめ

今回の記事では、FlaskとLang Smithの連携方法について解説しました。

この手順を参考にすることで、LLMを活用したアプリケーションの開発や運用がより効率的になるだけでなく、信頼性や保守性の向上にもつながります。

Lang Smithのログ機能を活用すれば、アプリケーションの動作を詳細に追跡し、改善点を発見しやすくなります。

ぜひ実際に試して、より強力なLLMアプリケーションを構築してみてください!

ここまでお読みいただきありがとうございました。

             

Pythonの基礎から応用まで学べる
Python WebAcademy

Python WebAcademyでは、Pythonの基礎からアーキテクチャなどの応用的な内容まで幅広く学べます。また、ブラウザ上で直接Pythonコードを試すことができ、実践的なスキルを身につけることが可能です。

無料で試す