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

NVIDIAは、AIプロセッサの供給において日本を優先しています

人工知能(AI)技術の世界的な覇権争いを反映した重要な動きとして、NVIDIAのCEOであるJensen Huangは、日本の急増するAIプロ...

AI研究

UC San Diegoの研究者たちは、EUGENeという使いやすいディープラーニングゲノミクスソフトウェアを紹介します

ディープラーニングは生活のあらゆる分野で使用されています。あらゆる領域でその有用性があります。バイオメディカル研究に...

人工知能

「Unblock Your Software Engineers With Unblocked(アンブロックドでソフトウェアエンジニアを活用しましょう)」

「AIは、私たちのフィールドでますます重要な役割を果たしており、私たち開発者の生産性を大きく向上させる能力を持っていま...

AIニュース

「マイクロソフト、Windows上でのCortanaの終了を発表」

マイクロソフトは重要な動きとして、WindowsでのCortanaのサポート終了を宣言しました。この発表は、Windows Centralによって...

人工知能

中間旅程のタトゥープロンプト

次のタトゥーのインスピレーションを探している場合は、Midjourneyを使用してみてください