关于OLLAMA API的应用
很多朋友部署完ollama后,也成功拉取了自己想要的模型,本地跑起来还不错。但毕竟在服务器上直接操作有一定的风险,而且只有服务器上一个人操作,严重浪费了资源。在实际应用中为了解决这些问题,所以我们通过OLLAMA API来调用OLLAMA内的模型,从而实现各类的AI应用。鉴于篇幅为难题,这里只写一段很小的,可以直接运行的代码。
在开始前,我们首先来看下OLLAMA API
OLLAMA服务器信息
这里以本地网络内的OLLAMA主机为例,简单说明下OLLAMA服务器的信息。
ollama服务器地址:192.168.1.128
ollama服务器端口号:11434 目前ollama安装的默认端口号就是11434
代码中调用的模型为:deepseek-r1:1.5b
HTTP调用ollama api
截至到该文章发布日期,OLLAMA版本为0.5.7
通过HTTP方式调用哦llama api 基础请求格式为:
curl -X POST http://192.168.1.128:11434/api/generate -H “Content-Type: application/json” -d “{“model”: “deepseek-r1:1.5b”, “prompt”: “天空为什么是蓝色的?”}”
当然如果你喜欢使用post工具,也可以使用post工具软件来测试基础请求是否能正常连接及输出。
正常情况下应该如下图
运行结果如下:
说明通过HTTP调用OLLAMA api的请求地址是正确的,ollama api工作正常,OLLAMA中加载的模型工作正常。如果你在学习和测试过程中显示不正常的,请一词排除OLLAMA API端口是否正常。HTTP路径是否正常,已经OLLAMA中的模型是否正常工作,至于如何逐步排查,很多人都有讲过,在这里就不讲了
这里要讲一点的是关于HTTP调用OLLAMA API的端点问题,也就是http请求ollama api路径的问题,通俗的可以这样说,但标准还是说端点把
主要有两个端点:一个是生成文本的端点,/api/generate。另一个是对话的端点,/api/chat。上图中就是使用生成文本的端点
下面给出的完整代码也是基于生成文本的端点来写的,至于对话的端点,大家自己写吧。
本人很少使用csdn对是否能完成保持正确格式粘贴代码段实在是不太有把握,但尽量试下吧
完整代码
python
import requests
import json
# OLLAMA服务器地址和端口
OLLAMA_URL = "http://192.168.1.128:11434"
def send_message_to_ollama(prompt):
"""
发送消息到OLLAMA服务器并获取响应
:param prompt: 用户输入的对话内容
:return: OLLAMA模型的回复
"""
payload = {
"model": "deepseek-r1:1.5b",
"prompt": prompt,
"max_tokens": 150 # 根据需要调整生成的token数量
}
response = requests.post(f"{OLLAMA_URL}/api/generate", json=payload, stream=True)
full_response = ""
for line in response.iter_lines():
if line:
try:
line_data = json.loads(line)
response_chunk = line_data.get("response", "")
# 过滤掉 <think> 和 </think> 内容
if "<think>" in response_chunk or "</think>" in response_chunk:
continue
if line_data.get("done"):
full_response += response_chunk
break
full_response += response_chunk
except json.JSONDecodeError as e:
print(f"JSONDecodeError: {e}")
return full_response
def main():
print("欢迎使用OLLAMA多轮对话系统!输入'exit'退出对话。")
conversation_history = []
while True:
user_input = input("你: ")
if user_input.lower() == "exit":
print("退出对话。")
break
conversation_history.append(f"你: {user_input}")
prompt = "\n".join(conversation_history)
print("请等待,AI正在思考。") # 显示提示信息
response = send_message_to_ollama(prompt)
conversation_history.append(f"OLLAMA: {response}")
print() # 另起一行
print(f"OLLAMA: {response}")
if __name__ == "__main__":
main()
应该还算可以吧,反正是粘贴上去了,相应的库文件大家自己PIP install 吧
运行结果
直接上图,如下图:
只是一个抛砖引玉的作用,如果觉得这样很不方便使用,也想封装下至少保护下代码中的服务器地址和端口等,大家可以自行封装该代码。
如果喜欢WINDOWS窗口类的应用的化,可以加载PYQT5或PYQT6库,形成一个标准的WINDOW应用来发布。
码字有点累,就这样吧