LangChain 🤝 Streamlit

LangChain 🤝 Streamlit

Streamlit 与 LangChain 的初步集成以及我们未来的计划。

2 分钟阅读

编者按:这篇文章是与 Streamlit 团队合作撰写的。从一开始,Streamlit 就一直是 LangChain 开发者的绝佳工具。事实上,我们发布的第一个示例之一就使用了 Streamlit 作为 UI。我们很荣幸有机会在过去几个月与该团队更紧密地合作,并且我们很高兴分享我们一直在做和思考的一些事情。

今天,我们很高兴宣布 Streamlit 与 LangChain 的初步集成,并分享我们未来集成的计划和想法。

LangChain 和 Streamlit 团队之前曾使用过探索过彼此的库,并发现它们可以非常好地协同工作。

  • Streamlit 是一种更快构建和共享数据应用程序的方式。它可以将数据脚本在几分钟内转化为可共享的 Web 应用程序,所有操作都在纯 Python 中完成。
  • LangChain 帮助开发者构建强大的应用程序,将 LLM 与其他计算或知识来源结合起来。

这两个库都具有强大的开源社区精神,以及“开箱即用”的方法,可以快速交付可工作的应用程序并快速迭代。


渲染 LLM 的想法和行动

我们的首要目标是创建一种更简单的方法来渲染和检查 LLM 代理的想法和行动。我们想展示代理最终响应之前发生的事情。这对于最终应用程序(通知用户有关流程)和开发阶段(排除任何问题)都很有用。

Streamlit Callback Handler 正是这样做的。将回调处理程序传递给在 Streamlit 中运行的代理会在紧凑的展开器格式中显示其想法和工具输入/输出。

通过这个 MRKL 示例试用一下,这是一个流行的 Streamlit 应用程序

我们在这里看到了什么?

  • 为代理的每个想法和工具调用渲染一个展开器
  • 工具名称、输入和状态(运行中或完成)显示在展开器标题中
  • LLM 输出以 token 为单位流式传输到展开器中,为用户提供持续的反馈
  • 完成后,工具返回值也写入展开器内部

我们仅用一行额外的代码就将其添加到我们的应用程序中

# initialize the callback handler with a container to write to

st_callback = StreamlitCallbackHandler(st.container())

# pass it to the agent in the call to run()

answer = agent.run(user_input, callbacks=[st_callback])

有关如何开始使用的完整演练,请参阅我们的文档

高级用法

您可以使用此处提供的高级选项配置回调处理程序的行为

  • 选择在首次加载和完成时展开或折叠每个步骤
  • 确定在开始折叠成“历史记录”步骤之前将渲染多少个步骤
  • 根据工具名称和输入为展开器定义自定义标签

回调处理程序还可以与新的 Streamlit Chat UI 无缝协作,正如您在这个“与搜索聊天”应用程序中看到的那样(需要 OpenAI API 密钥才能运行)

🤝
从我们的 共享仓库查看更多示例应用程序和一键式 GitHub Codespaces 设置,开始 hacking。

我们接下来会做什么?

我们有一些正在进行的改进

  • 扩展 StreamlitCallbackHandler 以支持其他链类型,如 VectorStore、SQLChain 和简单流式传输(并改进默认 UI/UX 和自定义的简易性)。
  • 使其更易于将 LangChain 原语(如 Memory 和 Messages)与 Streamlit 聊天和 session_state 一起使用。
  • langchain-ai/streamlit-agent 添加更多应用程序示例和模板。

我们还在探索一些更深入的集成,用于将数据连接到您的应用程序并可视化链/代理状态,以改善开发者体验。我们很高兴与您合作,并看看您如何使用这些功能!

如果您有想法、示例应用程序或想贡献,请在 LangChain 或 Streamlit Discord 服务器上联系我们:LangChainStreamlit Discord 服务器。

编码愉快!🎈🦜🔗