「Declarai、FastAPI、およびStreamlitを使用してLLMチャットアプリケーションを展開する」

Deploy LLM chat application using Declarai, FastAPI, and Streamlit.

スクリーンショット | 著者によって撮影 | 全著作権所有

2022年10月、私はLarge Language Models(LLM)の実験を始めた際、初期の傾向はテキストの補完、分類、NER、その他のNLP関連の領域を探求することでした。経験は刺激的でしたが、すぐにパラダイムシフトを感じました。従来の補完ベースのLLMへの関心の低下が顕著であり、GPT-3.5やGPT-4のようなチャットモデルが普及しました。

この移行は、チャットボットに関する業界のブームと重なりました。アシスタントチャットボットやビジネスフロー向けのチャットボットなど、同僚たちは確信していました。チャットが進むべき方向です。そのため、私の旅路はさまざまなユースケースのチャットボットの構築に転換しました。

最近、この知識を共有するために、Declaraiにチャットボットの機能を統合することを決定しました。私たちのビジョンは何でしょうか?5分以内で95%の標準的なユースケースに合わせた任意のLLM関連タスクを展開できる直感的なオープンソースツールであり、それに基づいた堅牢な本番環境を構築できることです。

Declarai in Action 🚀

Declaraiの理念は、開発者が意図したタスクを宣言することです。デモンストレーションでは、SQL関連のクエリに対応するSQLチャットボットを作成します。

まず、システムのプロンプトを設計します。これは、チャットボットの機能の範囲を設定するガイドメッセージです。

SQL関連の質問をサポートするSQLチャットボットを作成しています。

from declarai import Declaraideclarai = Declarai(provider="openai", model="gpt-3.5-turbo")@declarai.experimental.chatclass SQLChat:    """    SQLクエリの作成をユーザーが手助けするSQLアシスタントです。    ユーザーが使用したいSQLの文法を最初に知る必要があります。MySQL、PostgreSQL、SQLiteなど、どのSQLの文法を使用したいかを指定します。    SQLと全く関連しないことを言われた場合は、「理解できません。SQLクエリの作成をお手伝いするためにここにいます。」と応答します。    クエリを提供した後、ユーザーに何か他のことを必要としているか尋ねる必要があります。    """

Declaraiでは、このガイドメッセージはクラスのドキュメント文字列にシームレスに組み込まれており、明確さと可読性が確保されています。また、友好的な挨拶でチャットを開始することもできます:

@declarai.experimental.chatclass SQLChat:    """    SQLクエリの作成をユーザーが手助けするSQLアシスタントです。    ユーザーが使用したいSQLの文法を最初に知る必要があります。MySQL、PostgreSQL、SQLiteなど、どのSQLの文法を使用したいかを指定します。    SQLと全く関連しないことを言われた場合は、「理解できません。SQLクエリの作成をお手伝いするためにここにいます。」と応答します。    クエリを提供した後、ユーザーに何か他のことを必要としているか尋ねる必要があります。    """        greeting = "こんにちは、SQLユーザーの方。今日はいかがお過ごしですか?私はSQLクエリの作成をお手伝いします。さあ、始めましょう!どのSQLの文法を使用したいですか?MySQL、PostgreSQL、SQLiteなどがあります。"

では、チャットボットと対話してみましょう:

sql_chat = SQLChat()>>> "こんにちは、SQL愛好家の方!SQLクエリのお手伝いをいたします。お使いのSQL文法は何ですか?MySQL、PostgreSQL、SQLite、またはその他ですか?"sql_chat.send("私はMySQLを希望します。"))>>> "素晴らしい選択です!MySQLクエリのどの部分でお手伝いできますか?"sql_chat.send("「Users」テーブルから最も一般的な名前を5つ取得してください。")>>> "もちろんです!以下は動作するMySQLクエリです:>>> SELECT name, COUNT(*) AS count>>> FROM Users>>> GROUP BY name>>> ORDER BY count DESC>>> LIMIT 5;>>> 他に何かお手伝いできますか?"

SQLChatの例を見ることで、よく構造化された対話モデルの力を垣間見ることができました。

注意 📝: SQLChatは単なる例です。システムメッセージを調整することで、チャットボットを簡単に特定のニーズに合わせることができます。

次のステップは、バックエンドの設定です。FastAPIとStreamlitを使用して、チャットボットを実現し、ユーザーがアクセスできるようにします。

APIバックエンド ⚙️

チャットボットをより広い観客に提供するために、RESTful APIゲートウェイとしてFastAPI、フロントエンド統合としてStreamlitを利用します。

from fastapi import FastAPI, APIRouterfrom declarai.memory import FileMessageHistoryfrom .chat import SQLChatapp = FastAPI(title="Hey")router = APIRouter()@router.post("/chat/submit/{chat_id}")def submit_chat(chat_id: str, request: str):    chat = SQLChat(chat_history=FileMessageHistory(file_path=chat_id))    response = chat.send(request)    return [email protected]("/chat/history/{chat_id}")def get_chat_history(chat_id: str):    chat = SQLChat(chat_history=FileMessageHistory(file_path=chat_id))    response = chat.conversation    return responseapp.include_router(router, prefix="/api/v1")if __name__ == "__main__":    import uvicorn  # pylint: disable=import-outside-toplevel    uvicorn.run(        "main:app",        host="0.0.0.0",        port=8000,        workers=1,        use_colors=True,    )

FastAPIの設定では、新しいメッセージを送信するための1つのルートとチャット履歴を取得するための別のルートの2つのキーとなるルートを確立しています。DeclaraiのFileMessageHistoryは、会話の状態をすべてのインタラクションで保存することにより、セッション間でのチャットスレッドの連続性を確保します。メッセージ履歴をデータベース(Postgres/redis/mongo)に保存する場合は、FileMessageHistoryクラスを置き換えるだけで簡単に行うことができます。

Our FastAPI Swagger | Taken by the author | No rights reserved

フロントエンドの体験 🎨

ユーザーインターフェースは、Streamlitを使用して開発されたチャットGUIです。

Screenshot of the streamlit chat | Taken by the Author| No Rights Reserved

streamlitのセットアップも非常に簡潔です:

import streamlit as stimport requestsst.write("# Welcome to SQLChat Assistant! 👋")st.write(    "Greetings! I'm your sql assistant.\n Together we can craft any sql query you want.")session_name = st.text_input("Provide a name for your chat session")if session_name:    messages = requests.get(f"http://localhost:8000/api/v1/chat/history/{session_name}").json()    for message in messages:        with st.chat_message(message["role"]):            st.markdown(message["message"])    prompt = st.chat_input("Type a message...")    if prompt:        with st.chat_message("user"):            st.markdown(prompt)        with st.spinner("..."):            res = requests.post(f"http://localhost:8000/api/v1/chat/submit/{session_name}",                                params={"request": prompt}).json()            with st.chat_message("assistant"):                st.markdown(res)        messages = requests.get(            f"http://localhost:8000/api/v1/chat/history/{session_name}").json()

チャットセッション名を指定すると、ユーザーは会話を開始できます。メッセージのやり取りごとにバックエンドが呼び出され、処理中に視覚的なフィードバックを提供するスピナーが表示されます。

チャットボットを展開する準備はできましたか 🤖?このリポジトリの完全なコードにダイブしてみてください —

GitHub – matankley/declarai-chat-fastapi-streamlit: declaraiを使用したチャットボットの構築方法の例…

declaraiを使用したチャットボットの構築方法の例、バックエンドサーバーとしてFastAPIを使用して…

github.com

Declaraiの開発について最新情報をお届けします💌。Linkedinページで私たちとつながり、もし私たちのツールが役立つと思われる場合は、GitHubでスター⭐️をいただけると嬉しいです!

Declaraiの機能について詳しく探索するには、ドキュメンテーション📖をご覧ください。

Declarai

Declaraiは、PythonコードをLLMタスクに変換し、使いやすく、本番向けのものにします。DeclaraiはあなたのPythonコードを…

declarai.com

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

AIニュース

「AutoGenを使った戦略的AIチームビルディングが簡単になりました」

イントロダクション デジタルフロンティアが無限の領域に達し、AutoGenは変革的なパラダイムの設計者として現れます。異なる...

機械学習

「AIと産業のデジタル化の時代に、開かれたUSDに開発者が注目」 Note OpenUSD refers to an open-source software library called USD (Universal Scene Description), which is commonly used in computer graphics and animation.

スマートファクトリーから次世代の鉄道システムまで、世界中の開発者と企業は、あらゆるスケールで産業のデジタル化の機会を...

機械学習

ビジュアルキャプション:大規模言語モデルを使用して、動的なビジュアルを備えたビデオ会議を補完する

Google Augmented Realityのリサーチサイエンティスト、Ruofei DuとシニアスタッフリサーチサイエンティストのAlex Olwalが投...

AIニュース

(sekai no toppu 10 no sōsei AI sutātappu)

はじめに 生成AIは現在、世界中の人々の好奇心を引きつけています。私たちのソーシャルネットワーキングフィード内の仮想キャ...

AIニュース

OpenAIのAPIとBubbleを使用した4つのアプリのアイデア

これが、AIとノーコードを組み合わせて、人々が愛するアプリを作成する方法です

人工知能

「2023年の最高のAIアバタージェネレーター10選」

ゲームの冒険に最適なバーチャルなキャラクターを選ぶというスリルを覚えていますか?今日では、バーチャルなアイデンティテ...