跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
PythonAI大前端

基于 Streamlit 构建 AutoGen AI Agent Web 应用

综述由AI生成如何使用 Streamlit 框架快速构建基于 AutoGen 的 AI Agent Web 应用。内容涵盖环境搭建、侧边栏配置、主聊天界面实现、自定义 Agent 类以支持消息渲染以及异步会话处理。通过重写 Agent 的消息处理方法,实现了对话内容在浏览器端的实时展示,解决了原生 Agent 无法直接对接 Web UI 的问题,为开发者提供了一种可视化的 Agent 工作流方案。同时补充了关于 Streamlit 状态管理和优化的建议,确保应用在多次交互中保持上下文一致性。

灰度发布发布于 2025/2/6更新于 2026/4/265 浏览
基于 Streamlit 构建 AutoGen AI Agent Web 应用

基于 Streamlit 构建 AutoGen AI Agent Web 应用

Streamlit 是一款专为 Python 设计的 Web 开发框架,特别适用于快速构建数据科学、机器学习及大模型应用的交互界面。本文将介绍如何将 AutoGen 的 Agent 交互能力集成到 Streamlit 中,实现在浏览器端展示 AI Agent 的对话与反馈。

环境准备

确保本地已安装 Python 环境。通过 pip 安装必要的依赖:

pip install streamlit autogen openai

项目结构

创建项目目录 autogen-streamlit,并在其中添加入口文件 app.py。

侧边栏配置

在 Streamlit 中,侧边栏常用于放置全局配置。我们需要在此处设置 OpenAI 的 API Key 和模型选择。

import streamlit as st

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=0)
    selected_key = st.text_input("API Key", type="password")

这里定义了 selected_model 和 selected_key 变量。st.selectbox 提供下拉菜单,st.text_input 用于输入密码形式的密钥。

主聊天界面

主区域需要模拟类似 ChatGPT 的聊天窗口。Streamlit 提供了 st.chat_input 来接收用户输入。

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()
        
        llm_config = {
            "request_timeout": 600,
            "config_list": [
                {
                    "model": selected_model,
                    "api_key": selected_key
                }
            ]
        }

当用户提交输入后,首先校验配置是否完整。若有效,则构建 llm_config 供 AutoGen 使用。

自定义 Agent 类

AutoGen 原生 Agent 不会自动将消息渲染到 Streamlit 界面上。我们需要继承 AssistantAgent 和 UserProxyAgent,重写 _process_received_message 方法,以便将消息以 Markdown 格式显示在聊天流中。

from autogen import 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)

这两个类在调用基类逻辑前,先利用 st.chat_message 上下文管理器将消息渲染到页面。

实例化与异步执行

Streamlit 脚本每次交互都会重新运行,因此需要小心管理状态。对于 AutoGen 的异步会话,我们需要在 Streamlit 的事件循环中处理。

import asyncio

assistant = TrackableAssistantAgent(
    name="assistant", 
    llm_config=llm_config
)

user_proxy = TrackableUserProxyAgent(
    name="user", 
    human_input_mode="NEVER", 
    llm_config=llm_config
)

loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)

async def initiate_chat():
    await user_proxy.a_initiate_chat(
        assistant,
        message=user_input,
    )

loop.run_until_complete(initiate_chat())

注意:在实际生产环境中,直接操作事件循环可能不是最佳实践,建议结合 Streamlit 的 Session State 机制来管理 Agent 状态,避免重复初始化。

状态管理与优化

由于 Streamlit 的特性,每次用户交互(如点击按钮或输入文本)都会导致整个脚本重新运行。这意味着如果不在代码中保存状态,之前的对话历史将会丢失。为了解决这个问题,可以使用 st.session_state 来持久化对话记录。

if "messages" not in st.session_state:
    st.session_state.messages = []

for message in st.session_state.messages:
    with st.chat_message(message["role"]):
        st.markdown(message["content"])

if prompt := st.chat_input("Ask me anything..."):
    st.session_state.messages.append({"role": "user", "content": prompt})
    # 此处调用 Agent 逻辑并更新 session_state

此外,考虑到 LLM 响应可能较慢,建议在 UI 中添加加载指示器,提升用户体验。

运行与测试

保存代码后,在终端运行以下命令启动应用:

streamlit run app.py

浏览器打开指定地址后,即可在侧边栏配置 API,在主界面输入问题。例如询问'生成一个包含 12 个数字的斐波那契数列并计算总和',Agent 将自动生成代码并执行结果。

总结

通过 Streamlit,我们快速搭建了 AutoGen AI 助理的 Web 应用。这种组合让 AutoGen 的 Chat Workflow 更加可视化,便于调试和演示。自定义 Agent 类解决了消息渲染问题,而异步处理确保了长任务不会阻塞界面。未来可进一步结合 Streamlit 的 Session State 实现多轮对话记忆功能,构建更复杂的智能体工作流。

目录

  1. 基于 Streamlit 构建 AutoGen AI Agent Web 应用
  2. 环境准备
  3. 项目结构
  4. 侧边栏配置
  5. 主聊天界面
  6. 自定义 Agent 类
  7. 实例化与异步执行
  8. 状态管理与优化
  9. 运行与测试
  10. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • 💰 8折买阿里云服务器限时8折购买
  • 🦞 5分钟部署阿里云小龙虾了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • RESTful API 接口设计规范
  • 从 Webhook 到 OpenClaw:钉钉周报提醒机器人进化史
  • Python try-except-else 异常处理详解
  • Python 办公自动化实战:批量处理 Excel/Word/PPT
  • AI 产品经理转型指南:核心能力与行业认知
  • 在 Windows 上安装和编译 llama.cpp
  • Acconeer A121 60GHz 毫米波雷达传感器开发说明
  • C++ 哈希表使用与底层实现原理
  • OpenClaw Mac 安装指南
  • Linux 信号机制:信号的产生、类型与捕获
  • C# 技术栈下 WebAPI 数据协议实战:RESTful 与 GraphQL 对比
  • Stack-Chan 机器人开发指南
  • Webnovel Writer:基于 Claude Code 的长篇网文 AI 创作系统
  • PX4 开源飞控系统概述及入门指南
  • 2026 年前端发展趋势:AI 原生与全栈化演进
  • AI 重复率检测方法:4 步掌握 AIGC 内容识别与优化
  • Qwen3.5 小尺寸模型开源:昇腾适配完成及部署指南
  • C++ 继承:语法、访问权限与虚继承详解
  • Java BigDecimal 解决浮点精度问题
  • C++ 日志系统:高效异步日志实现解析

相关免费在线工具

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online