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

    文章

    363

    浏览量

    15546
  • LLM
    LLM
    +关注

    关注

    0

    文章

    302

    浏览量

    441
收藏 人收藏

    评论

    相关推荐

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

    概述自HPM_SDKv1.7.0发布开始,在HPM_ENV中新增了user_template文件夹,以方便用户快速创建自定义的Board和App工程。user_template是用户模板工程,
    的头像 发表于 02-08 13:38 86次阅读
    如何快速<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 88次阅读
    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 1087次阅读
    eIQ Time Series Studio工具使用攻略(三)-工程<b class='flag-5'>创建</b>

    Linux中的用户创建

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

    SOLIDWORKS 2025直观的用户界面

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

    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>

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

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

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

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

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

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

    如何使用MATLAB创建预测模型

    MATLAB 简介 MATLAB 是由 MathWorks 公司开发的,它提供了一个集成的计算环境,包括一个命令行界面、一个图形用户界面、一个编程语言和一个调试器。MATLAB 的主要优势在于其矩阵运算能力,这使得它在处理大规
    的头像 发表于 07-11 14:29 784次阅读

    人机界面应具备的特性是什么

    人机界面(Human-Machine Interface,简称HMI)是人与机器之间进行信息交流和控制的媒介。一个优秀的人机界面能够提高工作效率、降低操作难度、增强用户体验。本文将从多个方面探讨人机
    的头像 发表于 07-01 14:24 976次阅读

    上位机软件的用户界面设计技巧

    在工业自动化、监控和控制系统等领域,上位机软件扮演着至关重要的角色。作为用户与系统交互的桥梁,上位机软件的用户界面(UI)设计不仅影响着用户的使用体验,还直接关系到系统的整体效率和可靠
    的头像 发表于 06-28 16:37 1664次阅读

    上位机控制界面用什么做好

    在设计上位机控制界面时,选择合适的开发工具和框架至关重要。本文介绍如何创建一个优秀的上位机控制界面。 引言 上位机控制界面是实现人机交互的关键环节,它允许
    的头像 发表于 06-06 10:54 1122次阅读

    OpenAI发布ChatGPT桌面版,优化用户界面,免费提供GPT-4o模型

    此外,ChatGPT 集成了优化后的用户界面,支持用户在同一界面下同时运行 ChatGPT 及其它程序,并可通过语音或文字方式向其提问。
    的头像 发表于 05-14 11:12 687次阅读