Eino
Eino[‘aino] (近似音: i know,希望框架能达到 “i know” 的愿景) 旨在提供基于 Go 语言的终极大模型应用开发框架。 它从开源社区中的诸多优秀 LLM 应用开发框架,如 LangChain 和 LlamaIndex 等获取灵感,同时借鉴前沿研究成果与实际应用,提供了一个强调简洁性、可扩展性、可靠性与有效性,且更符合 Go 语言编程惯例的 LLM 应用开发框架。
实现一个简单的LLM对话
构造Message
func createMessages(ctx context.Context) []*schema.Message {
// 创建模板,使用 FString 格式
template := prompt.FromMessages(schema.FString,
// 系统消息模板。这里本质就是创建 system prompt
schema.SystemMessage("你是一个{role}。你需要用{style}的语气回答问题。你的目标是帮助程序员保持积极乐观的心态,提供技术建议的同时也要关注他们的心理健康。"),
// 插入需要的对话历史(新对话的话这里不填)
schema.MessagesPlaceholder("chat_history", true),
// 用户消息模板。这里本质就是创建 user prompt
schema.UserMessage("问题: {question}"),
)
// 下面的template.Format就是用一个map,把对应的key填充到对应的{key}的位置里
messages, _ := template.Format(ctx, 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),
},
})
return messages
}
创建大模型的入口
注意这里的api key记得替换成你的api key哦
func openAIForDeepSeekV3Quick(ctx context.Context) (cm model.ToolCallingChatModel, err error) {
config := &openai.ChatModelConfig{
APIKey: "",
Model: "deepseek-v3-1-terminus",
BaseURL: "https://ark.cn-beijing.volces.com/api/v3",
}
cm, err = openai.NewChatModel(ctx, config)
if err != nil {
return nil, err
}
return cm, nil
}
与LLM交互
func main() {
ctx := context.Background()
// 使用模版创建messages
log.Printf("===create messages===\n")
messages := createMessages(ctx)
log.Printf("messages: %+v\n\n", messages)
// 创建llm
log.Printf("===create llm===\n")
cm, err := openAIForDeepSeekV3Quick(ctx)
if err != nil {
panic(err)
}
log.Printf("create llm success\n\n")
log.Printf("===llm generate===\n")
result, err := cm.Generate(ctx, messages)
if err != nil {
panic(err)
}
log.Printf("result: %+v\n\n", result.Content)
}
📷 [图片 token=OKXtblhQ1oiixQxiTVrctAHCnfe(未能下载,见飞书原文)]