{"id":"7545cf53-ec53-414b-9684-3bd9abd23d7c","shortId":"KzMdP7","kind":"skill","title":"eino","tagline":"Eino LLM/AI application development framework assistant (Golang). Use when the user needs to: (1) Build AI agents, (2) Create LLM applications, (3) Implement tool calling, (4) Build multi-agent systems, (5) Create workflows with Graph/Compose, (6) Implement streaming, (7) Human-i","description":"# Eino 框架开发指南\n\nEino 是字节跳动开源的 Golang LLM/AI 应用开发框架，专注于 Agent 开发、工作流编排、工具调用。\n\n## 环境要求\n\n- **Go 版本**: 1.18+\n- **代码规范**: golangci-lint\n\n## 快速开始\n\n### 安装\n\n```bash\ngo get github.com/cloudwego/eino\ngo get github.com/cloudwego/eino-ext\n```\n\n### 项目初始化\n\n```bash\n# 创建项目\nmkdir my-eino-app && cd my-eino-app\ngo mod init my-eino-app\n\n# 安装依赖\ngo get github.com/cloudwego/eino\ngo get github.com/cloudwego/eino-ext/components/model/openai\n```\n\n## 核心示例\n\n### 1. ChatModelAgent（基础 Agent）\n\n最简单的对话 Agent：\n\n```go\npackage main\n\nimport (\n    \"context\"\n    \"fmt\"\n    \"os\"\n\n    \"github.com/cloudwego/eino-ext/components/model/openai\"\n    \"github.com/cloudwego/eino/adk\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    // 配置 ChatModel\n    chatModel, err := openai.NewChatModel(ctx, &openai.ChatModelConfig{\n        Model:  \"gpt-4o\",\n        APIKey: os.Getenv(\"OPENAI_API_KEY\"),\n    })\n    if err != nil {\n        panic(err)\n    }\n\n    // 创建 Agent\n    agent, err := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{\n        Model: chatModel,\n    })\n    if err != nil {\n        panic(err)\n    }\n\n    // 运行 Agent\n    runner := adk.NewRunner(ctx, adk.RunnerConfig{Agent: agent})\n    iter := runner.Query(ctx, \"Hello, who are you?\")\n\n    for {\n        event, ok := iter.Next()\n        if !ok {\n            break\n        }\n        fmt.Println(event.Message.Content)\n    }\n}\n```\n\n### 2. 带工具的 Agent\n\n添加工具调用能力：\n\n```go\npackage main\n\nimport (\n    \"context\"\n    \"fmt\"\n    \"os\"\n\n    \"github.com/cloudwego/eino-ext/components/model/openai\"\n    \"github.com/cloudwego/eino/adk\"\n    \"github.com/cloudwego/eino/compose\"\n    \"github.com/cloudwego/eino/components/tool\"\n)\n\n// 定义天气工具\ntype WeatherTool struct{}\n\nfunc (w *WeatherTool) Info(ctx context.Context) (*tool.Info, error) {\n    return &tool.Info{\n        Name: \"get_weather\",\n        Desc: \"Get current weather for a location\",\n        ParamsOneOf: tool.NewParamsOneOfByParams(\n            map[string]*tool.ParameterInfo{\n                \"location\": {\n                    Type: \"string\",\n                    Desc: \"City name\",\n                    Required: true,\n                },\n            },\n        ),\n    }, nil\n}\n\nfunc (w *WeatherTool) InvokableRun(ctx context.Context, argumentsInJSON string) (string, error) {\n    // 实际应该调用天气 API\n    return fmt.Sprintf(\"Weather in %s: Sunny, 25°C\", argumentsInJSON), nil\n}\n\nfunc main() {\n    ctx := context.Background()\n\n    chatModel, _ := openai.NewChatModel(ctx, &openai.ChatModelConfig{\n        Model:  \"gpt-4o\",\n        APIKey: os.Getenv(\"OPENAI_API_KEY\"),\n    })\n\n    // 创建工具\n    weatherTool := &WeatherTool{}\n\n    // 创建带工具的 Agent\n    agent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{\n        Model: chatModel,\n        ToolsConfig: adk.ToolsConfig{\n            ToolsNodeConfig: compose.ToolsNodeConfig{\n                Tools: []tool.BaseTool{weatherTool},\n            },\n        },\n    })\n\n    runner := adk.NewRunner(ctx, adk.RunnerConfig{Agent: agent})\n    iter := runner.Query(ctx, \"What's the weather in Beijing?\")\n\n    for {\n        event, ok := iter.Next()\n        if !ok {\n            break\n        }\n        fmt.Println(event.Message.Content)\n    }\n}\n```\n\n### 3. DeepAgent（复杂任务）\n\n处理复杂多步骤任务：\n\n```go\npackage main\n\nimport (\n    \"context\"\n    \"os\"\n\n    \"github.com/cloudwego/eino-ext/components/model/openai\"\n    \"github.com/cloudwego/eino/adk\"\n    \"github.com/cloudwego/eino/adk/deep\"\n    \"github.com/cloudwego/eino/compose\"\n    \"github.com/cloudwego/eino/components/tool\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    chatModel, _ := openai.NewChatModel(ctx, &openai.ChatModelConfig{\n        Model:  \"gpt-4o\",\n        APIKey: os.Getenv(\"OPENAI_API_KEY\"),\n    })\n\n    // 创建子 Agent\n    researchAgent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{\n        Model: chatModel,\n    })\n\n    codeAgent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{\n        Model: chatModel,\n    })\n\n    // 创建 DeepAgent\n    deepAgent, _ := deep.New(ctx, &deep.Config{\n        ChatModel: chatModel,\n        SubAgents: []adk.Agent{researchAgent, codeAgent},\n        ToolsConfig: adk.ToolsConfig{\n            ToolsNodeConfig: compose.ToolsNodeConfig{\n                Tools: []tool.BaseTool{\n                    // shellTool, pythonTool, webSearchTool\n                },\n            },\n        },\n    })\n\n    runner := adk.NewRunner(ctx, adk.RunnerConfig{Agent: deepAgent})\n    iter := runner.Query(ctx, \"Analyze the sales data and generate a report\")\n\n    for {\n        event, ok := iter.Next()\n        if !ok {\n            break\n        }\n        // 处理事件\n    }\n}\n```\n\n### 4. Graph 编排\n\n精确控制执行流程：\n\n```go\npackage main\n\nimport (\n    \"context\"\n    \"os\"\n\n    \"github.com/cloudwego/eino-ext/components/model/openai\"\n    \"github.com/cloudwego/eino/compose\"\n)\n\ntype Input struct {\n    Text string\n}\n\ntype Output struct {\n    Result string\n}\n\nfunc main() {\n    ctx := context.Background()\n\n    chatModel, _ := openai.NewChatModel(ctx, &openai.ChatModelConfig{\n        Model:  \"gpt-4o\",\n        APIKey: os.Getenv(\"OPENAI_API_KEY\"),\n    })\n\n    // 创建 Graph\n    graph := compose.NewGraph[*Input, *Output]()\n\n    // 添加节点\n    graph.AddLambdaNode(\"validate\", func(ctx context.Context, input *Input) (*Input, error) {\n        // 验证逻辑\n        return input, nil\n    })\n\n    graph.AddChatModelNode(\"generate\", chatModel)\n\n    graph.AddLambdaNode(\"format\", func(ctx context.Context, input *Input) (*Output, error) {\n        // 格式化逻辑\n        return &Output{Result: input.Text}, nil\n    })\n\n    // 添加边\n    graph.AddEdge(compose.START, \"validate\")\n    graph.AddEdge(\"validate\", \"generate\")\n    graph.AddEdge(\"generate\", \"format\")\n    graph.AddEdge(\"format\", compose.END)\n\n    // 编译并运行\n    runnable, _ := graph.Compile(ctx)\n    result, _ := runnable.Invoke(ctx, &Input{Text: \"Hello\"})\n\n    println(result.Result)\n}\n```\n\n### 5. Graph 转工具\n\n将工作流暴露为 Agent 工具：\n\n```go\npackage main\n\nimport (\n    \"context\"\n    \"os\"\n\n    \"github.com/cloudwego/eino-ext/components/model/openai\"\n    \"github.com/cloudwego/eino/adk\"\n    \"github.com/cloudwego/eino/compose\"\n    \"github.com/cloudwego/eino/components/tool\"\n    \"github.com/cloudwego/eino/components/tool/graphtool\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    chatModel, _ := openai.NewChatModel(ctx, &openai.ChatModelConfig{\n        Model:  \"gpt-4o\",\n        APIKey: os.Getenv(\"OPENAI_API_KEY\"),\n    })\n\n    // 创建 Graph\n    graph := compose.NewGraph[*Input, *Output]()\n    // ... 添加节点和边\n\n    // 将 Graph 转换为工具\n    graphTool, _ := graphtool.NewInvokableGraphTool(\n        graph,\n        \"data_pipeline\",\n        \"Process and validate data\",\n    )\n\n    // Agent 使用该工具\n    agent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{\n        Model: chatModel,\n        ToolsConfig: adk.ToolsConfig{\n            ToolsNodeConfig: compose.ToolsNodeConfig{\n                Tools: []tool.BaseTool{graphTool},\n            },\n        },\n    })\n\n    runner := adk.NewRunner(ctx, adk.RunnerConfig{Agent: agent})\n    iter := runner.Query(ctx, \"Process the data using the pipeline\")\n\n    for {\n        event, ok := iter.Next()\n        if !ok {\n            break\n        }\n        // 处理事件\n    }\n}\n```\n\n### 6. 流式处理\n\n处理流式输出：\n\n```go\npackage main\n\nimport (\n    \"context\"\n    \"fmt\"\n    \"os\"\n\n    \"github.com/cloudwego/eino-ext/components/model/openai\"\n    \"github.com/cloudwego/eino/adk\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    chatModel, _ := openai.NewChatModel(ctx, &openai.ChatModelConfig{\n        Model:  \"gpt-4o\",\n        APIKey: os.Getenv(\"OPENAI_API_KEY\"),\n    })\n\n    agent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{\n        Model: chatModel,\n    })\n\n    runner := adk.NewRunner(ctx, adk.RunnerConfig{Agent: agent})\n\n    // 流式查询\n    iter := runner.Query(ctx, \"Write a long story\")\n\n    for {\n        event, ok := iter.Next()\n        if !ok {\n            break\n        }\n\n        // 实时输出流式内容\n        if event.Message != nil && event.Message.Content != \"\" {\n            fmt.Print(event.Message.Content)\n        }\n    }\n}\n```\n\n### 7. 回调处理\n\n添加日志、追踪、指标：\n\n```go\npackage main\n\nimport (\n    \"context\"\n    \"fmt\"\n    \"os\"\n\n    \"github.com/cloudwego/eino-ext/components/model/openai\"\n    \"github.com/cloudwego/eino/adk\"\n    \"github.com/cloudwego/eino/callbacks\"\n)\n\n// 自定义回调处理器\ntype LoggingHandler struct {\n    callbacks.Handler\n}\n\nfunc (h *LoggingHandler) OnStart(ctx context.Context, info *callbacks.RunInfo, input callbacks.CallbackInput) context.Context {\n    fmt.Printf(\"Start: %s\\n\", info.Name)\n    return ctx\n}\n\nfunc (h *LoggingHandler) OnEnd(ctx context.Context, info *callbacks.RunInfo, output callbacks.CallbackOutput) context.Context {\n    fmt.Printf(\"End: %s\\n\", info.Name)\n    return ctx\n}\n\nfunc (h *LoggingHandler) OnError(ctx context.Context, info *callbacks.RunInfo, err error) context.Context {\n    fmt.Printf(\"Error: %s - %v\\n\", info.Name, err)\n    return ctx\n}\n\nfunc main() {\n    ctx := context.Background()\n\n    chatModel, _ := openai.NewChatModel(ctx, &openai.ChatModelConfig{\n        Model:  \"gpt-4o\",\n        APIKey: os.Getenv(\"OPENAI_API_KEY\"),\n    })\n\n    // 添加回调处理器\n    handler := &LoggingHandler{}\n    ctx = callbacks.CtxWithHandlers(ctx, handler)\n\n    agent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{\n        Model: chatModel,\n    })\n\n    runner := adk.NewRunner(ctx, adk.RunnerConfig{Agent: agent})\n    iter := runner.Query(ctx, \"Hello\")\n\n    for {\n        event, ok := iter.Next()\n        if !ok {\n            break\n        }\n        fmt.Println(event.Message.Content)\n    }\n}\n```\n\n### 8. 人机协作（Interrupt/Resume）\n\n实现人工审批流程：\n\n```go\npackage main\n\nimport (\n    \"context\"\n    \"fmt\"\n    \"os\"\n\n    \"github.com/cloudwego/eino-ext/components/model/openai\"\n    \"github.com/cloudwego/eino/adk\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    chatModel, _ := openai.NewChatModel(ctx, &openai.ChatModelConfig{\n        Model:  \"gpt-4o\",\n        APIKey: os.Getenv(\"OPENAI_API_KEY\"),\n    })\n\n    agent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{\n        Model: chatModel,\n    })\n\n    runner := adk.NewRunner(ctx, adk.RunnerConfig{\n        Agent: agent,\n        // 配置检查点存储\n    })\n\n    // 第一次运行\n    iter := runner.Query(ctx, \"Create a report\")\n\n    var checkpointID string\n    for {\n        event, ok := iter.Next()\n        if !ok {\n            break\n        }\n\n        // 检测到需要人工确认\n        if event.NeedHumanInput {\n            checkpointID = event.CheckpointID\n            fmt.Println(\"Waiting for human approval...\")\n            break\n        }\n    }\n\n    // 人工确认后恢复\n    if checkpointID != \"\" {\n        // 获取人工输入\n        humanInput := \"Approved\"\n\n        // 从检查点恢复\n        iter = runner.Resume(ctx, checkpointID, humanInput)\n\n        for {\n            event, ok := iter.Next()\n            if !ok {\n                break\n            }\n            fmt.Println(event.Message.Content)\n        }\n    }\n}\n```\n\n## 核心概念\n\n### 1. Component（组件）\n\n可复用的构建块：\n\n- **ChatModel**: 大语言模型接口\n- **Tool**: 工具/函数调用\n- **Retriever**: 检索器\n- **Embedding**: 向量嵌入\n- **ChatTemplate**: 提示词模板\n\n### 2. Agent（智能体）\n\n具有自主决策能力的实体：\n\n- **ChatModelAgent**: 基础 Agent，处理简单对话和工具调用\n- **DeepAgent**: 复杂任务 Agent，支持任务分解和多 Agent 协作\n- **自定义 Agent**: 实现 `adk.Agent` 接口\n\n### 3. Graph（图）\n\n节点和边组成的执行流程：\n\n```go\ngraph := compose.NewGraph[InputType, OutputType]()\ngraph.AddLambdaNode(\"node1\", func1)\ngraph.AddChatModelNode(\"node2\", chatModel)\ngraph.AddEdge(\"node1\", \"node2\")\n```\n\n### 4. Tool（工具）\n\nAgent 可以调用的功能：\n\n```go\ntype MyTool struct{}\n\nfunc (t *MyTool) Info(ctx context.Context) (*tool.Info, error) {\n    return &tool.Info{\n        Name: \"my_tool\",\n        Desc: \"Tool description\",\n        ParamsOneOf: tool.NewParamsOneOfByParams(params),\n    }, nil\n}\n\nfunc (t *MyTool) InvokableRun(ctx context.Context, args string) (string, error) {\n    // 工具逻辑\n    return result, nil\n}\n```\n\n### 5. Stream（流）\n\n流式数据处理：\n\n- 自动处理流式传输\n- 连接、装箱、合并、复制流\n- 组件只需实现适合的流式范式\n\n### 6. Callback（回调）\n\n切面编程机制：\n\n```go\ntype MyHandler struct {\n    callbacks.Handler\n}\n\nfunc (h *MyHandler) OnStart(ctx context.Context, info *callbacks.RunInfo, input callbacks.CallbackInput) context.Context {\n    // 开始时的逻辑\n    return ctx\n}\n```\n\n### 7. Checkpoint（检查点）\n\n状态持久化：\n\n- 保存执行状态\n- 支持中断恢复\n- 人机协作\n\n## 支持的模型\n\n### ChatModel 实现\n\n- **OpenAI**: GPT-4, GPT-3.5\n- **Claude**: Claude 3 系列\n- **Gemini**: Google Gemini\n- **Ark**: 字节跳动火山引擎\n- **Ollama**: 本地模型\n- **自定义**: 实现 `ChatModel` 接口\n\n### Embedding 实现\n\n- **OpenAI**: text-embedding-ada-002\n- **Ark**: 火山引擎 Embedding\n- **自定义**: 实现 `Embedding` 接口\n\n### Retriever 实现\n\n- **Elasticsearch**: 全文检索\n- **OpenSearch**: 向量检索\n- **自定义**: 实现 `Retriever` 接口\n\n## 开发最佳实践\n\n1. **组件复用**: 使用 eino-ext 提供的官方组件\n2. **错误处理**: 始终检查错误返回值\n3. **上下文传递**: 正确使用 context.Context\n4. **流式优先**: 优先使用流式 API 提升用户体验\n5. **回调监控**: 使用回调机制进行日志和监控\n6. **工具设计**: 工具应该单一职责、参数清晰\n7. **Graph 编排**: 复杂流程使用 Graph 而非硬编码\n8. **检查点**: 长时间任务使用检查点支持恢复\n9. **类型安全**: 充分利用 Go 的类型系统\n10. **测试**: 为 Agent 和工具编写单元测试\n\n## 常用命令\n\n```bash\n# 代码检查\ngolangci-lint run ./...\n\n# 格式化代码\ngofmt -s -w .\n\n# 整理导入\ngoimports -w .\n\n# 运行测试\ngo test ./...\n\n# 构建\ngo build -o app main.go\n\n# 运行\n./app\n```\n\n## 官方资源\n\n- **GitHub**: https://github.com/cloudwego/eino\n- **文档**: https://www.cloudwego.io/docs/eino/\n- **示例**: https://github.com/cloudwego/eino-examples\n- **扩展**: https://github.com/cloudwego/eino-ext\n- **社区**: 飞书群（见 README）\n\n## 使用场景\n\n1. **对话机器人**: 客服、问答、知识库查询\n2. **工具调用**: 天气查询、计算器、数据库操作\n3. **数据分析**: 数据处理、报表生成、可视化\n4. **代码生成**: 代码助手、自动化脚本\n5. **多 Agent 协作**: 任务分解、专业分工\n6. **工作流自动化**: 业务流程、ETL 任务\n7. **人机协作**: 审批流程、交互式任务\n8. **RAG 应用**: 知识库检索增强生成\n\n## 注意事项\n\n1. **API Key 安全**: 不要硬编码 API Key，使用环境变量\n2. **并发控制**: 注意 Go 的并发特性，避免竞态条件\n3. **资源释放**: 及时释放资源，避免内存泄漏\n4. **错误处理**: 不要忽略错误，做好错误处理和日志\n5. **性能优化**: 使用流式 API、批处理、缓存等优化性能\n6. **版本兼容**: 注意 Eino 和 eino-ext 的版本兼容性\n7. **模型选择**: 根据任务复杂度选择合适的模型\n8. **成本控制**: 监控 API 调用次数和 Token 使用量\n\n## 官方示例索引\n\n详细示例请参考 `references/docs_examples/` 目录：\n\n### 📦 ADK (Agent Development Kit)\n\n| 目录 | 名称 | 说明 |\n|------|------|------|\n| adk/helloworld | Hello World Agent | 最简单的 Agent 示例，展示如何创建基础对话 Agent |\n| adk/intro/chatmodel | ChatModel Agent | ChatModelAgent 使用和 Interrupt 机制 |\n| adk/intro/custom | 自定义 Agent | 实现符合 ADK 定义的自定义 Agent |\n| adk/intro/workflow | Workflow Agents | Loop、Parallel、Sequential Agent 模式 |\n| adk/intro/session | Session 管理 | 通过 Session 在多个 Agent 间传递数据和状态 |\n| adk/intro/transfer | Agent 转移 | ChatModelAgent 的 Transfer 能力，Agent 间任务转移 |\n| adk/intro/http-sse-service | HTTP SSE 服务 | 将 ADK Runner 暴露为 HTTP 服务（Server-Sent Events） |\n| adk/human-in-the-loop | 人机协作 | 8 个示例：审批、审核编辑、反馈循环、追问、Supervisor |\n| adk/multiagent | 多 Agent 协作 | Supervisor、Plan-Execute-Replan、Deep Agents、Excel Agent |\n| adk/common/tool/graphtool | GraphTool | 将 Graph/Chain/Workflow 封装为 Agent 工具 |\n\n### 🔗 Compose (编排)\n\n| 目录 | 名称 | 说明 |\n|------|------|------|\n| compose/chain | Chain | 使用 compose.Chain 进行顺序编排（Prompt + ChatModel） |\n| compose/graph | Graph | 图编排：状态图、工具调用 Agent、异步节点、中断机制 |\n| compose/workflow | Workflow | 工作流：字段映射、纯数据流、纯控制流、静态值、流式处理 |\n| compose/batch | BatchNode | 批量处理组件，支持并发控制和中断恢复 |\n\n### 🌊 Flow (流程模块)\n\n| 目录 | 名称 | 说明 |\n|------|------|------|\n| flow/agent/react | ReAct Agent | ReAct Agent，包含记忆、动态选项、未知工具处理 |\n| flow/agent/multiagent | Multi-Agent | Host Multi-Agent（日记助手）、Plan-Execute 模式 |\n| flow/agent/manus | Manus Agent | 基于 Eino 实现的 Manus Agent（参考 OpenManus） |\n| flow/agent/deer-go | Deer-Go | 参考 deer-flow 的 Go 实现，支持研究团队协作 |\n\n### 🧩 Components (组件)\n\n| 目录 | 名称 | 说明 |\n|------|------|------|\n| components/model | Model | A/B 测试路由、cURL 风格的 HTTP 传输日志 |\n| components/retriever | Retriever | 多查询检索、路由检索 |\n| components/tool | Tool | JSON Schema 工具、MCP 工具、中间件（错误移除、JSON 修复） |\n| components/document | Document | 自定义解析器、扩展解析器、文本解析器 |\n| components/prompt | Prompt | Chat Prompt 模板示例 |\n| components/lambda | Lambda | Lambda 函数组件示例 |\n\n### 🚀 QuickStart (快速开始)\n\n| 目录 | 名称 | 说明 |\n|------|------|------|\n| quickstart/chat | Chat 快速开始 | 最基础的 LLM 对话示例（模板、生成、流式输出） |\n| quickstart/eino_assistant | Eino 助手 | 完整的 RAG 应用（知识索引、Agent 服务、Web 界面） |\n| quickstart/todoagent | Todo Agent | 简单的 Todo 管理 Agent 示例 |\n\n### 🛠️ DevOps (开发运维)\n\n| 目录 | 名称 | 说明 |\n|------|------|------|\n| devops/debug | 调试工具 | Eino 调试功能，支持 Chain 和 Graph 调试 |\n| devops/visualize | 可视化工具 | 将 Graph/Chain/Workflow 渲染为 Mermaid 图表 |\n\n## 参考文档\n\n详细文档请参考 `references/` 目录：\n\n- **框架概览**: [references/overview.md](references/overview.md) - Eino 框架完整梳理，包含核心概念、使用场景、学习路径\n- **README**: [references/readme.md](references/readme.md) - 官方 README 文档（英文）\n- **官方示例**: [references/docs_examples/](references/docs_examples/) - 官方示例代码库\n- **示例说明**: [references/docs_examples/COOKBOOK.md](references/docs_examples/COOKBOOK.md) - 每个示例的详细说明\n- **官方文档**: https://www.cloudwego.io/docs/eino/ - 在线文档\n- **扩展组件**: https://github.com/cloudwego/eino-ext - 组件实现库","tags":["eino","awesome","skills","fanqingxuan","agent-skills","ai-agent","claude-code","claude-skills","codex","coding-assistant","developer-tools","qoder"],"capabilities":["skill","source-fanqingxuan","skill-eino","topic-agent-skills","topic-ai-agent","topic-claude-code","topic-claude-skills","topic-codex","topic-coding-assistant","topic-developer-tools","topic-qoder","topic-vercel-skills"],"categories":["awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/fanqingxuan/awesome-skills/eino","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add fanqingxuan/awesome-skills","source_repo":"https://github.com/fanqingxuan/awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.459","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 19 github stars · SKILL.md body (16,542 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-23T07:01:11.788Z","embedding":null,"createdAt":"2026-04-18T23:06:25.626Z","updatedAt":"2026-04-23T07:01:11.788Z","lastSeenAt":"2026-04-23T07:01:11.788Z","tsv":"'-3.5':1080 '-4':1078 '/app':1191 '/cloudwego/eino':72,103,1196 '/cloudwego/eino-examples':1204 '/cloudwego/eino-ext':77,1208,1613 '/cloudwego/eino-ext/components/model/openai':108,125,205,346,448,556,655,724,854 '/cloudwego/eino/adk':128,208,349,559,658,727,857 '/cloudwego/eino/adk/deep':352 '/cloudwego/eino/callbacks':730 '/cloudwego/eino/components/tool':214,358,565 '/cloudwego/eino/components/tool/graphtool':568 '/cloudwego/eino/compose':211,355,451,562 '/docs/eino/':1200,1608 '002':1103 '1':15,110,938,1122,1214,1253 '1.18':60 '10':1162 '2':19,192,953,1129,1219,1261 '25':271 '3':23,334,972,1083,1132,1224,1267 '4':27,436,990,1136,1229,1271 '4o':143,286,370,473,580,670,803,869 '5':33,542,1033,1141,1233,1275 '6':38,643,1043,1144,1239,1281 '7':41,710,1066,1148,1244,1290 '8':841,1154,1248,1293,1375 '9':1157 'a/b':1489 'ada':1102 'adk':1304,1331,1364 'adk.agent':399,970 'adk.chatmodelagentconfig':160,300,381,387,610,679,819,878 'adk.newchatmodelagent':158,298,379,385,608,677,817,876 'adk.newrunner':171,311,412,621,683,823,882 'adk.runnerconfig':173,313,414,623,685,825,884 'adk.toolsconfig':304,403,614 'adk/common/tool/graphtool':1395 'adk/helloworld':1311 'adk/human-in-the-loop':1373 'adk/intro/chatmodel':1320 'adk/intro/custom':1327 'adk/intro/http-sse-service':1359 'adk/intro/session':1342 'adk/intro/transfer':1350 'adk/intro/workflow':1334 'adk/multiagent':1382 'agent':18,31,53,113,115,155,156,169,174,175,194,296,297,314,315,377,415,546,605,607,624,625,676,686,687,816,826,827,875,885,886,954,959,963,965,968,993,1165,1235,1305,1314,1316,1319,1322,1329,1333,1336,1340,1348,1351,1357,1384,1392,1394,1400,1419,1441,1443,1450,1454,1462,1467,1545,1551,1555 'ai':17 'analyz':420 'api':147,264,290,374,477,584,674,807,873,1139,1254,1258,1278,1296 'apikey':144,287,371,474,581,671,804,870 'app':85,90,97,1188 'applic':4,22 'approv':914,921 'arg':1025 'argumentsinjson':259,273 'ark':1088,1104 'assist':7 'bash':67,79,1168 'batchnod':1431 'beij':324 'break':189,331,434,641,702,838,904,915,934 'build':16,28,1186 'c':272 'call':26 'callback':1044 'callbacks.callbackinput':745,1061 'callbacks.callbackoutput':763 'callbacks.ctxwithhandlers':813 'callbacks.handler':735,1051 'callbacks.runinfo':743,761,779,1059 'cd':86 'chain':1408,1567 'chat':1517,1530 'chatmodel':134,135,162,279,302,363,383,389,396,397,466,501,573,612,663,681,796,821,862,880,942,986,1074,1094,1321,1413 'chatmodelag':111,957,1323,1353 'chattempl':951 'checkpoint':1067 'checkpointid':896,908,918,926 'citi':248 'claud':1081,1082 'codeag':384,401 'compon':939,1482 'components/document':1510 'components/lambda':1520 'components/model':1487 'components/prompt':1515 'components/retriever':1495 'components/tool':1499 'compos':1402 'compose.chain':1410 'compose.end':529 'compose.newgraph':482,589,978 'compose.start':519 'compose.toolsnodeconfig':306,405,616 'compose/batch':1430 'compose/chain':1407 'compose/graph':1414 'compose/workflow':1422 'context':120,200,342,444,552,650,719,849 'context.background':132,278,362,465,572,662,795,861 'context.context':224,258,490,506,741,746,759,764,777,782,1004,1024,1057,1062,1135 'creat':20,34,892 'ctx':131,138,159,172,178,223,257,277,281,299,312,318,361,365,380,386,394,413,419,464,468,489,505,533,536,571,575,609,622,628,661,665,678,684,691,740,753,758,771,776,791,794,798,812,814,818,824,830,860,864,877,883,891,925,1003,1023,1056,1065 'curl':1491 'current':234 'data':423,599,604,631 'deep':1391 'deep.config':395 'deep.new':393 'deepag':335,391,392,416,961 'deer':1472,1476 'deer-flow':1475 'deer-go':1471 'desc':232,247,1012 'descript':1014 'develop':5,1306 'devop':1557 'devops/debug':1562 'devops/visualize':1571 'document':1511 'eino':1,2,45,47,84,89,96,1126,1284,1287,1464,1539,1564,1585 'eino-ext':1125,1286 'elasticsearch':1113 'embed':949,1096,1101,1106,1109 'end':766 'err':136,150,153,157,164,167,780,789 'error':226,262,494,510,781,784,1006,1028 'etl':1242 'event':184,326,429,636,697,833,899,929,1372 'event.checkpointid':909 'event.message':705 'event.message.content':191,333,707,709,840,936 'event.needhumaninput':907 'excel':1393 'execut':1389,1458 'ext':1127,1288 'flow':1434,1477 'flow/agent/deer-go':1470 'flow/agent/manus':1460 'flow/agent/multiagent':1447 'flow/agent/react':1439 'fmt':121,201,651,720,850 'fmt.print':708 'fmt.printf':747,765,783 'fmt.println':190,332,839,910,935 'fmt.sprintf':266 'format':503,526,528 'framework':6 'func':129,219,253,275,359,462,488,504,569,659,736,754,772,792,858,999,1019,1052 'func1':983 'gemini':1085,1087 'generat':425,500,523,525 'get':69,74,100,105,230,233 'github':1193 'github.com':71,76,102,107,124,127,204,207,210,213,345,348,351,354,357,447,450,555,558,561,564,567,654,657,723,726,729,853,856,1195,1203,1207,1612 'github.com/cloudwego/eino':70,101,1194 'github.com/cloudwego/eino-examples':1202 'github.com/cloudwego/eino-ext':75,1206,1611 'github.com/cloudwego/eino-ext/components/model/openai':106,123,203,344,446,554,653,722,852 'github.com/cloudwego/eino/adk':126,206,347,557,656,725,855 'github.com/cloudwego/eino/adk/deep':350 'github.com/cloudwego/eino/callbacks':728 'github.com/cloudwego/eino/components/tool':212,356,563 'github.com/cloudwego/eino/components/tool/graphtool':566 'github.com/cloudwego/eino/compose':209,353,449,560 'go':58,68,73,91,99,104,116,196,338,440,548,646,715,845,976,995,1047,1160,1182,1185,1264,1473,1479 'gofmt':1175 'goimport':1179 'golang':8,49 'golangci':63,1171 'golangci-lint':62,1170 'googl':1086 'gpt':142,285,369,472,579,669,802,868,1077,1079 'gpt-4o':141,284,368,471,578,668,801,867 'graph':437,480,481,543,587,588,594,598,973,977,1149,1152,1415,1569 'graph.addchatmodelnode':499,984 'graph.addedge':518,521,524,527,987 'graph.addlambdanode':486,502,981 'graph.compile':532 'graph/chain/workflow':1398,1574 'graph/compose':37 'graphtool':596,619,1396 'graphtool.newinvokablegraphtool':597 'h':737,755,773,1053 'handler':810,815 'hello':179,539,831,1312 'host':1451 'http':1360,1367,1493 'human':43,913 'human-i':42 'humaninput':920,927 'implement':24,39 'import':119,199,341,443,551,649,718,848 'info':222,742,760,778,1002,1058 'info.name':751,769,788 'init':93 'input':453,483,491,492,493,497,507,508,537,590,744,1060 'input.text':515 'inputtyp':979 'interrupt':1325 'interrupt/resume':843 'invokablerun':256,1022 'iter':176,316,417,626,689,828,889,923 'iter.next':186,328,431,638,699,835,901,931 'json':1501,1508 'key':148,291,375,478,585,675,808,874,1255,1259 'kit':1307 'lambda':1521,1522 'lint':64,1172 'llm':21,1533 'llm/ai':3,50 'locat':238,244 'logginghandl':733,738,756,774,811 'long':694 'loop':1337 'main':118,130,198,276,340,360,442,463,550,570,648,660,717,793,847,859 'main.go':1189 'manus':1461,1466 'map':241 'mcp':1504 'mermaid':1576 'mkdir':81 'mod':92 'model':140,161,283,301,367,382,388,470,577,611,667,680,800,820,866,879,1488 'multi':30,1449,1453 'multi-ag':29,1448,1452 'my-eino-app':82,87,94 'myhandl':1049,1054 'mytool':997,1001,1021 'n':750,768,787 'name':229,249,1009 'need':13 'nil':151,165,252,274,498,516,706,1018,1032 'node1':982,988 'node2':985,989 'o':1187 'ok':185,188,327,330,430,433,637,640,698,701,834,837,900,903,930,933 'ollama':1090 'onend':757 'onerror':775 'onstart':739,1055 'openai':146,289,373,476,583,673,806,872,1076,1098 'openai.chatmodelconfig':139,282,366,469,576,666,799,865 'openai.newchatmodel':137,280,364,467,574,664,797,863 'openmanus':1469 'opensearch':1115 'os':122,202,343,445,553,652,721,851 'os.getenv':145,288,372,475,582,672,805,871 'output':458,484,509,513,591,762 'outputtyp':980 'packag':117,197,339,441,549,647,716,846 'panic':152,166 'parallel':1338 'param':1017 'paramsoneof':239,1015 'pipelin':600,634 'plan':1388,1457 'plan-execut':1456 'plan-execute-replan':1387 'println':540 'process':601,629 'prompt':1412,1516,1518 'pythontool':409 'quickstart':1524 'quickstart/chat':1529 'quickstart/eino_assistant':1538 'quickstart/todoagent':1549 'rag':1249,1542 'react':1440,1442 'readm':1212,1590,1594 'refer':1580 'references/docs_examples':1302,1598,1599 'references/docs_examples/cookbook.md':1602,1603 'references/overview.md':1583,1584 'references/readme.md':1591,1592 'replan':1390 'report':427,894 'requir':250 'researchag':378,400 'result':460,514,534,1031 'result.result':541 'retriev':947,1111,1119,1496 'return':227,265,496,512,752,770,790,1007,1030,1064 'run':1173 'runnabl':531 'runnable.invoke':535 'runner':170,310,411,620,682,822,881,1365 'runner.query':177,317,418,627,690,829,890 'runner.resume':924 'sale':422 'schema':1502 'sent':1371 'sequenti':1339 'server':1370 'server-s':1369 'session':1343,1346 'shelltool':408 'skill' 'skill-eino' 'source-fanqingxuan' 'sse':1361 'start':748 'stori':695 'stream':40,1034 'string':242,246,260,261,456,461,897,1026,1027 'struct':218,454,459,734,998,1050 'subag':398 'sunni':270 'supervisor':1381,1386 'system':32 'test':1183 'text':455,538,1100 'text-embedding-ada':1099 'todo':1550,1553 'token':1298 'tool':25,307,406,617,944,991,1011,1013,1500 'tool.basetool':308,407,618 'tool.info':225,228,1005,1008 'tool.newparamsoneofbyparams':240,1016 'tool.parameterinfo':243 'toolsconfig':303,402,613 'toolsnodeconfig':305,404,615 'topic-agent-skills' 'topic-ai-agent' 'topic-claude-code' 'topic-claude-skills' 'topic-codex' 'topic-coding-assistant' 'topic-developer-tools' 'topic-qoder' 'topic-vercel-skills' 'transfer':1355 'true':251 'type':216,245,452,457,732,996,1048 'use':9,632 'user':12 'v':786 'valid':487,520,522,603 'var':895 'w':220,254,1177,1180 'wait':911 'weather':231,235,267,322 'weathertool':217,221,255,293,294,309 'web':1547 'websearchtool':410 'workflow':35,1335,1423 'world':1313 'write':692 'www.cloudwego.io':1199,1607 'www.cloudwego.io/docs/eino/':1198,1606 '上下文传递':1133 '不要忽略错误':1273 '不要硬编码':1257 '专业分工':1238 '专注于':52 '业务流程':1241 '个示例':1376 '中断机制':1421 '中间件':1506 '为':1164 '交互式任务':1247 '人工确认后恢复':916 '人机协作':842,1072,1245,1374 '从检查点恢复':922 '代码助手':1231 '代码检查':1169 '代码生成':1230 '代码规范':61 '任务':1243 '任务分解':1237 '优先使用流式':1138 '传输日志':1494 '使用':1124,1409 '使用和':1324 '使用回调机制进行日志和监控':1143 '使用场景':1213,1588 '使用流式':1277 '使用环境变量':1260 '使用该工具':606 '使用量':1299 '保存执行状态':1070 '修复':1509 '做好错误处理和日志':1274 '充分利用':1159 '全文检索':1114 '具有自主决策能力的实体':956 '函数组件示例':1523 '函数调用':946 '切面编程机制':1046 '创建':154,390,479,586 '创建子':376 '创建工具':292 '创建带工具的':295 '创建项目':80 '动态选项':1445 '助手':1540 '包含核心概念':1587 '包含记忆':1444 '协作':966,1236,1385 '参数清晰':1147 '参考':1468,1474 '参考文档':1578 '及时释放资源':1269 '反馈循环':1379 '可以调用的功能':994 '可复用的构建块':941 '可视化':1228 '可视化工具':1572 '合并':1040 '名称':1309,1405,1437,1485,1527,1560 '向量嵌入':950 '向量检索':1116 '和':1285,1568 '和工具编写单元测试':1166 '回调':1045 '回调处理':711 '回调监控':1142 '图':974 '图编排':1416 '图表':1577 '在多个':1347 '在线文档':1609 '基于':1463 '基础':112,958 '处理事件':435,642 '处理复杂多步骤任务':337 '处理流式输出':645 '处理简单对话和工具调用':960 '复制流':1041 '复杂任务':336,962 '复杂流程使用':1151 '多':1234,1383 '多查询检索':1497 '大语言模型接口':943 '天气查询':1221 '始终检查错误返回值':1131 '字段映射':1425 '字节跳动火山引擎':1089 '学习路径':1589 '安全':1256 '安装':66 '安装依赖':98 '完整的':1541 '官方':1593 '官方文档':1605 '官方示例':1597 '官方示例代码库':1600 '官方示例索引':1300 '官方资源':1192 '定义天气工具':215 '定义的自定义':1332 '实时输出流式内容':703 '实现':969,1075,1093,1097,1108,1112,1118,1480 '实现人工审批流程':844 '实现的':1465 '实现符合':1330 '实际应该调用天气':263 '审批':1377 '审批流程':1246 '审核编辑':1378 '客服':1216 '对话机器人':1215 '对话示例':1534 '封装为':1399 '将':593,1363,1397,1573 '将工作流暴露为':545 '展示如何创建基础对话':1318 '工作流':1424 '工作流编排':55 '工作流自动化':1240 '工具':547,945,992,1401,1503,1505 '工具应该单一职责':1146 '工具设计':1145 '工具调用':56,1220,1418 '工具逻辑':1029 '带工具的':193 '常用命令':1167 '并发控制':1262 '应用':1250,1543 '应用开发框架':51 '开发':54 '开发最佳实践':1121 '开发运维':1558 '开始时的逻辑':1063 '异步节点':1420 '快速开始':65,1525,1531 '性能优化':1276 '成本控制':1294 '扩展':1205 '扩展组件':1610 '扩展解析器':1513 '批处理':1279 '批量处理组件':1432 '报表生成':1227 '指标':714 '接口':971,1095,1110,1120 '提供的官方组件':1128 '提升用户体验':1140 '提示词模板':952 '支持':1566 '支持中断恢复':1071 '支持任务分解和多':964 '支持并发控制和中断恢复':1433 '支持的模型':1073 '支持研究团队协作':1481 '数据分析':1225 '数据处理':1226 '数据库操作':1223 '整理导入':1178 '文本解析器':1514 '文档':1197,1595 '日记助手':1455 '是字节跳动开源的':48 '智能体':955 '暴露为':1366 '最基础的':1532 '最简单的':1315 '最简单的对话':114 '服务':1362,1368,1546 '未知工具处理':1446 '本地模型':1091 '机制':1326 '构建':1184 '核心概念':937 '核心示例':109 '根据任务复杂度选择合适的模型':1292 '格式化代码':1174 '格式化逻辑':511 '框架完整梳理':1586 '框架开发指南':46 '框架概览':1582 '检查点':1068,1155 '检测到需要人工确认':905 '检索器':948 '模型选择':1291 '模式':1341,1459 '模板':1535 '模板示例':1519 '正确使用':1134 '每个示例的详细说明':1604 '注意':1263,1283 '注意事项':1252 '流':1035 '流式优先':1137 '流式处理':644,1429 '流式数据处理':1036 '流式查询':688 '流式输出':1537 '流程模块':1435 '测试':1163 '测试路由':1490 '添加回调处理器':809 '添加工具调用能力':195 '添加日志':712 '添加节点':485 '添加节点和边':592 '添加边':517 '渲染为':1575 '火山引擎':1105 '版本':59 '版本兼容':1282 '状态图':1417 '状态持久化':1069 '环境要求':57 '生成':1536 '界面':1548 '的':1354,1478 '的并发特性':1265 '的版本兼容性':1289 '的类型系统':1161 '监控':1295 '目录':1303,1308,1404,1436,1484,1526,1559,1581 '知识库查询':1218 '知识库检索增强生成':1251 '知识索引':1544 '示例':1201,1317,1556 '示例说明':1601 '社区':1209 '第一次运行':888 '简单的':1552 '管理':1344,1554 '类型安全':1158 '精确控制执行流程':439 '系列':1084 '纯控制流':1427 '纯数据流':1426 '组件':940,1483 '组件只需实现适合的流式范式':1042 '组件复用':1123 '组件实现库':1614 '缓存等优化性能':1280 '编排':438,1150,1403 '编译并运行':530 '而非硬编码':1153 '能力':1356 '自动化脚本':1232 '自动处理流式传输':1037 '自定义':967,1092,1107,1117,1328 '自定义回调处理器':731 '自定义解析器':1512 '节点和边组成的执行流程':975 '英文':1596 '获取人工输入':919 '装箱':1039 '见':1211 '计算器':1222 '详细文档请参考':1579 '详细示例请参考':1301 '说明':1310,1406,1438,1486,1528,1561 '调用次数和':1297 '调试':1570 '调试功能':1565 '调试工具':1563 '资源释放':1268 '路由检索':1498 '转工具':544 '转换为工具':595 '转移':1352 '运行':168,1190 '运行测试':1181 '进行顺序编排':1411 '连接':1038 '追踪':713 '追问':1380 '通过':1345 '避免内存泄漏':1270 '避免竞态条件':1266 '配置':133 '配置检查点存储':887 '错误处理':1130,1272 '错误移除':1507 '长时间任务使用检查点支持恢复':1156 '问答':1217 '间任务转移':1358 '间传递数据和状态':1349 '静态值':1428 '项目初始化':78 '风格的':1492 '飞书群':1210 '验证逻辑':495","prices":[{"id":"a8f5c777-0287-43e3-a2b4-b4d49a3bd146","listingId":"7545cf53-ec53-414b-9684-3bd9abd23d7c","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"fanqingxuan","category":"awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T23:06:25.626Z"}],"sources":[{"listingId":"7545cf53-ec53-414b-9684-3bd9abd23d7c","source":"github","sourceId":"fanqingxuan/awesome-skills/eino","sourceUrl":"https://github.com/fanqingxuan/awesome-skills/tree/main/skills/eino","isPrimary":false,"firstSeenAt":"2026-04-18T23:06:25.626Z","lastSeenAt":"2026-04-23T07:01:11.788Z"}],"details":{"listingId":"7545cf53-ec53-414b-9684-3bd9abd23d7c","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"fanqingxuan","slug":"eino","github":{"repo":"fanqingxuan/awesome-skills","stars":19,"topics":["agent-skills","ai-agent","claude-code","claude-skills","codex","coding-assistant","developer-tools","qoder","vercel-skills"],"license":"mit","html_url":"https://github.com/fanqingxuan/awesome-skills","pushed_at":"2026-04-21T16:00:10Z","description":"热门skills推荐,包括编程以及非编程等各种热门实用的skill","skill_md_sha":"2c52ad0af0f6a044e95a7c3652b1f0e82229e5ef","skill_md_path":"skills/eino/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/fanqingxuan/awesome-skills/tree/main/skills/eino"},"layout":"multi","source":"github","category":"awesome-skills","frontmatter":{"name":"eino","description":"Eino LLM/AI application development framework assistant (Golang). Use when the user needs to: (1) Build AI agents, (2) Create LLM applications, (3) Implement tool calling, (4) Build multi-agent systems, (5) Create workflows with Graph/Compose, (6) Implement streaming, (7) Human-in-the-loop patterns, or any other Eino framework development tasks. Triggers on phrases like \"Eino 开发\", \"创建 Agent\", \"LLM 应用\", \"AI Agent\", \"Eino 框架\", \"构建智能体\"."},"skills_sh_url":"https://skills.sh/fanqingxuan/awesome-skills/eino"},"updatedAt":"2026-04-23T07:01:11.788Z"}}