一、控制檯配置通義千問密匙
官方操作指南地址
控制檯地址
注意:一個密匙申請之後,官方給了一個月期限共計100萬條Token的額度
二、程式碼階段
1、DashScopRequest 結構體
type EngineRole string const ( EngineRoleUser EngineRole = "user" EngineRoleSystem EngineRole = "system" EngineRoleAssistant EngineRole = "assistant" EngineRoleTool EngineRole = "tool" )
type Message struct { Name string `json:"name"` Role EngineRole `json:"role"` Content string `json:"content"` ToolCalls interface{} `json:"tool_calls"` } type Input struct { Prompt string `json:"prompt"` Messages []Message `json:"messages"` History map[string]string `json:"history"` } type Parameter struct { ResultFormat string `json:"result_format"` //用於指定返回結果的格式 Seed *int64 `json:"seed"` //生成時使用的隨機數種子 MaxTokens *int64 `json:"max_tokens"` //用於限制模型生成token的數量 TopP *float64 `json:"top_p"` //生成時,核取樣方法的機率閾值。 TopK *int64 `json:"top_k"` //生成時,取樣候選集的大小。 RepetitionPenalty *float64 `json:"repetition_penalty"` //用於控制模型生成時連續序列中的重複度 PresencePenalty *float64 `json:"presence_penalty"` //使用者控制模型生成時整個序列中的重複度 Temperature *float64 `json:"temperature"` //用於控制隨機性和多樣性的程度。 Stop interface{} `json:"stop"` //string型別當模型將要生成指定的stop詞語時停止。 EnableSearch *bool `json:"enable_search"` //啟用網際網路搜尋 //IncrementalOutput bool `json:"incremental_output"` //控制在流式輸出模式下是否開啟增量輸出 //Tools interface{} `json:"tools"` //ToolChoice interface{} `json:"tool_choice"` } type DashScopeRequest struct { Model string `json:"model"` Input Input `json:"input"` Parameters Parameter `json:"parameters"` }
2、DashResponse結構體
type Usage struct { TotalTokens int `json:"total_tokens"` OutputTokens int `json:"output_tokens"` InputTokens int `json:"input_tokens"` } type Choice struct { FinishReason string `json:"finish_reason"` Message Message `json:"message"` } type Output struct { Text string `json:"text"` FinishReason string `json:"finish_reason"` Choices []Choice `json:"choices"` } type DashScopeResponse struct { Output Output `json:"output"` Usage Usage `json:"usage"` RequestId string `json:"request_id"` }
3、DashScopErr 結構體
type DashScopeErr struct { Code string `json:"code"` Message string `json:"message"` RequestID string `json:"request_id"` }
4、核心方法
var DashScopeUrl = "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation"
func TongYiHttp(ctx context.Context, request DashScopeRequest) (*DashScopeResponse, *DashScopeErr, error) { // 構建請求 payload, err := json.Marshal(request) if err != nil { return nil, nil, err } req, err := http.NewRequest("POST", DashScopeUrl, bytes.NewBuffer(payload)) if err != nil { return nil, nil, err } // 設定請求頭部 req.Header.Set("Authorization", "YOUR API KEY") //就是你的API-KEY req.Header.Set("Content-Type", "application/json") // 傳送請求 client := &http.Client{} resp, err := client.Do(req) if err != nil { return nil, nil, err } defer resp.Body.Close() // 檢查HTTP響應狀態碼是否為200 if resp.StatusCode != http.StatusOK { var errResp DashScopeErr err = json.NewDecoder(resp.Body).Decode(&errResp) if err != nil { return nil, nil, err } return nil, &errResp, nil } // 讀取響應資料 response := DashScopeResponse{} err = json.NewDecoder(resp.Body).Decode(&response) if err != nil { return nil, nil, err } return response, nil, nil }
三、呼叫測試(多輪對話),我使用了一個預設的大語言模型
func TestDashScope(t *testing.T) { // 構建請求資料 ctx := context.Background() request := DashScopeRequest{ Model: "qwen-turbo", Input: Input{ Messages: []Message{ { Role: EngineRoleUser, Content: "1+1=?", }, { Role: EngineRoleAssistant, Content: "2", }, { Role: EngineRoleUser, Content: "2+1=?", }, { Role: EngineRoleAssistant, Content: "3", }, { Role: EngineRoleUser, Content: "幫我總結我們之間的對話", }, }, }, Parameters: Parameter{ ResultFormat: "message", }, } tyResp, _, _ := TongYiHttp(ctx, request) fmt.Println(tyResp.Output) }
同時自己玩的時候發現一個比較明顯的缺點,如果你問簡單問題響應在幾百毫秒之內,涉及到複雜一點或者多輪對話響應時間明顯增加。
要做特定業務方向的話得進行模型定製以及自己喂資料訓練(仁者見仁,智者見智了)