Go调用通义千问API需手动构造HTTP请求:使用指定base_url、Bearer认证(含空格)、正确模型名、input.prompt+小写key的history数组结构,分结构解析200成功响应与错误响应,严禁共用struct解码。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要用 Go 语言调用通义千问 API 实现文本生成,必须绕过官方未提供 Go SDK 的限制,手动构造符合 DashScope 协议的 HTTP 请求——漏掉 Bearer 前缀、拼错模型名或传错 history 结构,都会直接返回 401 或 InvalidParameter 错误。
获取并安全配置 API Key
进入阿里云百炼控制台 → 左侧导航栏点击「密钥管理」→ 右上角「创建 API-Key」→ 填写名称(如“go-dev”)并确认 → 系统生成以 【sk-开头的字符串】,仅此一次完整可见,立即复制保存到本地加密文件或密码管理器中;切勿写死在代码里,否则提交 Git 后可能被自动扫描盗刷额度。
在终端设置环境变量:export DASHSCOPE_API_KEY="sk-xxx"(Linux/macOS)或 set DASHSCOPE_API_KEY=sk-xxx(Windows),之后可通过 os.Getenv("DASHSCOPE_API_KEY") 安全读取。
构造标准请求体与 Header
Go 调用必须严格使用 DashScope 原生接口地址:https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation,不是 OpenAI 兼容地址。
Header 中必须包含三项:Authorization: Bearer sk-xxx(注意 Bearer 后带空格)、Content-Type: application/json、Accept: application/json。少任意一项,服务端会直接拒绝。
请求体 JSON 结构必须是 DashScope 特有格式:外层 model 字段(如 "qwen-plus",大小写敏感),input.prompt 为非空字符串,input.history 若存在,必须是 []map[string]string 类型且 key 全小写({"role":"user","content":"xxx"}),不能传 OpenAI 风格的 messages 数组。
若需调节生成温度,parameters.temperature 必须是 float64 类型(如 0.8),传整数 0 会触发 InvalidParameter.Temperature 报错。
统一LLM网关 - 一个API对接70+AI模型,使用单一API密钥即可调用GPT、Claude、Gemini、Qwen、Deepseek、Grok等主流模型。
发起请求并区分解析响应
第一步:用 http.NewRequest("POST", url, bytes.NewReader(payload)) 构造请求,设置好 Header。
第二步:执行 client.Do(req),拿到 *http.Response 后立刻检查 resp.StatusCode —— 只有 200 才表示成功,其他状态码一律按错误响应处理。
第三步:成功响应结构为 {"output":{"text":"xxx"},"usage":{"input_tokens":12,"output_tokens":34},"request_id":"xxx"};失败响应则是 {"code":"InvalidParameter.Model","message":"模型名不合法","request_id":"xxx"}。二者字段完全不同,【绝不可共用一个 struct 解析】,否则会 panic。
第四步:定义两个独立结构体 TongYiSuccessRsp 和 TongYiErrorRsp,根据 status code 分别解码;最后别忘了 defer resp.Body.Close(),否则连接池耗尽会导致后续请求卡死。
用封装库快速启动(可选)
方法一:引入轻量封装库 go-easy-llm,执行 go get github.com/soryetong/go-easy-llm。
方法二:初始化配置 config := easyllm.DefaultConfig(os.Getenv("DASHSCOPE_API_KEY"), easyai.ChatTypeQWen),再创建客户端 client := easyllm.NewChatClient(config)。
方法三:调用 resp, reply, err := client.NormalChat(ctx, &easyai.ChatRequest{Model: easyai.ChatModelQWenPlus, Message: "你好"}),reply 即为返回文本,自动处理了 header、body、error 分支和 request_id 提取。

















