「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テクノロジー

「Voicemod AIで自分自身のAIボイスを作成しましょう」

自分自身と会話できる世界を想像してみてください。実際には、あなたの声はあなたが望むものになることができます。それは、V...

データサイエンス

お客様との関係を革新する:チャットとReact.jsとのCRMのシナジーを探る

このブログ記事では、CRM、リアルタイムチャットアプリケーション、およびReact.jsライブラリの相互関係について探求します

AI研究

インディアナ大学の研究者たちは、「Brainoware」という最先端の人工知能技術を発表しましたこの技術は、脳器官のようなオルガノイドとシリコンチップからインスピレーションを受けています

生物学の原理と技術革新の融合により、人工知能(AI)の著しい進歩が得られてきました。インディアナ大学ブルーミントン校の...

データサイエンス

「データ管理におけるメタデータの役割」

「メタデータは現代のデータ管理において中心的な役割を果たし、統合、品質、セキュリティに不可欠であり、デジタルトランス...

人工知能

「デジタル時代のユーザーセントリックデザイン:ウェブデザインとUI/UX体験に影響を与えるトレンド」

ユーザー体験に重点を置くウェブデザインの最新トレンドを紹介しましょうダークモードの普及から3D要素の統合まで、魅力的な...

機械学習

マルチモーダル言語モデルの解説:ビジュアル指示の調整

「LLMは、多くの自然言語タスクでゼロショット学習とフューショット学習の両方で有望な結果を示していますしかし、LLMは視覚...