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

修改网站logo房地产网站建设

修改网站logo,房地产网站建设,广告主广告商对接平台,专做蔬菜大棚的网站目录 1.deepseek官方API调用文档1.访问格式2.curl组装 2.go代码1. config 配置2.模型相关3.错误处理4.deepseekAPI接口实现5. 调用使用 3.响应实例 1.deepseek官方API调用文档 1.访问格式 现在我们来解析这个curl 2.curl组装 // 这是请求头要加的参数-H "Content-Type:…

目录

  • 1.deepseek官方API调用文档
    • 1.访问格式
    • 2.curl组装
  • 2.go代码
      • 1. config 配置
      • 2.模型相关
      • 3.错误处理
      • 4.deepseekAPI接口实现
      • 5. 调用使用
  • 3.响应实例

1.deepseek官方API调用文档

1.访问格式

在这里插入图片描述
现在我们来解析这个curl

2.curl组装

// 这是请求头要加的参数-H "Content-Type: application/json" \-H "Authorization: Bearer <DeepSeek API Key>" \// 这是请求体要加的参数
-d '{"model": "deepseek-chat","messages": [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Hello!"}],"stream": false}'

这个里面可以看出,user角色使我们要输入的问题,stream选择是否为流式响应

2.go代码

1. config 配置

type Config struct {BaseURL    stringAPIKey     stringHTTPClient *http.Client
}

2.模型相关

type Model interface {Chat(ctx context.Context, req Request) (*Response, error)Stream(ctx context.Context, req Request) (<-chan Response, error)
}type Request struct {Model    string    `json:"model"`Messages []Message `json:"messages"`Stream   bool      `json:"stream"`
}type Message struct {Role    string `json:"role"`Content string `json:"content"`
}type Response struct {Content string `json:"content"`
}

3.错误处理

// Error 标准错误类型
type Error struct {Code    intMessage stringModel   string
}func (e *Error) Error() string {return fmt.Sprintf("[%s] %d: %s", e.Model, e.Code, e.Message)
}

4.deepseekAPI接口实现

type DeepSeek struct {Cfg ai.Config
}func NewDeepSeek(cfg ai.Config) *DeepSeek {return &DeepSeek{Cfg: cfg}
}func (d *DeepSeek) Stream(ctx context.Context, request ai.Request) (<-chan ai.Response, error) {return d.handleStreaming(ctx, request)
}func (d *DeepSeek) Chat(ctx context.Context, request ai.Request) (*ai.Response, error) {doRequest, err := d.doRequest(ctx, request, false)if err != nil {return nil, err}return d.parseResponse(doRequest)
}func (d *DeepSeek) parseResponse(resp *http.Response) (*ai.Response, error) {all, err := io.ReadAll(resp.Body)if err != nil {return nil, fmt.Errorf("io.ReadAll failed, err: %v\n", err)}defer resp.Body.Close()return &ai.Response{Content: string(all)}, nil
}// 私有方法
func (d *DeepSeek) doRequest(ctx context.Context, req ai.Request, stream bool) (*http.Response, error) {req.Stream = streambody, _ := json.Marshal(req)httpReq, err := http.NewRequestWithContext(ctx,"POST",d.Cfg.BaseURL+"/chat/completions",bytes.NewReader(body),)// 设置请求头httpReq.Header.Set("Content-Type", "application/json")httpReq.Header.Set("Authorization", "Bearer "+apiKey)resp, err := d.Cfg.HTTPClient.Do(httpReq)if err != nil {return nil, &ai.Error{Model:   "deepseek",Code:    http.StatusInternalServerError,Message: fmt.Sprintf("HTTP error: %v", err),}}if resp.StatusCode != http.StatusOK {return nil, &ai.Error{Model:   "deepseek",Code:    http.StatusInternalServerError,Message: fmt.Sprintf("failed to request: %v", err),}}return resp, nil
}func (d *DeepSeek) handleStreaming(ctx context.Context, req ai.Request) (<-chan ai.Response, error) {ch := make(chan ai.Response)go func() {defer close(ch)// 发起流式请求resp, err := d.doRequest(ctx, req, true)if err != nil {ch <- ai.Response{Content: "request error!"}return}defer resp.Body.Close()scanner := bufio.NewScanner(resp.Body)for scanner.Scan() {select {case <-ctx.Done():ch <- ai.Response{Content: "ctx done!"}returndefault:// 解析事件流event := parseEvent(scanner.Bytes())if event != nil {ch <- *event}}}}()return ch, nil
}func parseEvent(line []byte) *ai.Response {// 处理事件流格式if !bytes.HasPrefix(line, []byte("data: ")) {return nil}payload := bytes.TrimPrefix(line, []byte("data: "))if string(payload) == "[DONE]" {return nil}// 解析响应结构var chunk struct {Choices []struct {Delta struct {Content string `json:"content"`}FinishReason string `json:"finish_reason"`}}if err := json.Unmarshal(payload, &chunk); err != nil {return nil}if len(chunk.Choices) > 0 {content := chunk.Choices[0].Delta.ContentfinishReason := chunk.Choices[0].FinishReasonif content != "" {return &ai.Response{Content: content}}if finishReason == "stop" {return nil}}return nil
}

5. 调用使用

func main() {cfg := ai.Config{BaseURL:    "https://api.deepseek.com/",APIKey:     "key",HTTPClient: &http.Client{},}// 初始化deepseekd := deepseek.NewDeepSeek(cfg)// 封装请求体body := ai.Request{Model:    "deepseek-chat",Messages: []ai.Message{{Role: "system", Content: "You are a helpful assistant."}, {Role: "user", Content: "你是谁"}},}// 同步调用chat, err := d.Chat(context.Background(), body)if err != nil {panic(err)}fmt.Println(chat.Content)// 流式调用stream, _ := d.Stream(context.Background(), body)for chunk := range stream {fmt.Printf(chunk.Content)}
}

3.响应实例

// 同步
{"id":"","object":"chat.completion","created":,"model":"deepseek-chat","choices":[{"index":0,"message":{"role":"assistant","content":"您好!我是由中国的深度求索(DeepSeek)公司开发的何任何问题,我会尽我所能为您提供帮助。"},"logprobs":null,"finish_reason":"stop"}],"usage":{"prompt_tokens":10,"completion_tokens":37,"total_tokens":47,"prompt_tokens_details":{"cached_tokens":0},"prompt_cache_hit_tokens":0,"proms":10},"system_fingerprint":"fp_3a5770e1b4"}// 流式
您好!我是由中国的深度求索(DeepSeek)公司开发的智能助手DeepSeek-V3。如您有任何任何问题,我会尽我所能为您提供帮助。

代码地址:https://gitee.com/li-zhuoxuan/go_ai

http://www.rdtb.cn/news/19081.html

相关文章:

  • 电脑最常用的绘图软件有哪些seo公司重庆
  • 网站数据接口怎么做现在最好的免费的建站平台
  • 做内衣的网站微平台推广
  • 包头建设厅官方网站电商网站建设教程
  • 如何做简单网站首页自媒体发布平台
  • 制作网站背景怎么做西安网站seo公司
  • 网站3网合一是怎么做的百度购物平台客服电话
  • 服装模板网站2345浏览器官网
  • 做英文网站日均ip10000今天国际新闻最新消息10条
  • 设计之家官网首页杭州seo网站推广
  • 社交网站设计seo sem什么意思
  • 日本做的视频网站免费推广网站大全下载
  • e通网网站建设站长之家域名查询排行
  • 襄垣城乡建设管理局的网站接广告的平台
  • 鲜花销售管理系统seo类目链接优化
  • 哈尔滨网站开发建设公司企业seo推广外包
  • 新郑龙湖网站建设seo实战密码在线阅读
  • 西安网站公司建设搜索引擎优化的流程
  • 设计网站建设的合同书网络营销服务商有哪些
  • 中纪委网站两学一做 重拾自信seo哪家公司好
  • 广州网站建设oem如何制作公司网页
  • 请问如何做网站营销型网站策划书
  • 山东定制网站建设公司如何免费引流推广
  • java 网站开发实例教程seo代做
  • 行业网站 cms长春网站公司哪家好
  • 门户网站建设为企业带来的好处百度竞价排名广告定价鲜花
  • 有空间与域名后怎么做网站互联网销售是做什么的
  • 西安宝马建设科技股份有限公司网站百度人工
  • 深圳那家做网站好找个免费网站这么难吗
  • 网站建设的内部风险成品网站1688入口网页版怎样