使用Ollama构建Llama 3.1 8b Streamlit聊天应用程序逐步指南
介绍
大型语言模型(LLMs)彻底改变了人工智能领域,提供了令人印象深刻的语言理解和生成能力。
本文将指导您构建一个使用本地LLM的Streamlit聊天应用程序,特别是来自Meta的Llama 3.1 8b模型,通过Ollama库进行集成。
前提条件
在我们深入代码之前,请确保您已安装以下内容:
- Python
- Streamlit
- Ollama
设置 Ollama 和下载 Llama 3.1 8b
首先,您需要安装 Ollama 并下载 Llama 3.1 8b 模型。打开命令行界面并执行以下命令:
1 | # Install Ollama |
创建 Modelfile
要创建一个与您的 Streamlit 应用无缝集成的自定义模型,请按照以下步骤操作:
- 在您的项目目录中,创建一个名为
Modelfile的文件,不带任何扩展名。 - 在文本编辑器中打开
Modelfile,并添加以下内容:
1 | model: llama3.1:8b |
此文件指示 Ollama 使用 Llama 3.1 8b 模型。
代码
导入库和设置日志记录
1 | import streamlit as st |
streamlit as st:这导入了 Streamlit,一个用于创建交互式网页应用的库。ChatMessage和Ollama:这些是从llama_index库中导入的,用于处理聊天消息和与 Llama 模型进行交互。logging:用于记录信息、警告和错误,有助于调试和跟踪应用程序的行为。time:这个库用于测量生成响应所需的时间。
初始化聊天记录
1 | if 'messages' not in st.session_state: |
st.session_state: 这是一个 Streamlit 特性,允许您在应用的不同运行之间存储变量。在这里,它用于存储聊天记录。if语句检查 ‘messages’ 是否已经在session_state中。如果没有,它将其初始化为空列表。
流式聊天响应的函数
1 | def stream_chat(model, messages): |
stream_chat: 此函数处理与 Llama 模型的交互。Ollama(model=model, request_timeout=120.0): 使用指定的超时初始化 Llama 模型。llm.stream_chat(messages): 从模型流式传输聊天响应。response_placeholder = st.empty(): 在 Streamlit 应用中创建一个占位符,以动态更新响应。for循环将响应的每一部分附加到最终响应字符串,并更新占位符。logging.info记录模型、消息和响应。except块捕获并记录在流式传输过程中发生的任何错误。
主要功能
1 | def main(): |
main: 这是设置和运行Streamlit应用的主要功能。st.title("与LLMs模型聊天"): 设置应用的标题。model = st.sidebar.selectbox("选择模型", ["mymodel", "llama3.1 8b", "phi3", "mistral"]): 在侧边栏创建一个下拉菜单以选择模型。if prompt := st.chat_input("你的问题"): 获取用户输入并将其添加到聊天记录中。for循环显示聊天记录中的每条消息。if语句检查最后一条消息是否不是来自助手。如果为真,则从模型生成响应。with st.spinner("正在写入..."): 在生成响应时显示一个加载指示器。messages = [ChatMessage(role=msg["role"], content=msg["content"]) for msg in st.session_state.messages]: 为Llama模型准备消息。response_message = stream_chat(model, messages): 调用stream_chat函数以获取模型的响应。duration = time.time() - start_time: 计算生成响应所需的时间。response_message_with_duration = f"{response_message}\n\n耗时: {duration:.2f} 秒": 将耗时附加到响应消息中。st.session_state.messages.append({"role": "assistant", "content": response_message_with_duration}): 将助手的响应添加到聊天记录中。st.write(f"耗时: {duration:.2f} 秒"): 显示生成响应的耗时。except块处理生成响应期间的错误并显示错误消息。
- 标题: 使用Ollama构建Llama 3.1 8b Streamlit聊天应用程序逐步指南
- 作者: Barry
- 创建于 : 2024-07-27 23:53:27
- 更新于 : 2024-08-31 06:59:45
- 链接: https://wx.role.fun/2024/07/27/40d6a2d894eb4334b796ec1240fef57c/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。