一、修改环境变量
1.1 配置远程访问
在我们本地部署好ollama之后,仅支持本机访问,我们可以通过修改环境变量让其他人可以远程访问。
在wins电脑上增加环境变量:
复制OLLAMA_HOST 0.0.0.0:11434
1.2 配置本地模型路径
1.2.1 本地模型默认路径
wins本地模型默认路径:C:\Users\%username%\.ollama\models。
这里 %username% 是当前登录的用户名。例如,如果用户名为 Smqnz,则模型文件的默认存储路径可能是 C:\Users\Smqnz\.ollama\models。
以我的电脑为例:
复制C:\Users\admin\.ollama\models
1.2.2 修改本地模型默认路径
wins上的环境变量增加:
复制OLLAMA_MODELS 你想要存放的路径
以下为修改示例:
修改后,重启ollama即可。
1.3 配置允许的http请求来源
OLLAMA_ORIGINS 是 Ollama 中用于配置跨域资源共享(CORS)的环境变量,可以指定哪些来源(域名、IP 地址等)可以访问 Ollama 提供的 API 服务。
如果我们想让它接收任何来源(IP)的http请求的话,我们需要将其设置为*。
复制OLLAMA_ORIGINS *
这里一定要注意,以上修改的环境变量名称必须为大写,不要随意修改。
二、ollama常用API请求
一般来说,我们可以通过打开命令行窗口直接进行对话。
但是这种方式对于开发者来说并不实用,一般我们需要通过其API进行访问与开发,本次我们就来详细聊一下ollama常见的API。
2.1 文本生成API
Ollama 提供了一套功能丰富的文本生成接口,方便用户与本地部署的模型进行交互,以下是其主要的文本生成接口及功能介绍:
接口路径:POST /api/generate
功能:向模型发送提示(prompt),生成文本回复。
请求参数:
model:模型名称,如 "deepseek-r1:7b"。
prompt:输入的提示文本。
stream:是否启用流式输出,默认为 false。
options:可选参数,包括:
temperature:控制生成文本的多样性,取值范围通常为 0 到 1。
max_tokens:最大生成的 token 数量。
top_p:Top-p 采样参数。
复制import requests # Ollama 服务的 URL url = "http://localhost:11434/api/generate" # 请求数据 data = { "model": "deepseek-r1:8b", # 指定模型名称 "prompt": "你好,请简单介绍一下Python语言的特点。", # 输入的提示词 "stream": False, # 是否启用流式响应 "options": { # 可选参数 "temperature": 0.7, # 温度参数,控制生成内容的随机性 "max_tokens": 100 # 最大生成长度 } } # 发送 POST 请求 response = requests.post(url, jsnotallow=data) # 检查响应状态 if response.status_code == 200: result = response.json() print("生成的文本:", result.get("response")) else: print("请求失败,状态码:", response.status_code) print("错误信息:", response.text)
2.2 对话聊天API
接口路径:POST /api/chat
功能:支持多轮对话,模型会记住上下文。
请求参数:
model:模型名称。
messages:消息列表,包含用户输入和模型回复,格式为 {"role": "user", "content": "用户输入内容"}。
stream:是否启用流式输出,默认为 false。
options:可选参数,与生成文本接口类似。
复制import requests import json # 设置请求的URL和端口 url = "http://localhost:11434/api/chat" # 设置请求的数据 data = { "model": "deepseek-r1:8b", # 模型名称 "messages": [ {"role": "system", "content": "你现在是一名合格的售票员,你还可以随意生成一些航班路线提供给用户,请扮演好您的角色。"}, {"role": "user", "content": "你好,我想订一张机票。"}, {"role": "assistant", "content": "好的,请问您要去哪里?"}, {"role": "user", "content": "我要去北京。"}, {"role": "user", "content": "有哪些航班可选?"} ], "stream": False # 是否启用流式输出 } # 设置请求头 headers = { "Content-Type": "application/json" } # 发送POST请求 response = requests.post(url, headers=headers, data=json.dumps(data)) # 检查响应状态码 if response.status_code == 200: # 解析响应内容 result = response.json() # 输出模型的回复内容 print("模型回复:", result.get("message").get("content")) else: # 打印错误信息 print(f"请求失败,状态码:{response.status_code}") print("错误信息:", response.text)
三、ollama兼容openai的请求
3.1 单轮对话
复制from openai import OpenAI client = OpenAI( base_url="http://localhost:11434/v1", # Ollama默认API地址 api_key="test" # 必填字段但会被忽略,随便填写即可 ) response = client.chat.completions.create( model="deepseek-r1:8b", # 替换为已下载的模型名称 messages=[ {"role": "system", "content": "你是一个有帮助的助手"}, {"role": "user", "content": "用50字解释量子计算"} ], temperature=0.7, max_tokens=1024 ) print(response.choices[0].message.content)
3.2 多轮对话
复制from openai import OpenAI def run_chat_session(): client = OpenAI( base_url="http://localhost:11434/v1/", api_key="test" # 必填但会被忽略 ) chat_history = [] while True: user_input = input("用户:") if user_input.lower() == "exit": print("AI:对话结束") break chat_history.append({"role": "user", "content": user_input}) try: response = client.chat.completions.create( messages=chat_history, model="deepseek-r1:8b" # 替换成你安装的模型名称 ) ai_response = response.choices[0].message.content print(f"AI:{ai_response}") chat_history.append({"role": "assistant", "content": ai_response}) except Exception as e: print(f"错误:{e}") if __name__ == "__main__": run_chat_session()
可以看到,多轮对话可以通过维护问答列表能够很好地理解上下文的含义。