tip: API 查看所有的模型 : http://192.168.18.157:11434/api/tags
1. 下载 ollama https://ollama.com/
2. 安装完成后,没有操作界面(只能CLI)
3. 检测 安装是否成功 ollama --version
4.常用命令: ollama help
修改默认模型下载位置:
概述:Ollama默认将模型保存在C盘(Windows)、~/.ollama/models(MacOS)或/usr/share/ollama/.ollama/models(Linux)。
为了解决C盘空间不足的问题,可以通过设置环境变量OLLAMA_MODELS来修改模型存储位置。 Windows系统:(系统变量) 设置环境变量OLLAMA_MODELS,例如E:\ollama\models。 重启Ollama或PowerShell,使设置生效。 MacOS系统: 通过设置环境变量OLLAMA_MODELS,例如~/ollama/models。 重启Ollama服务。 Linux系统: 创建新目录并设置权限,例如sudo mkdir /path/to/ollama/models。 编辑ollama.service文件,添加环境变量OLLAMA_MODELS。 重启ollama服务。
5.下载模型: https://ollama.com/library
命令 :
ollama run llama3.1
完成后即可问答了
6. 运行模型提供API
6.1 安装代理服务:
创建新的虚拟环境 python -m venv D:/ollama
激活环境:
ollama/Scripts/active.bat
(ollama)> pip install litellm
pip install litellm[proxy]
(提供代理服务)
6.2 运行模型,提供服务:
litellm --model ollama/llama3.1
7. ollama 直接提供服务:(REST 缺省只支持本机访问,要对外提供服务,需要设置环境变量: OLLAMA_HOST=0.0.0.0)
ollama无法使用本地IP访问11434端口,但是localhost和127.0.0.1可以访问
1. OLLAMA_HOST:这个变量定义了Ollama监听的网络接口。通过设置OLLAMA_HOST=0.0.0.0,我们可以让Ollama监听所有可用的网络接口,从而允许外部网络访问。 2. OLLAMA_MODELS:这个变量指定了模型镜像的存储路径。通过设置OLLAMA_MODELS=F:\OllamaCache,我们可以将模型镜像存储在E盘,避免C盘空间不足的问题。 3. OLLAMA_KEEP_ALIVE:这个变量控制模型在内存中的存活时间。设置OLLAMA_KEEP_ALIVE=24h可以让模型在内存中保持24小时,提高访问速度。 4. OLLAMA_PORT:这个变量允许我们更改Ollama的默认端口。例如,设置OLLAMA_PORT=8080可以将服务端口从默认的11434更改为8080。 5. OLLAMA_NUM_PARALLEL:这个变量决定了Ollama可以同时处理的用户请求数量。设置OLLAMA_NUM_PARALLEL=4可以让Ollama同时处理两个并发请求。 6. OLLAMA_MAX_LOADED_MODELS:这个变量限制了Ollama可以同时加载的模型数量。设置OLLAMA_MAX_LOADED_MODELS=4可以确保系统资源得到合理分配。 7. OLLAMA_ORIGINS: 允许的源列表,星号*或使用逗号分隔。
CUDA & OLLAMA 配置多显卡负载均衡_ollama 多显卡-CSDN博客 可参考这个
POST json url: http://localhost:11434/api/generate
body: { "model":"qwen2:latest",
"prompt":"你好",
"stream":false
}
curl -X POST -H "Content-Type: application/json" http://localhost:11434/api/generate -d "{\"model\":\"llama3\",\"prompt\":\"Why is the sky blue?\"}"
API 说明:
http://localhost:11434/v1/chat/completions
/api/generate 用途: 这个端点主要用于生成单个文本片段。它接收输入并返回基于该输入的模型生成的文本,通常不考虑之前的消息历史或对话上下文。 功能: 它可以用于各种生成任务,如文章创作、代码生成、故事编写等,其中每次请求都是独立的,不依赖于前一次请求的结果。 /api/chat 用途: 这个端点用于支持对话式的交互。它通常需要一个消息列表作为输入,以维护对话的历史和上下文,确保模型能够理解并响应连续的对话。 功能: 它适合于创建聊天机器人、问答系统或任何需要多轮对话的应用场景。通过跟踪对话历史,模型可以提供更加连贯和情境相关的响应。
system 可以限定角色
json={"model": "qwen2.5:7b", "messages": [
{"role": "system", "content": "你是一位知识渊博的财务助理,负责回答编程相关的问题,代码和sql相关的问题,请直接给出代码或者sql字符串,无需其它说明。"},
{"role": "user", "content": content}], "stream": True},
'{ "model": "llama2", "messages": [ {"role": "user", "content": "你好,今天的天气怎么样?"} ], "temperature": 0.7, "max_tokens": 2048 }'
基于ollama 的流式聊天:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # @mail : lshan523@163.com # @Time : 2024/11/21 18:14 # @Author : Sea # @File : OlllamaChat2.py # @Purpose : # @history: # **************************** import json import requests # NOTE: ollama must be running for this to work, start the ollama app or run `ollama serve` model = "qwen2:latest" # TODO: update this for whatever model you wish to use def chat(messages): r = requests.post( # "http://127.0.0.1:11434/api/generate", "http://127.0.0.1:11434/api/chat", json={"model": model, "messages": messages, "stream": True}, ) r.raise_for_status() output = "" for line in r.iter_lines(): body = json.loads(line) if "error" in body: raise Exception(body["error"]) if body.get("done") is False: message = body.get("message", "") content = message.get("content", "") output += content # the response streams one token at a time, print that as we receive it print(content, end="", flush=True) if body.get("done", False): message["content"] = output return message def main(): messages = [] while True: user_input = input("Enter a prompt: ") if not user_input: exit() messages.append({"role": "user", "content": user_input}) message = chat(messages) messages.append(message) print("\n\n") if __name__ == "__main__": main()