Skip to main content

Streamlit(流式应用)

Streamlit 是一种更快的构建和共享数据应用的方式。 Streamlit 可以在几分钟内将数据脚本转换为可共享的 Web 应用程序。全部使用纯 Python 编写,无需前端经验。 在 streamlit.io/generative-ai 上查看更多示例。

在 GitHub Codespaces 中打开

在本指南中,我们将演示如何使用 StreamlitCallbackHandler 在交互式 Streamlit 应用程序中显示代理的思考和行动。 使用以下正在运行的应用程序和 MRKL 代理 进行尝试:

安装和设置

pip install langchain streamlit

您可以运行 streamlit hello 来加载一个示例应用程序并验证安装是否成功。在 Streamlit 的 入门文档中查看完整的说明。

显示思考和行动

要创建一个 StreamlitCallbackHandler,您只需要提供一个父容器来渲染输出。

from langchain.callbacks import StreamlitCallbackHandler
import streamlit as st

st_callback = StreamlitCallbackHandler(st.container())

可以使用其他关键字参数来自定义显示行为,具体请参阅 API 参考文档

场景 1:使用带有工具的代理

目前主要支持的用例是使用工具(或代理执行器)可视化代理的行动。您可以在 Streamlit 应用程序中创建一个代理,并将 StreamlitCallbackHandler 简单地传递给 agent.run(),以便在应用程序中实时可视化思考和行动。

from langchain.llms import OpenAI
from langchain.agents import AgentType, initialize_agent, load_tools
from langchain.callbacks import StreamlitCallbackHandler
import streamlit as st

llm = OpenAI(temperature=0, streaming=True)
tools = load_tools(["ddg-search"])
agent = initialize_agent(
tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, 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.run(prompt, callbacks=[st_callback])
st.write(response)

注意: 为了使上述应用程序代码成功运行,您需要设置 OPENAI_API_KEY。 最简单的方法是通过 Streamlit secrets.toml 或任何其他本地环境管理工具来完成。

其他场景

目前,StreamlitCallbackHandler 主要用于与 LangChain 代理执行器一起使用。未来将添加对其他代理类型、与 Chains 直接使用等的支持。

您还可以尝试使用 StreamlitChatMessageHistory 来与 LangChain 进行交互。