前言
腾讯元器 是腾讯混元大模型团队推出的智能体创作工具,方便您通过添加提示词设定、插件、知识库等功能捏出自己喜欢的智能体。除了在官网直接与智能体交互以外,还支持通过 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
请求的结果以流式响应。 除了上面这两个方法之外,还提供了设置请求参数的方法如WithStream
和AddMessages
等。SessionResponse
:API
会话响应结构体,用于存储腾讯元器API
的响应信息。HttpErrorResponse
:API
会话非正常响应结构体,实现了Error
接口,用于存储HTTP
Status
和StatusCode
以及Body
信息。当HTTP StatusCode
不为 200 时,Request
或StreamRequest
将返回一个HttpErrorResponse
实例作为错误。
使用 yuanqi
库调用腾讯元器 API
流程如下所示:
小结
本文对 go-yuanqi
库进行了详细介绍,包括其功能、安装方法、基本用法以及核心实现解析。
如 go-yuanqi
库有设计不妥之处,欢迎提交 Issue
或 Pr
进行探讨。
github 地址:https://github.com/chenmingyong0423/go-yuanqi
我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!