使用 Eino 框架调用 Ark 大模型

1
2
3
使用字节 Eino 框架调用 ark 大模型
ChatTemplate 的使用
大模型流式输出

安装框架依赖

1
2
3
4
go get -v -u github.com/cloudwego/eino-ext/components/model/ark
go get -v -u github.com/cloudwego/eino/components/prompt
go get -v -u github.com/cloudwego/eino/schema
go get -v -u github.com/joho/godotenv

豆包大模型使用配置常量

1
2
3
4
const (
BaseURL = "https://ark.cn-beijing.volces.com/api/v3" // 接口请求地址
ModelName = "doubao-seed-2-1-pro-260628" // 调用模型名称
)
Eino使用ARK大模型实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// 本示例演示了如何使用字节跳动方舟(Ark)大模型 SDK 进行流式对话:
// 1. 初始化 ChatModel 客户端
// 2. 构建并格式化 Prompt 模板
// 3. 通过流式接口 (Stream) 发送请求并实时接收模型响应

func main() {
err := godotenv.Load(".env")
if err != nil {
panic(err)
}

ctx := context.Background()

// 初始化 Ark ChatModel 客户端
chatModel, err := ark.NewChatModel(ctx, &ark.ChatModelConfig{
APIKey: os.Getenv("ARK_API_KEY"), // 方舟(Ark)大模型专用API KEY
BaseURL: BaseURL,
Model: ModelName,
})
if err != nil {
log.Fatalf("failed to create chatModel:%v", err)
}

// 构建 Prompt 模板
template := prompt.FromMessages(
schema.FString,
schema.SystemMessage("你是一位{role}"),
schema.UserMessage("{question}"),
)
// 定义模板变量
// 使用 map[string]any 提供模板中占位符对应的实际值
// "role" 注入到 SystemMessage "question" 注入到 UserMessage
params := map[string]any{
"role": "Gopher",
"question": "请介绍一下 Go语言,列出 Go语言的优点; 另外请介绍一下字节的AI大模型 enio 框架",
}

// 格式化模板 将 params 中的变量替换到模板占位符中
message, err := template.Format(ctx, params)
if err != nil {
log.Fatalf("failed to format template:%v", err)
}

// 以流式方式向模型发送请求
stream, err := chatModel.Stream(ctx, message)
if err != nil {
log.Fatalf("failed to stream message:%v", err)
}
defer stream.Close()

// 循环接收流式响应的每一个 chunk
// stream.Recv() 会阻塞等待下一个数据块到达
for {
chunk, err := stream.Recv()
if err != nil {
if errors.Is(err, io.EOF) {
break
}
log.Fatal(err)
}

// 实时输出当前 chunk 中的文本内容
// 在生产环境中,这里可以将内容写入前端 WebSocket、SSE 连接或 UI 组件
print(chunk.Content)
}
}