Press "Enter" to skip to content

使用Declarai、FastAPI和Streamlit部署LLM聊天应用程序

屏幕截图 | 作者拍摄 | 版权所有

2022年10月,当我开始尝试大型语言模型(LLMs)时,我最初的倾向是探索文本补全、分类、NER和其他与自然语言处理相关的领域。尽管这一经历令人振奋,但我很快感觉到了一种范式转变。传统的基于补全的LLMs的兴趣明显下降,为GPT-3.5和GPT-4等提供了连贯对话体验的聊天模型让位。

这一转变与聊天机器人的行业热潮相吻合。无论是助理聊天机器人还是为业务流程量身定制的聊天机器人,我的同事们都相信——聊天是未来的方向。因此,我的研究重点转向了构建各种用例的聊天机器人。

最近,我们决定分享这些知识,因此将聊天机器人功能整合到了Declarai中。我们的愿景是,这是一个如此直观的开源工具,以至于任何人都可以在不到5分钟的时间内部署任何与LLM相关的任务,适用于95%的标准用例,并且仍然能够在其周围构建一个强大的生产基础。

Declarai in Action 🚀

Declarai的理念是赋予开发者声明其预期任务的能力。为了进行演示,我们将创建一个SQL聊天机器人,用于处理与SQL相关的查询。

首先,我们设计系统提示语——这是为我们的聊天机器人能力设定边界的引导性消息。

我们正在使用gpt3.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查询。”    在提供给用户一个查询后,你应该询问用户是否还需要其他帮助。    """

在Declarai中,这个引导性消息无缝地嵌入在类的文档字符串中,确保清晰易读。我们还可以用友好的问候开始聊天:

@declarai.experimental.chatclass SQLChat:    """    你是一个SQL助手。你正在帮助用户编写SQL查询。    你应该首先了解用户想要使用的SQL语法。它可以是MySQL、PostgreSQL、SQLite等。    如果用户说的完全与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后端 ⚙️

为了让我们的聊天机器人面向更广泛的受众,我们将使用FastAPI作为我们的RESTful API网关,使用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 response@router.get("/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配置建立了两个关键路由:一个用于提交新消息,另一个用于检索聊天历史记录。Declarai的FileMessageHistory通过在每次交互时保存对话状态,确保我们的聊天线程在会话之间保持连续。如果您更喜欢将消息历史记录保存到数据库(Postgres/redis/mongo),只需简单地替换FileMessageHistory类即可。

我们的FastAPI Swagger | 作者拍摄 | 无版权

前端体验 🎨

我们的用户界面是使用Streamlit开发的聊天GUI。

Streamlit聊天的截图 | 作者拍摄 | 无版权

Streamlit的设置也非常简洁:

import streamlit as stimport requestsst.write("# 欢迎使用SQLChat助手!👋")st.write(    "您好!我是您的SQL助手。\n 我们可以一起编写任何您想要的SQL查询。")session_name = st.text_input("为您的聊天会话提供一个名称")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("输入一条消息...")    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

Leave a Reply

Your email address will not be published. Required fields are marked *