使用 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 main

import (
	"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 main

import (
	"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 main

import (
	"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 main

import (
	"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\n", resp.Choices[0].Message.ToolCalls[0].Function.Name, resp.Choices[0].Message.ToolCalls[0].Function.Arguments)
}

项目地址与许可

结语

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Simple Han

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值