package openai import ( "bytes" "encoding/json" "io" "net/http" ) // Adapter OpenAI 协议适配器(透传) type Adapter struct{} // NewAdapter 创建 OpenAI 适配器 func NewAdapter() *Adapter { return &Adapter{} } // PrepareRequest 准备发送给供应商的请求(透传) func (a *Adapter) PrepareRequest(req *ChatCompletionRequest, apiKey, baseURL string) (*http.Request, error) { // 序列化请求体 body, err := json.Marshal(req) if err != nil { return nil, err } // 创建 HTTP 请求 // baseURL 已包含版本路径(如 /v1 或 /v4),只需添加端点路径 httpReq, err := http.NewRequest("POST", baseURL+"/chat/completions", bytes.NewReader(body)) if err != nil { return nil, err } // 设置请求头 httpReq.Header.Set("Content-Type", "application/json") httpReq.Header.Set("Authorization", "Bearer "+apiKey) return httpReq, nil } // ParseResponse 解析供应商响应(透传) func (a *Adapter) ParseResponse(resp *http.Response) (*ChatCompletionResponse, error) { body, err := io.ReadAll(resp.Body) if err != nil { return nil, err } defer resp.Body.Close() var result ChatCompletionResponse err = json.Unmarshal(body, &result) if err != nil { return nil, err } return &result, nil } // ParseErrorResponse 解析错误响应 func (a *Adapter) ParseErrorResponse(resp *http.Response) (*ErrorResponse, error) { body, err := io.ReadAll(resp.Body) if err != nil { return nil, err } defer resp.Body.Close() var result ErrorResponse err = json.Unmarshal(body, &result) if err != nil { return nil, err } return &result, nil } // ParseStreamChunk 解析流式响应块 func (a *Adapter) ParseStreamChunk(data []byte) (*StreamChunk, error) { var chunk StreamChunk err := json.Unmarshal(data, &chunk) if err != nil { return nil, err } return &chunk, nil }