环境准备
-
Go 环境:确保已安装 Go 1.18 或更高版本。
-
Ark API Key:前往 Ark 平台 注册并获取 API Key,选择开通所有模型即可,有免费额度。(注意:API Key要绝对保密)
-
取到API Key之后放入环境变量,不会放就先随便找个地方放一下,不要找不到就行。
-
项目初始化:
bash
go mod init eino-quickstart
安装 Eino 及相关组件
github.com/cloudwego/eino:Eino 框架核心github.com/cloudwego/eino-ext/components/model/ark:Ark 模型适配器
执行以下命令:
bash
go get github.com/cloudwego/eino
go get github.com/cloudwego/eino-ext/components/model/ark
编写代码
创建一个 main.go 文件:
go
package main
import (
"context"
"log"
"os"
"sync"
"github.com/cloudwego/eino-ext/components/model/ark" // Ark 模型实现
"github.com/cloudwego/eino/schema" // Eino 核心数据结构
)
这里先定义一下模型实例,使用 sync.Once 保证单例初始化,
var (
arkModel *ark.ChatModel
once sync.Once
// 模型调用参数(非必须参数,可根据需要调整)
maxTokens = 1500 // 最大输出 token 数
topP = float32(0.9) // 核采样概率阈值
)
开始初始化模型
func main() {
ctx := context.Background()
// 使用 sync.Once 确保模型只初始化一次
once.Do(func() {
var err error
// 创建 Ark 聊天模型实例
arkModel, err = ark.NewChatModel(ctx, &ark.ChatModelConfig{
APIKey: os.Getenv("ARK_API_KEY"), // Required:从环境变量读取 API Key
// 要么直接以string形式明文写入
Model: "doubao-seed-2-0-code-preview-260215", // Required:模型名称
MaxTokens: &maxTokens, // 可选:最大输出 token
TopP: &topP, // 可选:采样阈值
})
if err != nil {
log.Fatal("Ark 模型初始化失败: ", err)
}
})
定义消息结构体schema.message,构造用户消息
必选:Role(谁发送的?User还是Assistant还是别的什么)还有Content(消息具体内容)
userMessage := &schema.Message{
Role: schema.User,
Content: "怎么使用Eino框架与ark模型对话,给我一个最简单的方案",
}
调用模型的 Stream 方法,流式输出(一块一块输出)
model.Stream返回的是一个schema.StreamReader, 它提供了一个一个统一的Recv方法,我们不用管怎么实现的,只需要知道Recv返回的是chunk,可以直接print(chunk.Content)
streamReader, err := arkModel.Stream(ctx, []*schema.Message{userMessage})
if err != nil {
panic(err)
}
defer streamReader.Close() // 确保关闭流
// 逐块接收并打印回复内容
for {
chunk, err := streamReader.Recv()
if err != nil {
// 流结束或发生错误时退出循环
break
}
print(chunk.Content) // 打印当前块的内容
}
}
结束,运行