加载中...

Ollama 本地开源大模型聊天应用

Ollama 本地开源大模型聊天应用

如果您也和我一样准备春招,只为TOP20大厂,欢迎加我微信shunwuyu,一起交流面经,一起屡败屡战。

前言

如果您想在localhost部署并运行开源大模型,可以试试Ollama。本文我们将使用Ollama部署,并通过API的方式调用大模型。

安装

Ollama提供了python和js两种开发包,对前端开发者挺友好的,用它!

复制代码
pip install ollama npm install ollama

应用场景

  • 聊天接口

  • 多模态

模型

我们可以通过 library (ollama.com) 查看Ollama支持的模型清单,有gemmallama2mistralmixtral等,非常的丰富。

比如我们要使用的开源模型是llama2, 我们可以使用如下代码下载(首次)并运行模型

bash
复制代码
# 拉取模型 ollama pull llama2 # 运行模型 ollama run llama2

接口

如果我们使用过openai的一些接口, 那么就了解文本补全、聊天、嵌入等。ollama提供了REST API来提供了请求接口。

  • 生成式接口
python
复制代码
curl http://localhost:11434/api/generate -d ''{ "model": "llama2", "prompt":"Why is the sky blue?" }''
  • 聊天接口
python
复制代码
curl http://localhost:11434/api/chat -d ''{ "model": "mistral", "messages": [ { "role": "user", "content": "why is the sky blue?" } ] }''
  • 嵌入
python
复制代码
curl http://localhost:11434/api/embeddings -d ''{ "model": "all-minilm", "prompt": "Here is an article about llamas..." }''

实战

我们将结合StreamlitOllama,开发一个聊天应用。

Streamlit是一款Web开发框架,适用于python快速完成一些大模型、数学科学计算的UI开发。

我们还会用到 Build a ChatGPT-like App | Streamlit 代码快速构建类chatgpt应用。

python
复制代码
# 引入streamlit UI库 import streamlit as st # 引入 ollama import ollama # 获取ollama的模型列表 model_list = ollama.list() # 设置默认模型名字为 llama2:7b-chat if "model_name" not in st.session_state: st.session_state["model_name"] = "llama2:7b-chat" # 初始化聊天信息数组 if "messages" not in st.session_state: st.session_state.messages = [] # 设置边栏 with st.sidebar: # 侧边栏的标题 st.subheader("Settings") # 下拉框 选择模型, 默认选中llama2 option = st.selectbox( ''Select a model'', [model[''name''] for model in model_list[''models'']]) st.write(''You selected:'', option) st.session_state["model_name"] = option # 页面标题 与llama聊天 st.title(f"Chat with {st.session_state[''model_name'']}") # 遍历聊天数组 for message in st.session_state.messages: # 根据角色 with st.chat_message(message["role"]): # 输出内容 st.markdown(message["content"]) if prompt := st.chat_input("What is up?"): st.session_state.messages.append({"role": "user", "content": prompt}) with st.chat_message("user"): st.markdown(prompt) with st.chat_message("assistant"): # 大模型返回后就清空输入框 message_placeholder = st.empty() full_response = "" for chunk in ollama.chat( model=st.session_state["model_name"], messages=[ {"role": m["role"], "content": m["content"]} for m in st.session_state.messages ], # 逐渐打出 stream=True, ): if ''message'' in chunk and ''content'' in chunk[''message'']: full_response += (chunk[''message''][''content''] or "") message_placeholder.markdown(full_response + "▌") message_placeholder.markdown(full_response) st.session_state.messages.append({"role": "assistant", "content": full_response})

New Image

  • 拉取模型

ollama pull

New Image

除了llama2, 我们再拉取下orca-mini

  • 列出当前所有模型

ollama list

New Image

  • 运行streamlit

streamlit run app.py

New Image

总结

  • Ollama在本地部署开源大模型,真心方便且靠谱。 我在红米老爷机上运行了, 可以。
  • 结合streamlit 快速将Web搭建了出来。

参考资料