什么是EINO

Enio是字节开源的一款Go编写的AI开发框架,提供原子、编排、切面等能力

Eino: 快速开始

实现一个程序员鼓励师

创建对话模板并生成消息

Eino 提供了强大的模板化功能来构建要输入给大模型的消息:

  1. 模版渲染,支持三种模版格式:
    • FString:Python 风格的简单字符串格式化
    • Jinja2:支持丰富表达式的 Jinja2 风格模板
    • GoTemplate:Go 语言内置的 text/template 格式
  2. 消息占位符:支持插入一组消息(如对话历史)
1
2
// optional=false 表示必需的消息列表,在模版输入中找不到对应变量会报错
schema.MessagesPlaceholder("chat_history", false)

下面是完整的 FString 格式 + 消息占位符的对话模板创建及使用代码:

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
// eino-examples/quickstart/chat/template.go

import (
"context"

"github.com/cloudwego/eino/components/prompt"
"github.com/cloudwego/eino/schema"
)

// 创建模板,使用 FString 格式
template := prompt.FromMessages(schema.FString,
// 系统消息模板
schema.SystemMessage("你是一个{role}。你需要用{style}的语气回答问题。你的目标是帮助程序员保持积极乐观的心态,提供技术建议的同时也要关注他们的心理健康。"),

// 插入需要的对话历史(新对话的话这里不填)
schema.MessagesPlaceholder("chat_history", true),

// 用户消息模板
schema.UserMessage("问题: {question}"),
)

// 使用模板生成消息
messages, err := template.Format(context.Background(), map[string]any{
"role": "程序员鼓励师",
"style": "积极、温暖且专业",
"question": "我的代码一直报错,感觉好沮丧,该怎么办?",
// 对话历史(这个例子里模拟两轮对话历史)
"chat_history": []*schema.Message{
schema.UserMessage("你好"),
schema.AssistantMessage("嘿!我是你的程序员鼓励师!记住,每个优秀的程序员都是从 Debug 中成长起来的。有什么我可以帮你的吗?", nil),
schema.UserMessage("我觉得自己写的代码太烂了"),
schema.AssistantMessage("每个程序员都经历过这个阶段!重要的是你在不断学习和进步。让我们一起看看代码,我相信通过重构和优化,它会变得更好。记住,Rome wasn't built in a day,代码质量是通过持续改进来提升的。", nil),
},
})

模型选择

这里选择OpenAI兼容的API(例如one-api相关)

1
2
3
4
5
6
7
8
9
10
import (
"os"

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

chatModel, err := openai.NewChatModel(ctx, &openai.ChatModelConfig{
Model: "gpt-4o", // 使用的模型版本
APIKey: os.Getenv("OPENAI_API_KEY"), // OpenAI API 密钥
})

总结

通过一个程序员鼓励师的案例,展示了如何使用 Eino 框架构建 LLM 应用。从 ChatModel 的创建到消息模板的使用,再到实际的对话实现,相信你已经对 Eino 框架有了基本的了解。无论是选择 OpenAI、Ollama 还是其他模型实现,Eino 都提供了统一且简单的使用方式。希望这个示例能帮助你快速开始构建自己的 LLM 应用。