「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チャットボットを作成します。
- Google AIが教育環境でのオーディオブックに対するソーシャル意識を持つ時間的因果関係を考慮したレコメンダーシステム「STUDY」を紹介します
- スウィン・トランスフォーマー | モダンなコンピュータビジョンタスク
- 『強化学習における大規模な行動空間を処理する5つの方法』
まず、システムのプロンプトを設計します。これは、チャットボットの機能の範囲を設定するガイドメッセージです。
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
クラスを置き換えるだけで簡単に行うことができます。
フロントエンドの体験 🎨
ユーザーインターフェースは、Streamlitを使用して開発されたチャットGUIです。
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!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- このNYUとGoogleの論文は、クロスモーダル表現におけるシーケンス長の不一致を克服するための共同音声テキストエンコーダの仕組みを説明しています
- 「機械に学習させ、そして彼らが私たちに再学習をさせる:AIの構築の再帰的性質」
- 『Photoshopを越えて:Inst-Inpaintが拡散モデルでオブジェクト除去を揺るがす』
- 「トランスフォーマーの単純化:あなたが理解する言葉を使った最先端の自然言語処理(NLP)— パート1 — イントロ」
- テキストからビデオ生成 ステップバイステップガイド
- 「Transformerベースの拡散モデルによる画像生成の革新的なアーキテクチャイノベーションを実現するDiffusion Transformers(DiTs)」
- LangChain + Streamlit + Llama ローカルマシンに会話型AIをもたらす