前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >轻松调用腾讯元器 API:我用 Go 语言封装了一个库

轻松调用腾讯元器 API:我用 Go 语言封装了一个库

原创
作者头像
陈明勇
修改2024-06-15 07:45:04
2062
修改2024-06-15 07:45:04
举报

前言

腾讯元器 是腾讯混元大模型团队推出的智能体创作工具,方便您通过添加提示词设定、插件、知识库等功能捏出自己喜欢的智能体。除了在官网直接与智能体交互以外,还支持通过 API 方式与智能体进行交互。

在使用 API 进行交互时,我们需要封装各种请求参数,编写 http 调用的代码,解析响应参数,这个过程需要写大量的代码,过于繁琐。基于这个背景,我封装了 go-yuanqi 库,让开发者简洁,轻松调用腾讯元器 API

在与 API 进行交互时,我们需要封装各种请求参数、编写 HTTP 调用的代码、解析响应参数,这一过程需要编写大量的代码,十分繁琐。基于此,我开发了 go-yuanqi 库,让开发者可以更高效、更简洁地调用腾讯元器 API

go-yuanqi 库

go-yuanqi 库是一个用于简化腾讯元器 API 调用的库,通过这个库,开发者可以更高效,更简洁地与腾讯元器 API 交互,减少重复代码,提高开发效率。

github 地址:https://github.com/chenmingyong0423/go-yuanqi

功能

  • 链式调用
    • 通过链式调用的方式封装请求参数和调用接口,使代码更加简洁和可读。
  • 非流式 API 交互
    • 适用于一次性获取数据的场景。例如当 stream 参数指定为 false 的场景。
  • 流式 API 交互
    • 支持处理流式响应,例如当 stream 参数被指定为 true 的场景。

快速开始

安装

代码语言:shell
复制
go get github.com/chenmingyong0423/go-yuanqi

使用

非流式 API 交互

代码语言:go
复制
// 创建一个聊天对象
chat := yuanqi.NewChat("assistantId", "userId", "token", yuanqi.WithAssistantVersion(""), yuanqi.WithTimeOut(10*time.Second))

// 创建新的会话对象并设置会话流和类型
session := chat.Chat().WithStream(false).WithChatType("published")

// 创建消息内容
// - 文字消息
textContent := yuanqi.NewContentBuilder().Text("你好").Build()
// 图片消息
imageContent := yuanqi.NewContentBuilder().FileUrl(yuanqi.NewFileBuilder().Type("image").Url("https://domain/1.jpg").Build()).Build()
// 创建消息
message := yuanqi.NewMessageBuilder().
    Role("user").
    Content(textContent, imageContent).Build()

// 添加消息并发送以及处理错误
resp, err := session.AddMessages(message).Request(context.Background())

非流式 API 交互需要调用 Request 方法,该方法会返回一个 SessionResponse 对象和一个 error 对象。

流式 API 交互

代码语言:go
复制
// 创建一个聊天对象
chat := yuanqi.NewChat("assistantId", "userId", "token", yuanqi.WithAssistantVersion(""), yuanqi.WithTimeOut(10*time.Second))

// 创建新的会话对象并设置会话流和类型
session := chat.Chat().WithStream(true).WithChatType("published")

// 创建消息内容
// - 文字消息
textContent := yuanqi.NewContentBuilder().Text("你好").Build()
// 图片消息
imageContent := yuanqi.NewContentBuilder().FileUrl(yuanqi.NewFileBuilder().Type("image").Url("https://domain/1.jpg").Build()).Build()
// 创建消息
message := yuanqi.NewMessageBuilder().
    Role("user").
    Content(textContent, imageContent).Build()

// 添加消息并发送以及处理错误
respChan, errChan := session.AddMessages(message).StreamRequest(context.Background())
for {
    select {
    case resp, ok := <-respChan:
        if !ok {
            respChan = nil
        } else {
            fmt.Println(resp)
        }
    case err, ok := <-errChan:
        if !ok {
            errChan = nil
        } else {
            panic(err)
        }
    }
    if respChan == nil && errChan == nil {
        break
    }
}

流式 API 交互需要调用 StreamRequest 方法,该方法会返回一个 chan SessionResponse 对象和一个 chan error 对象。

核心实现解析

yuanqi 库包含四个核心的结构体:

  • Chat:聊天结构体,用于存储聊天所需要的主要信息,如 AssistantId(助手 ID)、UserId(用户 ID,调用者业务侧的用户 ID)、Token(调用 API 所需的 Token 凭证)、AssistantVersion(助手版本 )。Chat 结构体提供了一个 Session 方法,用于创建一个会话实例。
  • Session:会话结构体,用于封装一次会话的请求信息和发起会话请求。请求信息如 Chat 结构体所有信信息、Stream(是否以流式接口的形式返回数据)、ChatType(会话类型)、Messages(会话内容)。 发起会话请求有两个方法: - Request:非流式请求,适用于一次性获取数据的场景。 - StreamRequest:流式请求,API 请求的结果以流式响应。 除了上面这两个方法之外,还提供了设置请求参数的方法如 WithStreamAddMessages 等。
  • SessionResponseAPI 会话响应结构体,用于存储腾讯元器 API 的响应信息。
  • HttpErrorResponseAPI 会话非正常响应结构体,实现了 Error 接口,用于存储 HTTP StatusStatusCode 以及 Body 信息。当 HTTP StatusCode 不为 200 时,RequestStreamRequest 将返回一个 HttpErrorResponse 实例作为错误。

使用 yuanqi 库调用腾讯元器 API 流程如下所示:

小结

本文对 go-yuanqi 库进行了详细介绍,包括其功能、安装方法、基本用法以及核心实现解析。

go-yuanqi 库有设计不妥之处,欢迎提交 IssuePr 进行探讨。

github 地址:https://github.com/chenmingyong0423/go-yuanqi

我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • go-yuanqi 库
    • 功能
    • 快速开始
      • 安装
        • 使用
          • 非流式 API 交互
          • 流式 API 交互
      • 核心实现解析
      • 小结
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档