写一个完整的python通过HTTP调用OLLAMA框架内大模型的多轮对话代码

关于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应用来发布。

码字有点累,就这样吧

### 构建基于Spring和Ollama的本地聊天AI应用程序 #### 项目结构规划 为了创建一个功能齐全的聊天AI应用,需要设计合理的项目结构来支持前后端交互以及模型调用。通常情况下,会采用Maven或Gradle作为构建工具管理依赖项。 #### 添加依赖库 在`pom.xml`(对于Maven)文件中加入必要的依赖包以便能够访问RESTful服务并处理JSON数据交换: ```xml <dependencies> <!-- Spring Boot Starter Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Ollama API Client Library (假设存在这样的库)--> <dependency> <groupId>com.example.ollama</groupId> <artifactId>ollama-client</artifactId> <version>1.0.0</version> </dependency> ... </dependencies> ``` #### 配置Ollama客户端 通过配置类注入Ollama的服务接口实例,在这里可以设置API密钥和其他连接参数: ```java @Configuration public class AppConfig { @Bean public OllamaService ollamaService(){ return new DefaultOllamaServiceImpl("your_api_key_here"); } } ``` #### 创建控制器接收请求 定义HTTP端点用于接受来自前端的消息输入,并转发给后台逻辑层进行对话处理: ```java @RestController @RequestMapping("/chat") public class ChatController { private final OllamaService ollamaService; public ChatController(OllamaService ollamaService){ this.ollamaService = ollamaService; } @PostMapping("/message") ResponseEntity<String> handleMessage(@RequestBody String message){ try{ // 调用Ollama服务获取回复内容 String responseText = ollamaService.getResponse(message); return ResponseEntity.ok(responseText); }catch(Exception e){ logger.error(e.getMessage(),e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); } } } ``` #### 测试环境准备 确保安装了Java开发套件(JDK),并且已经设置了正确的JAVA_HOME路径变量;另外还需要下载并启动Ollama服务器以供测试期间使用[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值