0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样使用Streamlit创建AutoGen用户界面?

冬至子 来源:思否AI 作者:思否AI 2023-11-08 14:56 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

AutoGen作为一个最大化LLM(如GPT-4)能力的框架而脱颖而出。由微软研究院开发的AutoGen通过提供一种自动化、优化和编排工作流的方法,简化了复杂的、基于多代理llm的应用程序的创建。我们在以前的文章中也有过介绍,你可以与许多GPT交谈,并且GPT和GPT之间也可以互相交谈。每个GPT都是它自己的“代理”,并在总体业务流程中扮演特殊角色。

但是AutoGen是用命令行模式进行交互的,这对我们的输入来说非常不方便,所以这次我们来对其进行改造,使用Streamlit创建一个web界面,这样可以让我们更好的与其交互。

这个项目略微粗糙,但它应该为为AutoGen代理创建简单的ui提供了一个很好的起点。

这里需要注意的是:

明确要求不要运行代码或将文件存储在本地,因为这是Streamlit限制—而不是AutoGen限制。

简单介绍AutoGen

我们之前已经介绍过AutoGen,所以这里再做个简单的回顾:

AutoGen自动化了LLM工作流,这在开发人员制作越来越复杂的基于LLM的应用程序时至关重要。

它提供了可定制的代理,这些代理不仅可以与用户进行自动对话,还可以在代理之间进行自动对话。

AutoGen代理可以合并llm、人工输入和其他工具的组合,克服每个组件单独的局限性。无论是代码生成、执行、调试还是复杂任务解决,AutoGen代理都可以处理各种高级操作。

创建Streamlit应用

我们的目标是这样的:

我们先安装如下包:

aiohttp==3.8.6
 aiosignal==1.3.1
 altair==5.1.2
 async-timeout==4.0.3
 attrs==23.1.0
 blinker==1.6.3
 cachetools==5.3.2
 certifi==2023.7.22
 charset-normalizer==3.3.1
 click==8.1.7
 diskcache==5.6.3
 docker==6.1.3
 FLAML==2.1.1
 frozenlist==1.4.0
 gitdb==4.0.11
 GitPython==3.1.40
 idna==3.4
 importlib-metadata==6.8.0
 Jinja2==3.1.2
 jsonschema==4.19.1
 jsonschema-specifications==2023.7.1
 markdown-it-py==3.0.0
 MarkupSafe==2.1.3
 mdurl==0.1.2
 multidict==6.0.4
 numpy==1.26.1
 openai==0.28.1
 packaging==23.2
 pandas==2.1.2
 Pillow==10.1.0
 protobuf==4.24.4
 pyarrow==13.0.0
 pyautogen==0.1.13
 pydeck==0.8.1b0
 Pygments==2.16.1
 python-dateutil==2.8.2
 python-dotenv==1.0.0
 pytz==2023.3.post1
 referencing==0.30.2
 requests==2.31.0
 rich==13.6.0
 rpds-py==0.10.6
 six==1.16.0
 smmap==5.0.1
 streamlit==1.28.0
 tenacity==8.2.3
 termcolor==2.3.0
 toml==0.10.2
 toolz==0.12.0
 tornado==6.3.3
 tqdm==4.66.1
 typing_extensions==4.8.0
 tzdata==2023.3
 tzlocal==5.2
 urllib3==2.0.7
 validators==0.22.0
 websocket-client==1.6.4
 yarl==1.9.2
 zipp==3.17.0

然后创建

app.py

首先是导入包:

import streamlit as st
 import asyncio
 from autogen import AssistantAgent, UserProxyAgent

streamlit用于创建UI。Asyncio对于异步控制流是必需的,它允许聊天响应。Autogen为聊天代理提供了类。

然后使用Streamlit的write函数设置应用的标题:

st.write("# AutoGen Chat Agents")

这一行将在UI的顶部显示标题“AutoGen Chat Agents”。

然后就是创建自定义代理类,需要扩展AutoGen的AssistantAgent和UserProxyAgent:

class TrackableAssistantAgent(AssistantAgent):
     def _process_received_message(self, message, sender, silent):
         with st.chat_message(sender.name):
             st.markdown(message)
         return super()._process_received_message(message, sender, silent)
 
 class TrackableUserProxyAgent(UserProxyAgent):
     def _process_received_message(self, message, sender, silent):
         with st.chat_message(sender.name):
             st.markdown(message)
         return super()._process_received_message(message, sender, silent)

这些类覆盖一个_process_received_message方法,在Streamlit聊天小部件中显示接收到的消息,为用户提供实时更新。

然后就是使用Streamlit的侧边栏功能进行配置:

selected_model = None
 selected_key = None
 
 with st.sidebar:
     st.header("OpenAI Configuration")
     selected_model = st.selectbox("Model", ['gpt-3.5-turbo', 'gpt-4'], index=1)
     selected_key = st.text_input("API Key", type="password")

这里可以使用我们上次文章的本地 LLM 方案,这样就不用使用openai的付费API了

然后就是创建主聊天界面并处理输入:

with st.container():
     # for message in st.session_state["messages"]:
     #    st.markdown(message)
 
     user_input = st.chat_input("Type something...")
     if user_input:
         if not selected_key or not selected_model:
             st.warning(
                 'You must provide valid OpenAI API key and choose preferred model', icon="⚠️")
             st.stop()
 
         llm_config = {
             "request_timeout": 600,
             "config_list": [
                 {
                     "model": selected_model,
                     "api_key": selected_key
                 }
             ]
         }

上面代码创建一个聊天输入字段,如果用户没有完成配置,将显示一个警告。

自定义我们的代理,并为异步聊天设置事件循环:

# create an AssistantAgent instance named "assistant"
 assistant = TrackableAssistantAgent(
 name="assistant", llm_config=llm_config)
 
 # create a UserProxyAgent instance named "user"
 user_proxy = TrackableUserProxyAgent(
 name="user", human_input_mode="NEVER", llm_config=llm_config)
 
 # Create an event loop
 loop = asyncio.new_event_loop()
 asyncio.set_event_loop(loop)

代理的配置需要根据我们的需求自行定义,我们这里只给一个演示。除此以外还要使用asyncio为应用程序处理异步操作做好准备。

最后定义并运行异步函数来启动聊天:

async def initiate_chat():
 await user_proxy.a_initiate_chat(
 assistant,
 message=user_input,
 )
 
 # Run the asynchronous function within the event loop
 loop.run_until_complete(initiate_chat())

当发送消息时,就可以在用户代理和助理代理之间发起聊天,结果如下:

总结

将AutoGen代理集成到Streamlit应用程序中,为创建由大型语言模型驱动的交互式智能ui提供了无数可能性。通过我们的以上代码可以建立一个响应式聊天界面,利用AutoGen的高级功能。AutoGen和Streamlit的结合为实现我们的需求提供了一个强大且对开发人员友好的途径。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • GPT
    GPT
    +关注

    关注

    0

    文章

    377

    浏览量

    17037
  • LLM
    LLM
    +关注

    关注

    1

    文章

    352

    浏览量

    1416
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    界面材料BLT测试与思考

    在5G、算力芯片,新能源、数字能源(光储、输变电)等高功率密度电子设备领域,能源技术的革新需求日益增长,控制半导体器件的结温在一定的低水平上稳定运行是保障设备性能与可靠性的关键,而导热界面材料
    的头像 发表于 04-20 17:03 526次阅读
    <b class='flag-5'>界面</b>材料BLT测试与思考

    如何在运行 Linux作系统的 i.MX 8M Plus EVK 板上创建用户友好的 GUI?

    我正在尝试创建一个用户友好的GUI to display some data. i have flashed the imx-image-full (所有
    发表于 04-08 06:33

    ESP32开发板创建同步WebServer网页服务器

    ESP32 内置了 Wi-Fi 功能,能够作为网页服务器(Web Server)向网络中的其他设备提供服务。通过在 ESP32 上运行网页服务器,可以创建基于浏览器的用户界面,用于监控传感器数据或控制设备状态,是实现物联网(Io
    的头像 发表于 01-30 11:36 510次阅读
    ESP32开发板<b class='flag-5'>创建</b>同步WebServer网页服务器

    小艺开放平台快速创建鸿蒙智能体

    与预览工具体验当前智能体的实际效果,来帮助我们进行智能体的问题定位和优化改进。 创建智能体时,开场对话可以让用户快速了解你的智能体功能或场景设定故事背景,预置问题可以让用户通过点击快速体验智能体的能力,角色指令(prompt)直
    发表于 01-19 11:00

    瑞萨电子携手LVGL PRO推进嵌入式图形用户界面开发

    随着嵌入式设备对用户体验要求的不断提升,图形用户界面(GUI)成为产品开发越来越重要的一环。作为目前最流行的开源嵌入式图形库之一的LVGL,最近就推出了自己的商业化专业UI编辑器LVGL PRO 1.0版本。
    的头像 发表于 11-21 10:23 2073次阅读
    瑞萨电子携手LVGL PRO推进嵌入式图形<b class='flag-5'>用户</b><b class='flag-5'>界面</b>开发

    AppTest邀请测试---创建测试群组(一)

    ”,进入“测试用户”页面,点击右上角“创建测试群组”。 在弹出的“创建测试群组”窗口,填写“群组名称”,点击“创建”。 群组名称不超过50个字符。 测试群组
    发表于 09-12 16:22

    基于LDC-HALL-HMI-EVM的人机界面评估模块技术解析

    Texas Instruments LDC-HALL-HMI-EVM评估模块 (EVM) 采用电感和霍尔效应传感技术提供人机界面。Texas Instruments LDC-HALL-HMI-EVM
    的头像 发表于 09-11 09:49 1153次阅读
    基于LDC-HALL-HMI-EVM的人机<b class='flag-5'>界面</b>评估模块技术解析

    分享---储能UI界面能量流动动画实现方法

    本文分享 工商业储能设备的UI界面中如何实现 能量流动的动画效果。 本例子效果 基于拓普微工业级 7寸屏电容串口屏(HMT070ETA-D型号)实现: 第1步:建立工程和页面 使用SGTools新建
    发表于 09-02 18:22

    瑞萨电子高级语音用户界面解决方案

    语音用户界面(VUI)正在彻底改变我们与技术交互的方式,实现免提、无缝的通信。通过整合先进语音命令识别功能,再加上语音反欺骗和说话人识别功能,开发人员可以构建具有更高安全性、个性化和功能的系统。将
    的头像 发表于 08-27 09:41 1046次阅读
    瑞萨电子高级语音<b class='flag-5'>用户</b><b class='flag-5'>界面</b>解决方案

    如何使用 SEGGER emWin AppWizard 工具为仪表板界面设计图形用户界面

    如何使用 SEGGER emWin AppWizard 工具为仪表板界面设计图形用户界面 (GUI)。它集成了控制 MA35H0 系列评估板上的 LED 和按钮的功能。
    发表于 08-19 07:23

    STM32CubeIDE1.16.1创建新的STM32工程之后没有自动弹出引脚配置界面,怎么解决?

    之前创建工程之后都会自动弹出配置引脚的界面,也会有一个.ioc文件,但是今天无论怎么尝试新建工程,都没有弹出引脚配置界面,求助
    发表于 07-29 14:23

    迅为RK3588开发板Android13系统挂载samba共享文件夹-怎么开启Windows共享目

    访问,但是访问基本不成功,所以需要指定用户与密码去进行访问,提升安全性。 1.创建共享用户 首先“此电脑”鼠标右键选择“管理”,如下图所示: 弹出如下界面,选择本地
    的头像 发表于 06-25 10:25 694次阅读
    迅为RK3588开发板Android13系统挂载samba共享文件夹-怎么开启Windows共享目

    multisim的基本界面与操作方法

    电子发烧友网站提供《multisim的基本界面与操作方法.pdf》资料免费下载
    发表于 06-24 16:53 0次下载

    横河DLM3024混合信号示波器优点和特点 触屏式用户界面

    横河DLM3024混合信号示波器触屏式用户界面能为用户提供直观的操作。可以通过熟悉的点选、拖动,外扩/里捏操作来快速设置测量、光标、缩放框、波形显示区域等项目,传统按钮和按键的使用也很方便,因此
    的头像 发表于 06-13 18:17 868次阅读
    横河DLM3024混合信号示波器优点和特点 触屏式<b class='flag-5'>用户</b><b class='flag-5'>界面</b>能

    瑞芯微RK3506(3核A7@1.5GHz+双网口+双CAN-FD)工业开发板—图形用户界面(GUI)开发手册

    本文主要说明Qt的图形用户界面(GUI)开发流程,包括Qt程序自启动配置与案例介绍,旨在帮助开发者完成产品开发与测试。
    的头像 发表于 06-03 14:27 1900次阅读
    瑞芯微RK3506(3核A7@1.5GHz+双网口+双CAN-FD)工业开发板—图形<b class='flag-5'>用户</b><b class='flag-5'>界面</b>(GUI)开发手册