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

    文章

    300

    浏览量

    14867
  • LLM
    LLM
    +关注

    关注

    0

    文章

    201

    浏览量

    233
收藏 人收藏

    评论

    相关推荐

    ISL94202EVKIT1Z GUI用户界面软件手册

    电子发烧友网站提供《ISL94202EVKIT1Z GUI用户界面软件手册.pdf》资料免费下载
    发表于 12-21 10:30 0次下载
    ISL94202EVKIT1Z GUI<b class='flag-5'>用户</b><b class='flag-5'>界面</b>软件手册

    怎么用eclipse创建web项目

    )。 第一步:打开Eclipse 首先,双击打开Eclipse IDE。一旦Eclipse打开,我们就可以开始创建Web项目。 第二步:创建新的动态Web项目 在Eclipse主界面上,选择“File
    的头像 发表于 12-06 13:40 876次阅读

    python窗口图形界面编程

    库,帮助开发者快速构建具有良好用户体验的窗口应用程序。 在Python的GUI编程领域,最常用的库是Tkinter。Tkinter是Python的标准GUI库,它基于Tk图形库,并提供了创建、布局和管理图形用户
    的头像 发表于 11-22 14:23 551次阅读

    python如何打开gui界面

    在Python中打开GUI界面,可以使用多种库或框架,如Tkinter、PyQt、wxPython等。下面将详细介绍如何使用Tkinter创建一个GUI界面。在写文章时,建议参考以下提纲,将文章分成
    的头像 发表于 11-22 14:12 452次阅读

    oracle创建用户并赋予权限

    Oracle是一种关系型数据库管理系统,用户在Oracle中起着重要的作用,它们用于管理和访问数据库中的数据。在Oracle中,我们可以通过创建用户并赋予相应的权限来对数据库进行管理和控制。本文
    的头像 发表于 11-17 14:28 893次阅读

    linux中创建group的命令

    在Linux中,创建用户组的命令是 groupadd 。 以下是一个例子: groupadd groupName 这个命令将创建一个新的用户组,名称为groupName。 在
    的头像 发表于 11-08 11:35 615次阅读

    基于LabVIEW的监测系统的用户界面设计与实现

    电子发烧友网站提供《基于LabVIEW的监测系统的用户界面设计与实现.pdf》资料免费下载
    发表于 10-30 11:42 2次下载
    基于LabVIEW的监测系统的<b class='flag-5'>用户</b><b class='flag-5'>界面</b>设计与实现

    Streamlit:一个开箱即用的工具集

    streamlit 来说,请你相信我,这是一个你可以无脑去学习的框架,我之所以这么说,是因为我相信终有一天,你一定能用得上它。 Streamlit 是一个用于机器学习、数据可视化的 Python 框架,它能几行代码就构建出一个精美的在线 app 应用。 它能做什么,取
    的头像 发表于 10-17 11:13 693次阅读
    <b class='flag-5'>Streamlit</b>:一个开箱即用的工具集

    如何创建一个更有效的电容式触摸人机界面

    触控的互动式人机界面(HMI)接口将更吸引人且更简便操作。通过这个技术,HMI设计者可以意识到,保持产品的一致性,以及整体的美观,将大幅提升使用者的观感。下面的文章将介绍如何创建一个更有效的电容式
    的头像 发表于 08-29 15:29 620次阅读

    OneCommand Manager命令行界面用户手册

    电子发烧友网站提供《OneCommand Manager命令行界面用户手册.pdf》资料免费下载
    发表于 08-22 11:09 0次下载
    OneCommand Manager命令行<b class='flag-5'>界面</b><b class='flag-5'>用户</b>手册

    工业液晶电子看板的界面设计要点

    工业液晶电子看板的界面设计应该注重易读性、简洁性、可视化、色彩搭配、布局和组织、响应式设计以及用户友好性。通过合理的设计,可以提高界面的可用性和用户体验,实现信息的有效传达和操作的便利
    的头像 发表于 07-25 10:06 474次阅读
    工业液晶电子看板的<b class='flag-5'>界面</b>设计要点

    Vyond推出首款基于提示的脚本和视频创建

    VyondGo 是一款新的脚本和视频创建应用程序,将集成到Vyond的人工智能视频创建平台中。借助易于使用、基于提示的界面用户可以根据几个简单的提示立即构建视频初稿,然后使用Vyon
    的头像 发表于 07-12 10:32 533次阅读

    人机界面是什么意思

    可用性 人机界面必须具有良好的可用性,即能够满足用户的需求,易于操作和理解。一个好的人机界面应该是直观、简单、易懂、易记、易于学习和使用。 2. 易学性 人机界面的设计应该注重易学性
    发表于 07-03 14:13 875次阅读

    OpenHarmony沉浸式界面开发代码教程

    沉浸式界面通常是指全屏显示,即当前画面占据整个屏幕。画面放大的同时,让用户摆脱无关信息的干扰,带给用户沉浸式的体验。
    的头像 发表于 06-06 09:26 1053次阅读
    OpenHarmony沉浸式<b class='flag-5'>界面</b>开发代码教程

    Linux中如何如何为现有用户创建主目录?

    在Linux系统中,每个用户都有一个主目录,通常称为home目录,用于存储用户的个人文件和配置信息。然而,有时候我们会创建一个新的用户,但是忘记或者没有选择为其
    的头像 发表于 05-12 16:24 2013次阅读
    Linux中如何如何为现有<b class='flag-5'>用户</b><b class='flag-5'>创建</b>主目录?