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可以访问

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 说明:

/api/generate
用途: 这个端点主要用于生成单个文本片段。它接收输入并返回基于该输入的模型生成的文本,通常不考虑之前的消息历史或对话上下文。
功能: 它可以用于各种生成任务,如文章创作、代码生成、故事编写等,其中每次请求都是独立的,不依赖于前一次请求的结果。
/api/chat
用途: 这个端点用于支持对话式的交互。它通常需要一个消息列表作为输入,以维护对话的历史和上下文,确保模型能够理解并响应连续的对话。
功能: 它适合于创建聊天机器人、问答系统或任何需要多轮对话的应用场景。通过跟踪对话历史,模型可以提供更加连贯和情境相关的响应。

 

基于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()

 

posted on 2024-09-20 19:19  lshan  阅读(376)  评论(0编辑  收藏  举报