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

2024-06-15 07:45:04 浏览数 (2)

前言

腾讯元器 是腾讯混元大模型团队推出的智能体创作工具,方便您通过添加提示词设定、插件、知识库等功能捏出自己喜欢的智能体。除了在官网直接与智能体交互以外,还支持通过 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腾讯技术创作特训营最新征文,快来和我瓜分大奖!

0 人点赞