初探大模型-3-Python调用Ollama私有化部署的LLM
使用Ollama完成LLM私有化部署后,除了命令行方式进行问答,还需要能够通过代码调用接口的方式进行。目前主要有以下几种方式:requests调用方式、openai调用方式、ollama调用方式、
requests调用
代码示例:
# -*- coding: utf-8 -*-
import json
# @Author: Chuanqi Cheng
# @File: llm_requests.py
import requests
import pandas as pd
url = 'http://localhost:11434/api/chat'
def send_message(query):
"""构建请求参数"""
payload={
"model":"DeepSeek-R1-Distill-Qwen-14B:latest",
"messages":[
{"role":"user","content":query}
]
}
"""请求Ollama中模型接口"""
head = {"Content-Type": "application/json"}
response = requests.post(url,json=payload,headers=head)
if response.status_code == 200:
response_content = ""
response_json = pd.read_json(response.text,lines=True) # 坑,此处使用json容易因为换行符出错,使用pd可以
for line in response_json["message"]:
response_content += line.get('content')
return response_content
else:
return f"回答失败:,{response.status_code}---{response.text}"
print(send_message('你好,你能帮我做些什么事情啊,你是谁'))
openai库调用
代码示例:
# -*- coding: utf-8 -*-
# @Author: Chuanqi Cheng
# @File: llm_openai.py
from openai import OpenAI
client = OpenAI(
base_url = 'http://localhost:11434/v1/',
api_key = 'ollama'
)
"""
构造模型请求参数
"""
def get_llm_params(prompt):
messages=[{"role":"user","content":prompt}]
return messages
def get_completion(prompt,model="DeepSeek-R1-Distill-Qwen-14B:latest",temperature=0.95):
messages = get_llm_params(prompt)
responses = client.chat.completions.create(
model = model,
temperature = temperature,
messages = messages
)
if len(responses.choices) > 0:
return responses.choices[0].message.content
return "生成答案失败!"
print(get_completion('你好,你是谁'))
基于Ollama库调用
代码示例:
# -*- coding: utf-8 -*-
# @Author: Chuanqi Cheng
# @File: llm_ollama.py
import ollama
import json
host = 'http://localhost:11434'
client = ollama.Client(host=host)
def send_message(prompt,temperature=0.95,model='DeepSeek-R1-Distill-Qwen-14B:latest'):
answer = client.chat(
model = model,
messages = [{
"role":"user",
"content":prompt
}],
options={"temperature":temperature}
)
print(answer["message"]["content"])
send_message("你好,你是谁,你会做什么事情")
// TODO// 还有其他库应该也可以,另外,没有深入研究流式输出和段落式输出,待学习。

浙公网安备 33010602011771号