引言
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
- 访问 DeepSeek 官网。
- 注册或登录你的账户。
- 进入 API Key 管理页面。
- 点击 “Create new secret key”。
- 输入 Key 的名称并确认。
- 生成的 API Key 将显示在页面上,请妥善保管。
注意:API Key 是敏感信息,请勿泄露。
本地模型部署
如果你想在本地运行模型,可以按照以下步骤操作:
-
访问 Ollama 官网。
-
下载并安装 Ollama。
-
在终端中运行以下命令下载模型:
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!