devinyf / dashscopego

Tongyi Qwen Aliyun Dashscope API Golang implementation, non-official
MIT License
18 stars 5 forks source link
dashscope-sdk qwen-api tongyi

dashscopego

阿里云平台 dashscope api 的 golang 封装 (非官方)

开通DashScope并创建API-KEY

Install:

go get -u github.com/devinyf/dashscopego

功能列表 & Examples:

通义千问


基本说明:

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)
}