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})
  • 拉取模型

ollama pull

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

  • 列出当前所有模型

ollama list

  • 运行streamlit

streamlit run app.py

总结

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

参考资料

相关推荐
plainGeekDev3 小时前
在 Obsidian 里用 AI 管理 100 多篇笔记后,它开始自己长了
aigc
CodexDave3 小时前
Python 自动化接单实战(一):把 CSV 需求做成配置驱动解析器
java·python·自动化·json·数据清洗·python自动化·csv处理
m沐沐3 小时前
【深度学习】循环神经网络RNN——结构、原理与长期依赖问题解析
人工智能·pytorch·python·rnn·深度学习·算法·机器学习
风吹心凉4 小时前
python3基础2026.7.28
开发语言·python
曲无忆4 小时前
LLMs赋能依赖类型证明自动化
python
一次旅行4 小时前
act本地预跑GitHub Actions:Python项目完整CI/CD流水线实战
python·ci/cd·github
玉鸯4 小时前
RAG 全链路调优指南:从 Chunking 到 Reranker
python·llm·agent
敢敢是只喵i4 小时前
Agent 为什么需要 guidance,但不能把 guidance 当成安全策略?
github·aigc
圣光SG4 小时前
Java操作题练习(二)
java·开发语言·python
m0_617493944 小时前
Python OpenCV 分水岭算法(Watershed)详解与实战
python·opencv·算法