Go
go对接DeepSeek实现文本对话
go对接DeepSeek实现文本对话
沉了一段时间,今天跟大家分享go对接deepSeek实现文本对话,后面会跟大家分享如何返回流模式,今天先分享文本模式返回。
这里我还是在我自己的项目里面直接对接,我是用gin框架开发,我们先封装一个调用函数,文件名叫deepSeek.go吧,代码如下
package utils
//引入模块
import (
"net/http"
"encoding/json"
"bytes"
"github.com/gin-gonic/gin"
"io/ioutil"
"bufio"
"io"
"fmt"
"strings"
)
/**
deepSeek
*/
const deepSeekChatApiUrl = "chat/completions" //文本对话请求地址
/**
文本对话-全文模式
*/
func DeepSeekSendText(content string) (int, string) {
//获取配置
apiUrl := "https://api.deepseek.com/" + deepSeekChatApiUrl
authorization := "自己API KEY"
//组合信息体结构
messages := make(map[string]interface{})
messages["role"] = "user"
messages["content"] = content
messagesList := make([]map[string]interface{}, 1)
messagesList[0] = messages
//组合请求结构
params := make(map[string]interface{})
params["model"] = "deepseek-chat"
params["messages"] = messagesList
//转化为json
bytesData, err := json.Marshal(params)
if err != nil {
return 404, "转化结构失败"
}
//组合请求内容
payload := bytes.NewReader(bytesData)
req, _ := http.NewRequest("POST", apiUrl, payload)
//设置请求头部
req.Header.Add("cache-control", "no-cache")
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", "Bearer "+authorization)
//调用api
res, _ := http.DefaultClient.Do(req)
//关闭链接
defer res.Body.Close()
//获取返回结果
body, _ := ioutil.ReadAll(res.Body)
//处理json
var resultList interface{}
errResult := json.Unmarshal(body, &resultList)
if errResult != nil {
return 404, "网络繁忙,请稍后重试"
}
//提取数据
resultDataList, _ := resultList.(map[string]interface{})
//提取choices结构体
choices, errChoices := resultDataList["choices"].([]interface{})
if !errChoices {
return 404, "API调用失败"
}
//获取结果集第一个
choicesFirst, choicesFirstErr := choices[0].(map[string]interface{})
if !choicesFirstErr {
return 404, "获取第一结果集失败"
}
//获取message结构体
messageList, messageListErr := choicesFirst["message"].(map[string]interface{})
if !messageListErr {
return 404, "获取message结构失败"
}
//获取答案
answer, answerErr := messageList["content"].(string)
if !answerErr {
return 404, "AI回复获取失败"
}
//返回结果
return 200, answer
}我们在控制器写一个方法来调用上面写的函数,代码如下
/**
DeepSeek-文生文全文模式
*/
func ChatDeepSeekSendText(c *gin.Context) {
// 获取内容
_, content := GetRequestParameters(c, "content", 1) // 内容
if content == "" {
ReturnError("请输入内容", c)
return
}
//调用chatAI获取结果
apiCode, apiResult := utils.DeepSeekSendText(content)
if apiCode != 200 {
ReturnError(apiResult, c)
return
}
//组合返回数据
dataList := make(map[string]interface{})
dataList["content"] = apiResult
//返回
ReturnSuccess("请求成功", c, dataList)
}然后再命名一个路由,代码如下
chatAi := router.Group("ai")
{
chatAi.Any("/deepSeekSendText", ChatDeepSeekSendText)
} 我们可以请求看下效果

这样便成功的对接API,实现文本对话,后面跟大家分享流模式如何写。
0条评论