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

    浏览量

    16713
  • LLM
    LLM
    +关注

    关注

    1

    文章

    340

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

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

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

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

    进行维护操作期间。传统的 HMI 交互方式往往需要人员亲临现场,极为不便。针对此类场景,西门子在所有 1500 系列 PLC 中集成了 Web 服务器,支持远程交互。通过“View Of Things”(物联视图)功能,用户可直接在 PLC 内部创建 HMI 可视化
    的头像 发表于 05-06 10:00 3673次阅读
    在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 999次阅读
    如何快速<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 797次阅读
    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 1980次阅读
    eIQ Time Series Studio工具使用攻略(三)-工程<b class='flag-5'>创建</b>

    OpenAI攻克Sora视频创建错误率高难题

    在人工智能与多媒体技术的交叉领域,OpenAI近期宣布了一项重要进展:成功解决了Sora视频创建过程中错误率高的问题。这一突破不仅标志着OpenAI在视频处理技术上取得了显著进步,也为广大用户带来
    的头像 发表于 12-31 10:37 842次阅读

    禁止使用root用户通过ssh远程登录Linux

    1、背景描述 出于安全考虑,需要禁止使用root用户通过ssh远程登录Linux 禁用root用户远程登录后,需要提供一个权限用户用于ssh远程登录 2、创建拥有sudo权限的
    的头像 发表于 12-21 16:25 2517次阅读
    禁止使用root<b class='flag-5'>用户</b>通过ssh远程登录Linux

    Linux中的用户创建

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

    SOLIDWORKS 2025直观的用户界面

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