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

    文章

    368

    浏览量

    16346
  • LLM
    LLM
    +关注

    关注

    1

    文章

    329

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

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

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

    在PLC中创建基于Web的人机界面可视化

    进行维护操作期间。传统的 HMI 交互方式往往需要人员亲临现场,极为不便。针对此类场景,西门子在所有 1500 系列 PLC 中集成了 Web 服务器,支持远程交互。通过“View Of Things”(物联视图)功能,用户可直接在 PLC 内部创建 HMI 可视化
    的头像 发表于 05-06 10:00 ?2837次阅读
    在PLC中<b class='flag-5'>创建</b>基于Web的人机<b class='flag-5'>界面</b>可视化

    《AI Agent 应用与项目实战》阅读心得2——客服机器人、AutoGen框架 、生成式代理

    ,Airtable负责知识库管理,Voiceflow处理对话流程设计,再配合GPT模型进行自然语言理解和生成。前端功能设计中引入了用户意图识别模块,能够准确捕捉用户的查询意图并进行多维度分类,这种分类机制使得系统能够
    发表于 02-25 21:59

    如何快速创建用户自定义Board和App工程

    概述自HPM_SDKv1.7.0发布开始,在HPM_ENV中新增了user_template文件夹,以方便用户快速创建自定义的Board和App工程。user_template是用户模板工程,
    的头像 发表于 02-08 13:38 ?634次阅读
    如何快速<b class='flag-5'>创建</b><b class='flag-5'>用户</b>自定义Board和App工程

    hyper-v 备份,hyper-v怎样进行虚拟机的创建

    虚拟机技术打破了传统计算机的限制,为我们带来了全新的计算机模式。今天给大家介绍hyper-v怎样进行虚拟机的创建? ? ?hyper-v怎样进行虚拟机的创建? ? ?使用PowerSh
    的头像 发表于 02-05 14:54 ?515次阅读
    hyper-v 备份,hyper-v<b class='flag-5'>怎样</b>进行虚拟机的<b class='flag-5'>创建</b>

    eIQ Time Series Studio工具使用攻略(三)-工程创建

    用户打开TimeSeries Studio后,首先进入Home界面,如需创建用户工程,需要在主界面找到“Tasks”模块,然后选择需要
    的头像 发表于 01-09 16:12 ?1662次阅读
    eIQ Time Series Studio工具使用攻略(三)-工程<b class='flag-5'>创建</b>

    Linux中的用户创建

    Linux中的用户创建 用户的类型 超级管理用户: 权限最高的用户(uid:0) #uid:是用户
    的头像 发表于 12-20 14:24 ?849次阅读
    Linux中的<b class='flag-5'>用户</b>与<b class='flag-5'>创建</b>

    SOLIDWORKS 2025直观的用户界面

    在工程设计领域,SOLIDWORKS作为三维CAD软件的佼佼者,一直致力于通过技术创新提升用户体验。随着SOLIDWORKS 2025版本的发布,其在界面设计上的直观性与易用性再次成为行业关注的焦点
    的头像 发表于 12-12 17:22 ?766次阅读

    DRV8821-23 EVM图形用户界面

    电子发烧友网站提供《DRV8821-23 EVM图形用户界面.pdf》资料免费下载
    发表于 12-05 15:08 ?0次下载
    DRV8821-23 EVM图形<b class='flag-5'>用户</b><b class='flag-5'>界面</b>

    DRV8800-01 EVM图形用户界面

    电子发烧友网站提供《DRV8800-01 EVM图形用户界面.pdf》资料免费下载
    发表于 12-02 11:07 ?0次下载
    DRV8800-01 EVM图形<b class='flag-5'>用户</b><b class='flag-5'>界面</b>

    把YOLOv11和Python Qt做个用户界面程序

    早些时间,小编想把PID控制器优化部分通过Py Qt来实现用户界面化,不过看着窗口一堆参数,有点发怵:这玩意谁用啊? 参考《PID控制器参数自动优化示例和比较》 后来就搁置了。 在通过Python
    的头像 发表于 11-28 10:18 ?1747次阅读
    把YOLOv11和Python Qt做个<b class='flag-5'>用户</b><b class='flag-5'>界面</b>程序

    图形用户界面与命令行接口的比较

    在计算机科学和信息技术领域,用户与计算机交互的方式主要分为两种:图形用户界面(GUI)和命令行接口(CLI)。这两种界面各有优势和局限性,适用于不同的场景和
    的头像 发表于 11-12 14:38 ?1372次阅读

    Molex莫仕助力推动高级用户界面发展

    家电的未来将不再依赖按钮和仪表盘,而是朝向更加直观和互动的方向发展。受消费者期望的驱动,高级用户界面(UI)正致力于呈现智能手机和家庭助手的简单易用性。
    的头像 发表于 11-05 16:00 ?889次阅读

    加贺富仪艾电子CGI Studio助您创建嵌入式用户界面解决方案

    人机交互界面(HMI)作为人与技术之间的沟通界面,正不断拓展其在各行业的应用边界,成为数字时代不可或缺的一部分。从工业控制、汽车仪表盘到智能家居、医疗设备,HMI技术的应用市场呈现出多元化和深度渗透的特点。
    的头像 发表于 08-22 14:48 ?947次阅读