package main
import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/r3labs/sse/v2"
"net/http"
"net/url"
"strings"
)
func main() {
r := gin.Default()
r.Use(func(c *gin.Context) {
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE")
c.Writer.Header().Set("Access-Control-Allow-Headers", "Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")
})
r.POST("/stream", ChatGPTSSE)
r.Run(":8080")
}
func ChatGPTSSE(c *gin.Context) {
fmt.Println("开始调用")
c.Status(http.StatusOK)
c.Header("Content-Type", "text/event-stream")
c.Writer.Flush()
client := &http.Client{
Transport: &http.Transport{
Proxy: func(req *http.Request) (*url.URL, error) {
proxyURL, err := url.Parse("http://127.0.0.1:7890")
if err != nil {
return nil, err
}
return proxyURL, nil
},
},
}
sseClient := sse.NewClient("https://api.openai.com/v1/chat/completions")
sseClient.Connection = client
reqBody := strings.NewReader(`{"model": "gpt-3.5-turbo","messages": [{"role": "user", "content": "你的版本是多少"}],"stream": true}`)
sseClient.Body = reqBody
sseClient.Method = "POST"
headers := make(map[string]string)
headers["Authorization"] = "Bearer YOUR_TOKEN"
headers["Content-Type"] = "application/json"
sseClient.Headers = headers
err := sseClient.SubscribeRaw(func(msg *sse.Event) {
fmt.Printf("Received event: %v\n", string(msg.Data))
fmt.Fprintf(c.Writer, "data: %s\n\n", string(msg.Data))
c.Writer.Flush()
})
if err != nil {
return
}
fmt.Println("结束调用")
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?