根据上下文,“# 介绍”可能是最简洁和合适的选择。
大型语言模型(LLMs)已经彻底改变了AI领域的面貌,这些模型具备出色的语言理解和生成能力。
Meta刚刚发布了Llama 3.1,这是他们迄今为止最强大的LLM模型:https://ai.meta.com/blog/meta-llama-3-1/
本文将帮助你构建一个使用本地大语言模型的Streamlit聊天应用,具体来说,我们使用Meta公司开发的Llama 3.1 8b模型,通过Ollama库进行集成。
前提在开始写代码之前,请确保你已安装了以下项目:
- Python;
- Streamlit;
- Ollama;
首先,你需要安装Ollama并下载Llama 3.1 8b模型,然后在命令行中运行以下命令:
# 安装 Ollama
pip install ollama
# 下载 Llama 3.1 8b 模型
ollama run llama3.1: 8b
创建一个模型文件
要创建一个可以无缝地集成到你 Streamlit 应用中的自定义模型(Custom Model),请按照以下步骤来操作:
- 在你的项目目录下,创建一个名为
Modelfile
的文件(不要添加任何扩展名)。 - 使用文本编辑器打开
Modelfile
,并在其中添加以下内容:
model: 🦙 3.1: 8b
此文件让Ollama用Llama 3.1 8b模型。
这段代码
导入库文件和配置日志 import streamlit as st
from llama_index.core.llms import ChatMessage
import logging
import time
from llama_index.llms.ollama import Ollama
logging.basicConfig(level=logging.INFO)
streamlit as st
: 这里导入了 Streamlit,一个用于创建交互式网络应用的库。ChatMessage
和Ollama
: 这用于处理聊天消息并从llama_index
库中与 Llama 模型进行交互。logging
: 这用于记录信息、警告和错误,有助于调试和跟踪应用行为。time
: 这个库用来测量生成响应所花的时间。
if 'messages' not in st.session_state:
st.session_state.messages = []
如果 'messages' 不在 st.session_state 中,那么将 st.session_state.messages 设为空列表。
st.session_state
:这是 Streamlit 的一个功能,允许你在应用的不同运行中存储变量。在这里,它被用来存储聊天历史记录。if
语句检查session_state
中是否已经有 'messages' 这个键。如果没有,它将初始化为一个空列表,作为消息的历史记录。
def 流式聊天(model, messages):
try:
llm = Ollama(model=model, 请求超时=120.0)
resp = llm.stream_chat(messages)
response = ""
response_placeholder = st.empty()
for r in resp:
response += r.delta
response_placeholder.write(response)
logging.info(f"模型: {model}, 消息列表: {messages}, 响应: {response}")
return response
except Exception as e:
logging.error(f"流式处理中的错误: {str(e)}")
raise e
stream_chat
: 此函数处理与Llama模型的流式聊天。Ollama(model=model, request_timeout=120.0)
: 初始化Llama模型时使用指定的超时时间。llm.stream_chat(messages)
: 流式传输聊天响应。response_placeholder = st.empty()
: 在Streamlit应用中创建一个占位符来动态更新响应。for
循环将响应的每一部分添加到最终响应字符串,并更新占位符。logging.info
记录模型、消息和响应信息。except
块捕获并在流式传输过程中发生的任何错误。
def main():
st.title("与大型语言模型聊天")
logging.info("应用已启动")
model = st.sidebar.selectbox("选择一个模型", ["mymodel", "llama3.1 8b", "phi3", "mistral"])
logging.info(f"选择的模型: {model}")
if prompt := st.chat_input("您的问题"):
st.session_state.messages.append({"role": "user", "content": prompt})
logging.info(f"用户输入: {prompt}")
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.write(message["content"])
if st.session_state.messages[-1]["role"] != "assistant":
with st.chat_message("assistant"):
start_time = time.time()
logging.info("生成回答")
with st.spinner("正在撰写..."):
try:
messages = [ChatMessage(role=msg["role"], content=msg["content"]) for msg in st.session_state.messages]
response_message = stream_chat(model, messages)
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} 秒")
logging.info(f"回答: {response_message}, 耗时: {duration:.2f} 秒")
except Exception as e:
st.session_state.messages.append({"role": "assistant", "content": str(e)})
st.error("在生成回答时发生了错误。")
logging.error(f"错误: {str(e)}")
if __name__ == "__main__":
main()
main
: 这是设置和运行Streamlit应用的主要函数。st.title("与大模型聊天")
: 设置应用的标题。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({"角色": "助手", "内容": response_message_with_duration})
: 将助手的回答添加到聊天历史中。st.write(f"耗时: {duration:.2f}秒")
: 显示生成回答的时间。except
块处理生成回答过程中的错误并显示错误信息。
要运行你的 Streamlit 应用,请在你的项目目录中执行以下命令即可,
streamlit run app.py # 这条命令用于运行 Streamlit 应用程序
请确保你的 Ollama 实例在后台运行,以便能看到任何活动或得到任何结果。
“Llama 3.1 8b 在 Streamlit 应用中生成了对‘什么是大规模语言模型?’这个问题的详细回答时。”
“对话的继续,展示Llama 3.1 8b关于大型语言模型的最后回复部分。”
要使用 Ollama 训练模型这些相同的步骤可以在不同数据集上使用Ollama训练模型。下面介绍如何使用Ollama来管理和训练模型的步骤。
在Streamlit应用程序中展示Llama 3.1 8b的交互式聊天界面,实现实时生成响应。
Ollama 命令行要使用Ollama这款工具管理模型和训练模型,你需要熟悉以下命令:
一个例子:创建并使用模型- 创建一个Modelfile文件:在你的项目目录中创建一个
Modelfile
,包含你自定义模型的说明和指令。 - Modelfile文件的内容:
# 自定义模型创建的示例配置
名称: 自定义模型
基础模型: llama3.1
数据路径: /path/to/your/dataset
训练周期: 10
3. 生成模型:使用 create
命令根据 Modelfile
生成模型。
运行以下命令:ollama create -f 文件 (模型文件)
4.运行这个模型:创建好模型后,你可以通过以下方式运行它:
ollama run 自定义模型
与Streamlit集成 或其他类似工具:你可以像之前集成预训练模型那样,将这个自定义模型集成到你的Streamlit应用中。
您可以按照这些步骤使用Ollama库创建一个与本地LLM交互的Streamlit应用程序。
C:\your\path\location>ollama
命令用法:
ollama [标志]
ollama [命令]
可用命令:
serve 启动 ollama
create 从 Modelfile 创建模型
show 显示模型信息
run 运行模型
pull 从仓库中拉取模型
push 将模型推送到仓库
list 列出所有模型
ps 列出运行中的模型
cp 复制模型
rm 删除模型
help 任何命令的帮助信息
标志:
-h, --help 显示帮助信息
-v, --version 显示版本信息
使用“ollama [命令] --help”获取更多关于命令的信息。
此外,你可以按照相同的方法,使用Ollama命令在不同的数据集上训练和调整模型。这种方法的灵活性使你能够在一个Streamlit应用程序中使用自定义训练的模型,提供更个性化和互动的用户体验。
为Flask实现这种方法也可以用来开发基于Flask的聊天应用。以下是如何将Ollama集成到Flask应用中的一个简要说明:
Flask应用设置指南- 安装 Flask:
pip install Flask
在终端中输入以下命令:
2. 创建一个 Flask 应用程序:
from flask import Flask, request, jsonify
from llama_index.core.llms import ChatMessage
from llama_index.llms.ollama import Ollama
import logging
app = Flask(__name__)
logging.basicConfig(level=logging.INFO)
@app.route('/chat', methods=['POST'])
def chat():
data = request.json
messages = data.get('messages', [])
model = data.get('model', 'llama3.1 8b')
try:
llm = Ollama(model=model, request_timeout=120.0)
resp = llm.stream_chat(messages)
response = ""
for r in resp:
response += r.delta
logging.info(f"模型: {model}, 消息: {messages}, 回复: {response}")
return jsonify({'response': response})
except Exception as e:
logging.error(f"流处理错误: {str(e)}")
return jsonify({'error': str(e)}), 500
if __name__ == '__main__':
app.run(debug=True)
运行 Flask 应用
将代码保存到一个文件中,比如 app.py
,并运行下面的命令:
运行Python脚本:
python app.py
这将启动Flask应用程序,你可以向 /chat
端点发送包含消息和模型信息的POST请求,从而获取Llama模型的响应。
通过类似展示给Streamlit的步骤,你可以像集成Streamlit那样,将Ollama集成到一个Flask应用中。stream_chat
函数可以重用,用于处理聊天流,而Flask路由可以处理与模型的交互,使得轻松构建可扩展的聊天应用。
按照本指南,您已成功设置了使用本地LLM的Streamlit聊天应用。这使您可以直接在本地机器上与强大的语言模型互动,提供了一个既美观又互动的体验。无论是一般查询还是深入探讨特定问题,您的应用现在可以应对各种问题了。
“感谢你和我们一起探索大型语言模型的魅力。拜拜!”
Git 仓库地址如下 : 点击这里!!
与你的应用程序互动,并探索LLMs的功能,记得分享你的体验和所做的任何改进。祝你编码开心!
希望这篇文章对你有帮助且信息量大
👋😀
参考文献: Ollama 利用大型语言模型快速开始玩转ollama.com [meta-llama/Meta-Llama-3.1-8B-Instruct · Hugging Face我们希望通过开源和开放科学,让更多人了解并使用人工智能。](https://huggingface.co/meta-llama/Meta-Llama-3.1-8B-Instruct?source=post_page-----749931de216a--------------------------------)
现在,介绍Llama 3.1:迄今为止最强大的模型我们最新的模型延长了上下文长度,支持八种语言,并…ai.meta.com llama3.1:8bLlama 3.1 是 Meta 最新推出的顶尖模型,提供 8B、70B 和 405B 参数。点击这里查看 Llama 3.1:8B共同学习,写下你的评论
评论加载中...
作者其他优质文章