逐步掌握最佳Ai Agents框架-AutoGen 十 Web应用

news2024/11/19 6:32:59

AutoGen系列来到了第十篇,从入门AutoGen,到熟悉chat agent工作方式,再到深入把玩RAG文档AI助理应用。终于,我们要结合Streamlit来做智能Web应用了。

Streamlit

Streamlit是一款Web开发框架,适用于python快速完成一些大模型、数学科学计算的UI开发。

作为一位Web开发者,AutoGen系列的第十集来到Web应用开发,我们要做的就是将AutoGen的交互与反馈,在浏览器Web页面上呈现出来。

  • 最终效果

image.png

上图是项目的最终效果,它分为左右两栏。侧边栏为OpenAI的配置区域,表单的值,提供给AutoGen的config_list。 右边是类似chatgpt的聊天区域,我们在这里将message交给UserProxyAgent,之后由它与其它Agent的chat完成任务。

  • try Streamlit

首先,让我们跟着文档,将Streamlit玩起来。这里假设大家本地都安装好了python 环境。安装streamlit, 并使用streamlit 初始化hello 项目

python复制代码pip install streamlit
streamlit hello

image.png

上图是模板项目的效果。

  • 初始化项目

image.png  了解hello模板项目效果,心里有数。新建我们的的autogen-streamlit项目目录,并添加app.py入口文件。文件引入streamlit, 写入如图代码,执行命令streamlit run app.py,项目启动。
😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓

- 侧边栏
python复制代码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")

定义了selected_model、selected_key 两个变量,初始值为None。 with st.sidebar 设置侧边栏。st代表streamlit, st.sidebar 代表侧边栏,从语法看,streamlit只需要了解预设模块和语法,就可以快速完成开发。 st.header("OpenAI Configuration")侧边栏标题,selected_model = st.selectbox("Model", ['gpt-3.5-turbo', 'gpt-4'], index=1),添加下拉框,并交给selected_model,用户选择后,值可在selected_model里选择。    如果大家也跟我一样,目前还没有用上gpt-4, 可以将index设置为0…悲伤的故事。

  • 主栏
python复制代码with st.container():
    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()

类chatgpt的界面,主栏提供了一个聊天输入框,它会位于界面底部。当用户按下回车键时,流程会进入if user_input分支, 此时如果用户还未提供api_key或相应模型,会输出提示,st.stop,st的逻辑也会停掉。否则,即可进行config_list配置,selected_model、selected_key的值是config_list的一项配置

python复制代码llm_config = {
            "request_timeout": 600,
            "config_list": [
                {
                    "model": selected_model,
                    "api_key": selected_key
                }
            ]
        }
  • 初始化两个Agent
python复制代码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)

这里的AssistantAgent 比之前几篇要复杂。这里定义的TrackableAssistantAgentAssistantAgent为基类,对_process_received_message做了复盖。将接收到的消息,通过chat_message,将发送者的名字和消息,以markdown的格式显示在页面上,再调用基类的方法完成工作。   UserProxyAgent也一样。

python复制代码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)

有了这两个类后,我们实例化Agents, 这是AutoGen的常规操作。

python复制代码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)
  • asyncio   我们使用了asyncio, 异步的初始化了
python复制代码 # Create an event loop
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)

# Define an asynchronous function
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())

Asyncio.new_event_loop()创建一个新的事件循环,asyncio.set_event_loop(loop)将新创建的事件循环设置为当前线程的事件循环,loop.run_until_complete(initiate_chat())在完成initiate_chat任务前会阻塞该线程。initiate_chat使用user_proxy开启会话,这和之前的就一样了。

  • 运行结果

image.png

在命令行中,从上图可以看出,用户代理接收到用户在输入框提出的问题(Generate a fibonacci sequence with 12 numbers and work out the sum)后, 交给assistantAgent。 assistant 生成了代码, 并完成了计算。

image.png

页面上,也显示了效果。

总结

通过Streamlist,快速完成了AutoGen AI助理的Web应用搭建, 让AutoGen 的chat work flow 更形象。

如何学习大模型 AI ?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1791906.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

直播美颜工具解析:美颜SDK核心技术与性能优化方法

本篇文章,小编将深入解析直播美颜SDK的核心技术及其性能优化方法,以期为开发者提供有价值的参考。 一、美颜SDK核心技术 1.实时人脸检测与识别 美颜SDK的核心技术之一是实时人脸检测与识别。这项技术基于深度学习算法,能够快速、准确地识别…

实验9 静态路由配置

实验9 静态路由配置 一、 原理描述二、 实验目的三、 实验内容四、 实验配置五、 实验步骤 一、 原理描述 网络中的每个路由器都会维护一张路由表或转发表。路由表的表项记录着目的网络信息以及下一跳I 地址。路由表可以手动配置,也可以通过路由算法动态生成。静态…

kali配置静态ip

kali配置静态ip 因为一些环境需要,本地linux主机需要搭建一个桥接模式的网络,那么直接就在kali中配置了, 打开vim /etc/network/interfaces 这里就需要自己配置一下ip,网关,路由等内容 这里参考:参考链接 …

C++ STL初阶(2):string 的模拟实现

此文的背景是自己实现库中的string,由于string的模版实现较为困难,我们只实现最简单char版本。 1.命名空间分割 为了避免与库中的string冲突,我们使用一个自己的命名空间中来分离并实现所有内容,并且将所有的声明和定义相分离&…

Three.js-实现加载图片并旋转

1.实现效果 2. 实现步骤 2.1创建场景 const scene new THREE.Scene(); 2.2添加相机 说明: fov(视场角):视场角决定了相机的视野范围,即相机可以看到的角度范围。较大的视场角表示更广阔的视野,但可能…

P3. 创建个人中心页面

P3. 创建个人中心页面 0 概述Tips1 个人中心页面1.1 创建 Bot 表及 pojo, mapper1.2 实现 Bot 增删改查的 API1.3 实现个人中心页面前端 0 概述 主要介绍了一下添加一个表(类),及其CRUD的前端和后端的实现方式,介绍的是通用的方法。 后端的CRUD很好写&am…

【Java面试】十五、HashMap相关

文章目录 1、二叉树1.1 二叉搜索树1.2 红黑树 2、散列表2.1 哈希冲突2.2 哈希冲突 - 链表法 3、HashMap的实现原理4、HashMap源码4.1 属性部分4.2 构造函数部分 5、HashMap的put方法的流程6、HashMap的扩容机制7、HashMap的寻址算法8、为何HashMap底层的数组长度一定是2的次幂 …

导入地址表钩取技术解析

前置知识 导入表 在一个可执行文件需要用到其余DLL文件中的函数时,就需要用到导入表,用于记录需要引用的函数。例如我们编写的可执行文件需要用到CreateProcess函数,就需要用到kernel32.dll文件并且将其中的CreateProcess函数的信息导入到我…

数据库管理-第198期 升级Oracle ACE Pro,新赛季继续努力(20240605)

数据库管理198期 2024-06-05 数据库管理-第198期 升级ACE Pro,新赛季继续努力(20240605)1 惊喜2 变化3 Oracle ACE总结 数据库管理-第198期 升级ACE Pro,新赛季继续努力(20240605) 作者:胖头鱼的…

【PCB]射频电路pcb设计

学习改变命运,技能成就未来!❤~~ 1射频信号的基础知识及工作原理介绍 射频的基础知识介绍 2射频板PCB的布局要求 3射频板布局要求 4屏蔽帐设计 5射频板的层叠阻抗设计 6射频板的PCB布线原则 7射频板的PCB布线要求 8射频板的设计实战

kubeedge v1.17.0部署教程

文章目录 前言一、安装k8s平台二、部署kubeedge1.部署MetalLB(可选)2.cloud3.edge4. 部署nginx到edge端 总结参考 前言 本文主要介绍kubeedge v1.17.0的安装过程 主要环境如下表 应用版本centos7.0k8s1.28.2kubeedge1.17.0docker24.0.8centos7.0 一、安装k8s平台 本文主要参…

2024年6月1日 (周六) 叶子游戏新闻

Embracer探讨单机游戏大作涨价超过70美元的可能性在Embracer集团等待公布新公司名称的同时,他们对游戏大作的价格上涨做出了评论。几年来,游戏大作的价格已经达到了70美元的门槛。Embracer集团的CEO Lars Wingefors在采访中表示,电子游戏行业…

MySQL—多表查询—内连接

一、引言 (1)内连接查询语法 内连接查询的是两张表的交集部分的数据。(也就是绿色部分展示的数据) (2)内连接有两种形式: 1、隐式内连接 语法结构: 2、显示内连接 语法结构&#xf…

AIGC绘画设计——midjourney有哪些好用的关键词?

midjourney有哪些高级关键词? 这一期继续分享一些高级的关键词, 我有一些案例也是从其他博主那学习来的, 但为了尽可能不出错,每个案例都是自己尝试了很多次后才拿出来的。 挑选了几个效果比较好,使用场景较高的类型…

lux和ffmpeg进行下载各大主流自媒体平台视频

1、lux下载,链接:https://pan.baidu.com/s/1WjGbouL3KFTU6LeqZmACpA?pwdagpp 提取码:agpp 2、ffmpeg下载,跟lux放在同一个目录; 3、为lux、ffmpeg设置环境变量; 4、WINR,打开运行&#xff0…

手眼标定学习笔记

目录 标定代码: 手眼标定原理学习 什么是手眼标定 手眼标定的目的 eye in hand eye to hand AXXB问题的求解 标定代码: GitHub - pumpkin-ws/HandEyeCalib 推荐博文: https://zhuanlan.zhihu.com/p/486592374 手眼标定原理学习 参…

nexus搭建npm前端项目的私服

一、为什么要搭建私库 节省外网带宽加速maven构建部署第三方构件(特别是无法从公共仓库下载的构件)提高稳定性(内网部署,更少地依赖外网)降低中央仓库的负荷 构件,好比我们的藏书,去书店或商城…

【数据库】SQL--DDL(初阶)

文章目录 DDL1. 数据库操作1.1. 表操作1.1.1 创建1.1.2. 查询 2. 数据类型及案例2.1 数值类型2.2 字符串类型2.3 日期时间类型2.4 案例练习 3. 表操作--修改3.1 添加字段3.2 修改字段3.3 修改表名 4. 表操作-删除4.1 删除字段4.2 删除表 5. DDL小结 更多数据库MySQL系统内容就在…

如何在强数据一致性要求下设计数据库的高可用架构

在高可用的三大架构设计(基于数据层的高可用、基于业务层的高可用,以及融合的高可用架构设计)中。仅仅解决了业务连续性的问题:也就是当服务器因为各种原因,发生宕机,导致MySQL 数据库不可用之后,快速恢复业务。但对有状态的数据库服务来说,在一些核心业务系统中,比如…

svn的使用

【图文详解】入职必备——SVN使用教程-CSDN博客 使用SVNBucket作为服务端,来辅助学习. 什么时候会产生冲突呢? 原本A,B,服务器的版本都一致,都是最新版. A修改文件m,向服务器提交 B修改文件m,向服务器提交,这时候出现了冲突 双击冲突的文件,手动修改