Eino Guide —— LLM 应用开发指南

面向专业 Go 开发者的从入门到深入的 Eino 开发手册。通过简洁文字与带解释说明的代码片段,帮助你快速上手并逐步掌握编排、智能体、流式处理、调试与生产实践。

目录


1. 概览与定位


2. 快速上手

2.1 安装与准备

cfg := Config{APIKey: "<安全来源>"}
model, _ := openai.NewChatModel(ctx, cfg)
messages := []*Message{
    SystemMessage("你是一名乐于助人的助手"),
    UserMessage("未来的 AI 应用会是什么样?"),
}
resp, _ := model.Generate(ctx, messages)

2.2 使用 Chain 组合模板与模型

chain, _ := NewChain[map[string]any, *Message]().
           AppendChatTemplate(prompt).
           AppendChatModel(model).
           Compile(ctx)
out, _ := chain.Invoke(ctx, map[string]any{"query": "你的名字是?"})

3. 编排基础(Chain / Graph / Workflow)

3.1 Chain:最简有向链

ch, _ := NewChain[map[string]any, *Message]().
    AppendChatTemplate(prompt).
    AppendChatModel(chatModel).
    Compile(ctx)
out, _ := ch.Invoke(ctx, map[string]any{"query": "今天天气如何?"})

3.2 Graph:灵活的有向图(支持循环)

g := NewGraph[map[string]any, *Message]()
_ = g.AddChatTemplateNode("node_template", chatTpl)
_ = g.AddChatModelNode("node_model", chatModel)
_ = g.AddToolsNode("node_tools", tools)
_ = g.AddLambdaNode("node_converter", takeOne)
_ = g.AddEdge(START, "node_template")
_ = g.AddEdge("node_template", "node_model")
_ = g.AddBranch("node_model", branch)
_ = g.AddEdge("node_tools", "node_converter")
_ = g.AddEdge("node_converter", END)
compiled, _ := g.Compile(ctx)
_, _ := compiled.Invoke(ctx, map[string]any{"query": "周末北京天气"})

3.3 Workflow:字段级映射的非循环图

wf := NewWorkflow[[]*schema.Message, *schema.Message]()
wf.AddChatModelNode("model", m).AddInput(START)
wf.AddLambdaNode("lambda1", InvokableLambda(lambda1)).
    AddInput("model", MapFields("Content", "Input"))
wf.AddLambdaNode("lambda2", InvokableLambda(lambda2)).
    AddInput("model", MapFields("Role", "Role"))
wf.AddLambdaNode("lambda3", InvokableLambda(lambda3)).
    AddInput("lambda1", MapFields("Output", "Query")).
    AddInput("lambda2", MapFields("Output", "MetaData"))
wf.End().AddInput("lambda3")
r, _ := wf.Compile(ctx)
_, _ := r.Invoke(ctx, []*schema.Message{ schema.UserMessage("kick start this workflow!") })

4. 智能体(ReAct Agent)与工具(Tool)

4.1 ReAct Agent 概览

4.2 示例:简单的 ReAct Agent

tools := []Tool{WeatherTool{}}
agent := flowagentreact.New(chatModel, tools)
out, _ := agent.Invoke(ctx, []*Message{ UserMessage("这个周末北京天气?") })

4.3 自定义 Tool 设计要点


5. 流式与并发

stream, _ := chatModel.GenerateStream(ctx, []*Message{UserMessage("讲一个短故事")})
for chunk := range stream.Ch() {
    fmt.Print(chunk.Content)
}
_ = stream.Err()

6. 可靠性与调试(错误、超时、追踪与评估)

ctxWithTimeout, cancel := context.WithTimeout(ctx, 5*time.Second)
defer cancel()
out, err := r.Invoke(ctxWithTimeout, In{})

7. 生产实践(配置、部署、安全)


8. 进阶主题(循环图、多模型、性能优化)

if role == "draft" { return fast }
return accurate

9. 测试与评估

return "question", nil

10. API 速查与参考链接


11. 与 Google ADK 的对比

定位与语言

编排与架构

流式与工具

DevOps/MLOps

优劣势(简述)

选择建议

总结

附录:实践建议速览

APPENDIX. 参考

— 本文档示例为概念性代码,导入路径与具体类型以所选版本与适配器的实际实现为准;涉及密钥的部分请务必通过安全的配置来源注入并进行合规处理。