阿里云平台 dashscope api 的 golang 封装 (非官方)
Install:
go get -u github.com/devinyf/dashscopego
import (
"context"
"fmt"
"os"
"github.com/devinyf/dashscopego"
"github.com/devinyf/dashscopego/qwen"
)
func main() {
// 定义 Model,API-KEY, 请求客户端
model := qwen.QwenTurbo
token := os.Getenv("DASHSCOPE_API_KEY")
if token == "" {
panic("token is empty")
}
cli := dashscopego.NewTongyiClient(model, token)
/*
* 开启流式输出:
* 通过该 Callback Function 获取流式输出的结果, 如果没有定义该回调函数则默认使用非流式输出
* 流式输出结果的 request_id/finish_reason/token_usage 等信息在调用完成后返回的 resp 结果中统一获取
*/
streamCallbackFn := func(ctx context.Context, chunk []byte) error {
// 也可以通过外部定义的 channel 将结果传递出去
fmt.Print(string(chunk))
return nil
}
// 定义请求内容.
// 请求具体字段说明请查阅官方文档的 'HTTP调用接口' 部分.
content := qwen.TextContent{Text: "讲个冷笑话"}
input := dashscopego.TextInput{
Messages: []dashscopego.TextMessage{
{Role: qwen.RoleUser, Content: &content},
},
}
req := &dashscopego.TextRequest{
Input: input, // 请求内容
StreamingFn: streamCallbackFn, // 流式输出的回调函数, 默认为 nil, 表示不使用流式输出.
}
// 发送请求.
ctx := context.TODO()
resp, err := cli.CreateCompletion(ctx, req)
if err != nil {
panic(err)
}
/*
获取结果.
详细字段说明请查阅 'HTTP调用接口 -> 出参描述'.
如果request中没有定义流式输出的回调函数 StreamingFn, 则使用此方法获取应答内容.
*/
fmt.Println(resp.Output.Choices[0].Message.Content.ToString())
// 获取 RequestcID, Token 消耗, 结束标识等信息
fmt.Println(resp.RequestID)
fmt.Println(resp.Output.Choices[0].FinishReason)
fmt.Println(resp.Usage.TotalTokens)
}