什么是EINO
Enio是字节开源的一款Go编写的AI开发框架,提供原子、编排、切面等能力
Eino: 快速开始
实现一个程序员鼓励师
创建对话模板并生成消息
Eino 提供了强大的模板化功能来构建要输入给大模型的消息:
- 模版渲染,支持三种模版格式:
- FString:Python 风格的简单字符串格式化
- Jinja2:支持丰富表达式的 Jinja2 风格模板
- GoTemplate:Go 语言内置的 text/template 格式
- 消息占位符:支持插入一组消息(如对话历史)
1 2
| 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
|
import ( "context"
"github.com/cloudwego/eino/components/prompt" "github.com/cloudwego/eino/schema" )
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"), })
|
总结
通过一个程序员鼓励师的案例,展示了如何使用 Eino 框架构建 LLM 应用。从 ChatModel 的创建到消息模板的使用,再到实际的对话实现,相信你已经对 Eino 框架有了基本的了解。无论是选择 OpenAI、Ollama 还是其他模型实现,Eino 都提供了统一且简单的使用方式。希望这个示例能帮助你快速开始构建自己的 LLM 应用。
Author:
Appl3s
Permalink:
https://appl3s.github.io/2025/04/14/golang-eino/
License:
Copyright (c) 2025 CC-BY-NC-4.0 LICENSE
Slogan:
Do you believe in DESTINY?