import (

"context"

"net/http"



"ISC/tools/app"



"github.com/hertz-contrib/sse"



ollama "github.com/cloudwego/eino-ext/components/model/ollama"



openai "github.com/cloudwego/eino-ext/components/model/openai"



"github.com/cloudwego/eino/schema"

happ "github.com/cloudwego/hertz/pkg/app"

)



func LLMGetDSlocal(ctx context.Context, c *happ.RequestContext) {



type Rq struct {

Msg string

}

var data Rq

err := c.Bind(&data)



if err != nil {

app.Error(c, -1, err, "")

return

}



c.SetStatusCode(http.StatusOK)

c.Response.Header.Set("X-Accel-Buffering", "no")

s := sse.NewStream(c)



client, err := ollama.NewChatModel(ctx, &ollama.ChatModelConfig{

BaseURL: "http://localhost:11434", // Ollama 服务地址

Model: "qwen3:4b", // 模型名称

})



if err != nil {

panic(err)

}



// 准备消息

messages := []*schema.Message{

schema.UserMessage(data.Msg),

}



// 获取流式回复

stream, err := client.Stream(ctx, messages)

if err != nil {

println(err)

app.Error(c, -1, err, "")

}

defer stream.Close() // 注意关闭 reader



// 处理流式内容

for {

chunk, err := stream.Recv()

if err != nil {

app.Error(c, -1, err, "")

break

}

print(chunk.Content)



//sse 发送

event := &sse.Event{

Event: "timestamp",

Data: []byte(chunk.Content),

}

err = s.Publish(event)



if err != nil {

app.Error(c, -1, err, "")

return

}



}



}



var API_KEY = "sk-950*******" 



func LLMGetDSOnline(ctx context.Context, c *happ.RequestContext) {



type Rq struct {

Msg string

}

var data Rq

err := c.Bind(&data)



if err != nil {

app.Error(c, -1, err, "")

return

}



c.SetStatusCode(http.StatusOK)

c.Response.Header.Set("X-Accel-Buffering", "no")

s := sse.NewStream(c)



client, err := openai.NewChatModel(ctx, &openai.ChatModelConfig{



BaseURL: "https://api.deepseek.com", //  基础 URL



// 基础配置

APIKey: API_KEY, // API 密钥



Model: "deepseek-chat", // required

})



// 准备消息

messages := []*schema.Message{

schema.UserMessage(data.Msg),

}



// 获取流式回复

stream, err := client.Stream(ctx, messages)

if err != nil {

println(err)

app.Error(c, -1, err, "")

}

defer stream.Close() // 注意关闭 reader



// 处理流式内容

for {

chunk, err := stream.Recv()

if err != nil {

app.Error(c, -1, err, "")

break

}

print(chunk.Content)



//sse 发送

event := &sse.Event{

Event: "timestamp",

Data: []byte(chunk.Content),

}

err = s.Publish(event)



if err != nil {

app.Error(c, -1, err, "")

return

}



}



}

Logo

加入社区!打开量化的大门,首批课程上线啦!

更多推荐