eino 采用一套框架实现 本地大模型和deepseek api 访问
·
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
}
}
}
更多推荐




所有评论(0)