当前位置: 首页 > article >正文

使用python实现与本地ollama部署的deepseek对话

专栏总目录

        按照ollama官方doc的example操作,没有成功与本地ollama上的deepseek-r1:1.5b通讯后,发现vscode可以调用本地ollama上的deepseek模型。

        为了实现与ollama上的deepseek模型通讯,我使用wireshark对本地回环地址进行侦听后,发现了具体方法。

一、研究过程

        vscode上提问,给了如下回答

        如下图所示,上传的内容及参数,关键字在相关内容的的位置

二、对话脚本

        使用python脚本编辑后如下所示

import socket
import json
import json

def get_content(str_data):
    #print(str_data)
    content_str = ''
    for i in str_data.splitlines():
        if 'think' in i:
            continue
        elif '"content"' in i:
            # 给定的JSON字符串
            json_string = i
            # 解析JSON字符串
            data = json.loads(json_string)
            
            # 提取content的值
            content = data['message']['content']

            content_str = content_str + content.replace('/n', '')
            
            stripped_string = content_str.lstrip('\n')
    return stripped_string


def send_post_request(host, port, path, headers, body):
    # 创建一个socket对象
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        # 连接到服务器
        s.connect((host, port))
        # 构造HTTP请求
        request = f"POST {path} HTTP/1.1\r\n"
        for header, value in headers.items():
            request += f"{header}: {value}\r\n"
        request += "\r\n"  # 空行表示头部结束
        request += body
        # 发送HTTP请求
        s.sendall(request.encode('utf-8'))
        # 接收响应
        response = b''
        while True:
            part = s.recv(1024)
            if not part:
                break
            response += part
        return response

def main():
    # 服务器的地址和端口
    host = '127.0.0.1'
    port = 11434
    path = "/api/chat"
    while True:
        question = input('>>>')
        # 构造请求数据
        data = {
            "model": "deepseek-r1:1.5b",
            "messages": [{"role": "user", "content": question}],
            "options": {
                "num_predict": 4096,
                "stop": ["<...begin...of...sentence...>", "<...end...of...sentence...>", "<...User...>", "<...Assistant...>"],
                "num_ctx": 8096
            },
            "keep_alive": 1800
        }
        body = json.dumps(data)

        # 构造HTTP头部
        headers = {
            "Accept": "*/*",
            "Accept-Encoding": "gzip, deflate, br",
            "Authorization": "Bearer undefined",
            "Content-Length": str(len(body)),
            "Content-Type": "application/json",
            "User-Agent": "node-fetch",
            "Host": "127.0.0.1:11434",
            "Connection": "close"
        }

        # 发送POST请求并获取响应
        response = send_post_request(host, port, path, headers, body)
        print("【deepseek】: ",end='')
        #print(response.decode('utf-8'))
        mess = get_content(response.decode('utf-8'))
        print(mess)

if __name__ == '__main__':
    main()

        具体切片、美化步骤再此省略。


http://www.kler.cn/a/533361.html

相关文章:

  • 解决threeJS加载obj gltf和glb模型后颜色太暗的方法
  • DIY Shell:探秘进程构建与命令解析的核心原理
  • 从Transformer到世界模型:AGI核心架构演进
  • 低通滤波算法的数学原理和C语言实现
  • 为AI聊天工具添加一个知识系统 之85 详细设计之26 批流一体式 与数据提取器
  • 四川正熠法律咨询有限公司正规吗可信吗?
  • p5r预告信生成器API
  • Windows Docker笔记-安装docker
  • C++ 入门速通-第5章【黑马】
  • iOS 老项目适配 #Preview 预览功能
  • python基础入门:2.1变量与基本数据类型
  • 音频录制一般在什么情况下会选择保存为PCM?什么情况会选择保存为WAV?
  • torchtext.get_tokenizer
  • C32.【C++ Cont】静态实现双向链表及STL库的list
  • 蓝桥杯整数删除(优先队列pair,模拟链表)
  • 今日AI和商界事件(2025-02-05)
  • punkt缺失问题
  • 定时任务单线程消费 redis 中数据导致消费能力不足
  • Docker深度解析:部署 SpringBoot 项目
  • TensorFlow是个啥玩意?
  • 学习threejs,pvr格式图片文件贴图
  • 108,【8】 buuctf web [网鼎杯 2020 青龙组]AreUSerialz
  • 每日Attention学习18——Grouped Attention Gate
  • 探索巨控GRM240系列远程模块的强大功能:物联应用新选择
  • deepseek、qwen等多种模型本地化部署
  • RabbitMQ 深度解析与最佳实践