使用 Go-DeepSeek 轻松调用 DeepSeek 模型:从在线 API 到本地部署

在这里插入图片描述

引言

DeepSeek 是一个强大的 AI 模型平台,支持多种自然语言处理任务,如对话生成、代码补全和函数调用。为了方便 Go 开发者快速集成 DeepSeek 的功能,我开发了一个非官方的 Go 客户端库:go-deepseek。本文将详细介绍如何使用该库,从在线 API 调用到本地模型部署,帮助你快速上手。

项目简介

go-deepseek 是一个 Go 语言编写的客户端库,支持以下功能:

  • Chat Completion:对话生成
  • FIM (Fill-in-Middle) Completion:代码补全
  • Function Calling:函数调用
  • Embeddings:文本嵌入

此外,go-deepseek 还支持通过 Ollama 调用本地模型(如 deepseek-r1),为开发者提供更灵活的部署选项。

安装

使用以下命令安装 go-deepseek:

go get github.com/p9966/go-deepseek

注意:该库需要 Go 1.23 或更高版本。

快速开始

1. 使用 DeepSeek API 进行对话生成

以下是一个简单的示例,展示如何使用go-deepseek调用 DeepSeek 的在线 API 进行对话生成:

package mainimport ("context""fmt""log""os""github.com/p9966/go-deepseek"
)func main() {client := deepseek.NewClient(os.Getenv("DEEPSEEK_API_KEY"))request := deepseek.ChatCompletionRequest{Model: deepseek.DeepSeekChat,Messages: []deepseek.ChatCompletionMessage{{Role:    deepseek.ChatMessageRoleUser,Content: "Hello!",},},}ctx := context.Background()resp, err := client.CreateChatCompletion(ctx, &request)if err != nil {log.Fatalf("ChatCompletion failed: %v", err)}if len(resp.Choices) == 0 {log.Fatal("No response choices available")}fmt.Println(resp.Choices[0].Message.Content)
}

使用 Ollama 调用本地模型

如果你想在本地运行模型,可以通过 Ollama 部署 deepseek-r1,并使用以下代码调用:

package mainimport ("context""fmt""log""github.com/p9966/go-deepseek"
)func main() {client := deepseek.Client{BaseUrl: "http://localhost:11434",}request := deepseek.OllamaChatRequest{Model: "deepseek-r1:7b",Messages: []deepseek.OllamaChatMessage{{Role:    "user",Content: "Hello!",},},}response, err := client.CreateOllamaChatCompletion(context.TODO(), &request)if err != nil {log.Fatalf("Error: %v", err)}fmt.Println(response.Message.Content)
}

获取 DeepSeek API Key

  1. 访问 DeepSeek 官网。
  2. 注册或登录你的账户。
  3. 进入 API Key 管理页面。
  4. 点击 “Create new secret key”。
  5. 输入 Key 的名称并确认。
  6. 生成的 API Key 将显示在页面上,请妥善保管。

注意:API Key 是敏感信息,请勿泄露。

本地模型部署

如果你想在本地运行模型,可以按照以下步骤操作:

  1. 访问 Ollama 官网。

  2. 下载并安装 Ollama。

  3. 在终端中运行以下命令下载模型:

    ollama run deepseek-r1

现在你可以通过 go-deepseek 调用本地模型了。

提示:你还可以从Ollama 模型库下载其他模型,使用方法类似。

更多示例

FIM (Fill-in-Middle) Completion

package mainimport ("context""fmt""log""os""github.com/p9966/go-deepseek"
)func main() {client := deepseek.NewClient(os.Getenv("DEEPSEEK_API_KEY"))request := deepseek.FINCompletionRequest{Model:  deepseek.DeepSeekChat,Prompt: "What is the weather like today?",}ctx := context.Background()resp, err := client.CreateFINCompletion(ctx, &request)if err != nil {log.Fatalf("Error creating completion: %v", err)}if len(resp.Choices) == 0 {log.Fatal("No response choices available")}fmt.Println(resp.Choices[0].Text)
}

Function Calling

package mainimport ("context""fmt""log""os""github.com/p9966/go-deepseek"
)func main() {client := deepseek.NewClient(os.Getenv("DEEPSEEK_API_KEY"))request := deepseek.ChatCompletionRequest{Model: deepseek.DeepSeekChat,Messages: []deepseek.ChatCompletionMessage{{Role:    deepseek.ChatMessageRoleUser,Content: "How's the weather in Hangzhou?",},},Tools: []deepseek.Tools{{Type: "function",Function: deepseek.Function{Name:        "get_weather",Description: "Get weather of an location, the user shoud supply a location first",Parameters: &deepseek.Parameters{Type: "object",Properties: map[string]interface{}{"location": map[string]interface{}{"description": "The location to get weather","type":        "string",},},Required: []string{"location"},},},},},}ctx := context.Background()resp, err := client.CreateChatCompletion(ctx, &request)if err != nil {log.Fatalf("ChatCompletion failed: %v", err)}if len(resp.Choices) == 0 {log.Fatal("No response choices available")}if len(resp.Choices[0].Message.ToolCalls) == 0 {log.Fatal("No function calls available")}fmt.Printf("Function name: %v, args:%s
", resp.Choices[0].Message.ToolCalls[0].Function.Name, resp.Choices[0].Message.ToolCalls[0].Function.Arguments)
}

项目地址与许可

  • GitHub 仓库:go-deepseek
  • 许可证:MIT License

结语

go-deepseek 是一个功能强大且易于使用的 Go 客户端库,支持从在线 API 到本地模型的多种部署方式。无论你是想快速集成 DeepSeek 的功能,还是在本地运行模型,go-deepseek 都能满足你的需求。如果你有任何问题或建议,欢迎在 GitHub 上提交 Issue 或 PR!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/70190.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VSCode 实用快捷键

前文 VSCode 作为文本编辑神器, 熟练使用其快捷键更是效率翻倍, 本文介绍 VSCode 常用的实用的快捷键 实用快捷键 涉及到文本操作, 搜索定位, 多光标, 面板打开等快捷键 功能快捷键复制光标当前行 (不需要鼠标选中) Ctrl C 剪切光标当前行 (不需要鼠标选中) Ctrl X 当前行下…

28、深度学习-自学之路-NLP自然语言处理-做一个完形填空,让机器学习更多的内容程序展示

import sys,random,math from collections import Counter import numpy as npnp.random.seed(1) random.seed(1) f open(reviews.txt) raw_reviews f.readlines() f.close()tokens list(map(lambda x:(x.split(" ")),raw_reviews))#wordcnt Counter() 这行代码的…

用deepseek学大模型08-卷积神经网络(CNN)

yuanbao.tencent.com 从入门到精通卷积神经网络(CNN),着重介绍的目标函数,损失函数,梯度下降 标量和矩阵形式的数学推导,pytorch真实能跑的代码案例以及模型,数据,预测结果的可视化展示, 模型应用场景和优缺点&#xf…

【Rust中级教程】1.10. 引用及内部可变性(简单回顾):引用、内部可变性、`Cell`类型及相关操作

喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 这篇文章只对所有权进行简单回顾,想要看完整的所有权系统阐述见【Rust自学】专栏…

2012年下半年软件设计师上午题知识点及其详细解释(附真题及答案解析)

以下是2012年下半年软件设计师上午题的所有题目(从第1题到第75题)的总结,按顺序列出每道题目的考察知识点及其详细解释,供考生背诵记忆: 1. 控制器 知识点:CPU的组成与功能解释:控制器负责指令…

openGauss 6.0.0 RC1数据库日常运维

引言 随着数字化时代的快速发展,数据库作为企业信息化的核心,其稳定性和性能对于企业至关重要。openGauss 6.0.0 openGauss是一款开源关系型数据库管理系统,采用木兰宽松许可证v2发行。openGauss内核深度融合华为在数据库领域多年的经验&…

4090单卡挑战DeepSeek r1 671b:尝试量化后的心得的分享

引言: 最近,DeepSeek-R1在完全开源的背景下,与OpenAI的O1推理模型展开了激烈竞争,引发了广泛关注。为了让更多本地用户能够运行DeepSeek,我们成功将R1 671B参数模型从720GB压缩至131GB,减少了80%&#xff…

【Scrapy】Scrapy教程6——提取数据

前一小节我们拿到了页面的数据,那页面中那么多内容,我们想要其中的部分内容,该如何获取呢?这就需要对我们下载到的数据进行解析,提取出来想要的数据,这节就讲讲如何提取数据。 引入 我们编辑保存下来的shouye.html文件看下,发现这是什么鬼,全是如下图的代码。 没错…

Python 的 with 语句可以用来管理资源的自动清理,并替代 try...finally 语句,使代码更简洁易读

Python 的 with 语句可以用来管理资源的自动清理,并替代 try...finally 语句,使代码更简洁易读。 1. with 语句的作用 在 Python 里,with 语句通常用于管理资源,比如文件、数据库连接、网络请求等。 它可以保证无论代码是否执行…

栈回溯基础

指令集区分 thumb指令集 长度:thumb指令通常是 16 位。特点:thumb 指令集是为了压缩指令集长度减少程序占用空间。对齐方式:2字节对齐,存放 thumb 指令的地址一般会被1,设置为奇数,用于表示地址上存放的是…

Pytorch论文实现之GAN-C约束鉴别器训练自己的数据集

简介 简介:这次介绍复现的论文主要是约束判别器的函数空间,作者认为原来的损失函数在优化判别器关于真样本和假样本的相对输出缺乏显式约束,因为在实践中,在优化生成器时,鉴别器对生成样本的输出会增加,但对真实数据保持不变,而优化鉴别器会导致其对真实数据的输出增加…

Pyecharts系列课程06——热力图(Heatmap)

1. 基础使用 热力图是一种用于展示数据分布的密度或热度的图表,通过颜色深浅来表示数值大小。 a. 简单示例 我们先来看一个简单示例: 简单示例 from pyecharts.charts import HeatMapx_data = ["分类1", "分类2", "分类3"] y_data

交换路由——控制VLAN之间通信

项目 最近一段时间,A公司发现划分VLAN之后,网速提高很多,发生拥堵的情况消失了.但是,部门之间不能互联,也给办公室带来不便.公司要求项目实施各VLAN内主机互通。 部门 VLAN 名称 端口范围 网络ID 计算机 市场部 VLAN 10 shichang f0/1-f/010 192.168.10.0/24 pc0,pc…

使用 Redis 实现 RBAC 权限管理

1. 什么是 RBAC? RBAC(Role-Based Access Control,基于角色的访问控制)是一种常见的权限管理模型,它通过用户(User)、角色(Role)、权限(Permission&#xff…

qt-C++笔记之QGraphicsScene和 QGraphicsView中setScene、通过scene得到view、通过view得scene

qt-C++笔记之QGraphicsScene和 QGraphicsView中setScene、通过scene得到view、通过view得scene code review! 文章目录 qt-C++笔记之QGraphicsScene和 QGraphicsView中setScene、通过scene得到view、通过view得scene1.`setScene` 方法2.通过 `scene` 获取它的视图 (`views()`)…

DeepSeek频繁宕机应对方案

第三方监测显示,38%的企业因AI工具不稳定错失热点流量(Gartner 2025)。当竞品1小时内发布300篇行业内容时,你可能还在为「服务器繁忙」提示焦头烂额。147SEO系统通过智能容错机制,帮助某本地生活平台稳定输出580篇地域…

CentOS/RHEL如何更换国内Yum源

在国内使用CentOS或RHEL系统时,默认的Yum源是国外的,这可能导致软件包的下载速度慢,甚至出现连接超时的问题。为了解决这个问题,我们可以将Yum源切换到国内的镜像源,从而大大提高软件包的下载速度和稳定性。 本文将详…

cs224w课程学习笔记-第2课

cs224w课程学习笔记-第2课 传统图学习 前言一、节点任务1、任务背景2、特征节点度3、特征节点中心性3.1 特征向量中心性(Eigenvector Centrality)3.2 中介中心性(Betweenness Centrality)3.3 接近中心性(Closeness Cen…

【设计模式】【结构型模式】代理模式(Proxy)

👋hi,我不是一名外包公司的员工,也不会偷吃茶水间的零食,我的梦想是能写高端CRUD 🔥 2025本人正在沉淀中… 博客更新速度 👍 欢迎点赞、收藏、关注,跟上我的更新节奏 🎵 当你的天空突…

平板作为电脑拓展屏

有线串流(速度更快) spacedesk 打开usb对安卓的连接 用usb线直接连接电脑和平板 无线串流(延迟高,不推荐) todesk pc和手机端同时下载软件,连接后可以进行远程控制或扩展屏幕 spacedesk 连接到同一个…