[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-cloudwego--eino":3,"tool-cloudwego--eino":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",152630,2,"2026-04-12T23:33:54",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[52,13,15,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":32,"last_commit_at":59,"category_tags":60,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":67,"readme_en":68,"readme_zh":69,"quickstart_zh":70,"use_case_zh":71,"hero_image_url":72,"owner_login":73,"owner_name":74,"owner_avatar_url":75,"owner_bio":76,"owner_company":77,"owner_location":77,"owner_email":78,"owner_twitter":74,"owner_website":79,"owner_url":80,"languages":81,"stars":90,"forks":91,"last_commit_at":92,"license":93,"difficulty_score":32,"env_os":94,"env_gpu":95,"env_ram":95,"env_deps":96,"category_tags":102,"github_topics":103,"view_count":32,"oss_zip_url":77,"oss_zip_packed_at":77,"status":17,"created_at":111,"updated_at":112,"faqs":113,"releases":144},7066,"cloudwego\u002Feino","eino","The ultimate LLM\u002FAI application development framework in Go.","Eino 是一个专为 Go 语言开发者打造的大模型（LLM）应用开发框架。它汲取了 LangChain 和 Google ADK 等主流框架的设计理念，同时严格遵循 Go 语言的工程规范与习惯，旨在让开发者能用熟悉的语言高效构建 AI 应用。\n\n在开发大模型应用时，开发者常面临组件复用难、工作流编排复杂以及智能体（Agent）逻辑难以管理等挑战。Eino 通过提供标准化的可复用组件（如聊天模型、工具、检索器等），有效解决了这些问题。它不仅支持将各类组件灵活组合成复杂的工作流图谱，还内置了强大的智能体开发套件（ADK），能够轻松实现工具调用、多智能体协作、上下文管理以及“人机协同”中的中断与恢复机制。\n\nEino 特别适合熟悉 Go 语言的后端工程师、系统架构师以及希望在高并发场景下落地 AI 能力的研发团队。其独特的技术亮点在于对 Go 并发特性的原生支持，以及像 DeepAgent 这样能自动拆解复杂任务、调度子智能体协同工作的高级模式。无论是快速搭建一个简单的对话机器人，还是构建能执行代码、搜索网络并分析数据的复杂自主智能体，Eino 都能提供清晰、稳健的代码实现路径，帮助团队以更","Eino 是一个专为 Go 语言开发者打造的大模型（LLM）应用开发框架。它汲取了 LangChain 和 Google ADK 等主流框架的设计理念，同时严格遵循 Go 语言的工程规范与习惯，旨在让开发者能用熟悉的语言高效构建 AI 应用。\n\n在开发大模型应用时，开发者常面临组件复用难、工作流编排复杂以及智能体（Agent）逻辑难以管理等挑战。Eino 通过提供标准化的可复用组件（如聊天模型、工具、检索器等），有效解决了这些问题。它不仅支持将各类组件灵活组合成复杂的工作流图谱，还内置了强大的智能体开发套件（ADK），能够轻松实现工具调用、多智能体协作、上下文管理以及“人机协同”中的中断与恢复机制。\n\nEino 特别适合熟悉 Go 语言的后端工程师、系统架构师以及希望在高并发场景下落地 AI 能力的研发团队。其独特的技术亮点在于对 Go 并发特性的原生支持，以及像 DeepAgent 这样能自动拆解复杂任务、调度子智能体协同工作的高级模式。无论是快速搭建一个简单的对话机器人，还是构建能执行代码、搜索网络并分析数据的复杂自主智能体，Eino 都能提供清晰、稳健的代码实现路径，帮助团队以更低的成本完成从原型到生产环境的交付。","# Eino\n\n![coverage](https:\u002F\u002Fraw.githubusercontent.com\u002Fcloudwego\u002Feino\u002Fbadges\u002F.badges\u002Fmain\u002Fcoverage.svg)\n[![Release](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Fcloudwego\u002Feino)](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Freleases)\n[![WebSite](https:\u002F\u002Fimg.shields.io\u002Fwebsite?up_message=cloudwego&url=https%3A%2F%2Fwww.cloudwego.io%2F)](https:\u002F\u002Fwww.cloudwego.io\u002F)\n[![License](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fcloudwego\u002Feino)](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fblob\u002Fmain\u002FLICENSE)\n[![Go Report Card](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcloudwego_eino_readme_2b4a70945b89.png)](https:\u002F\u002Fgoreportcard.com\u002Freport\u002Fgithub.com\u002Fcloudwego\u002Feino)\n[![OpenIssue](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fissues\u002Fcloudwego\u002Feino)](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Fkitex\u002Feino)\n[![ClosedIssue](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fissues-closed\u002Fcloudwego\u002Feino)](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fissues?q=is%3Aissue+is%3Aclosed)\n![Stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fcloudwego\u002Feino)\n![Forks](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fforks\u002Fcloudwego\u002Feino)\n\nEnglish | [中文](README.zh_CN.md)\n\n# Overview\n\n**Eino['aino]** is an LLM application development framework in Golang. It draws from LangChain, Google ADK, and other open-source frameworks, and is designed to follow Golang conventions.\n\nEino provides:\n- **[Components](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino-ext)**: reusable building blocks like `ChatModel`, `Tool`, `Retriever`, and `ChatTemplate`, with official implementations for OpenAI, Ollama, and more.\n- **Agent Development Kit (ADK)**: build AI agents with tool use, multi-agent coordination, context management, interrupt\u002Fresume for human-in-the-loop, and ready-to-use agent patterns.\n- **Composition**: connect components into graphs and workflows that can run standalone or be exposed as tools for agents.\n- **[Examples](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino-examples)**: working code for common patterns and real-world use cases.\n\n![](.github\u002Fstatic\u002Fimg\u002Feino\u002Feino_concept.jpeg)\n\n# Quick Start\n\n## ChatModelAgent\n\nConfigure a ChatModel, optionally add tools, and you have a working agent:\n\n```Go\nchatModel, _ := openai.NewChatModel(ctx, &openai.ChatModelConfig{\n    Model:  \"gpt-4o\",\n    APIKey: os.Getenv(\"OPENAI_API_KEY\"),\n})\n\nagent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{\n    Model: chatModel,\n})\n\nrunner := adk.NewRunner(ctx, adk.RunnerConfig{Agent: agent})\niter := runner.Query(ctx, \"Hello, who are you?\")\nfor {\n    event, ok := iter.Next()\n    if !ok {\n        break\n    }\n    fmt.Println(event.Message.Content)\n}\n```\n\nAdd tools to give the agent capabilities:\n\n```Go\nagent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{\n    Model: chatModel,\n    ToolsConfig: adk.ToolsConfig{\n        ToolsNodeConfig: compose.ToolsNodeConfig{\n            Tools: []tool.BaseTool{weatherTool, calculatorTool},\n        },\n    },\n})\n```\n\nThe agent handles the ReAct loop internally — it decides when to call tools and when to respond.\n\n→ [ChatModelAgent examples](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino-examples\u002Ftree\u002Fmain\u002Fadk\u002Fintro) · [docs](https:\u002F\u002Fwww.cloudwego.io\u002Fdocs\u002Feino\u002Fcore_modules\u002Feino_adk\u002Fagent_implementation\u002Fchat_model\u002F)\n\n## DeepAgent\n\nFor complex tasks, use DeepAgent. It breaks down problems into steps, delegates to sub-agents, and tracks progress:\n\n```Go\ndeepAgent, _ := 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{shellTool, pythonTool, webSearchTool},\n        },\n    },\n})\n\nrunner := adk.NewRunner(ctx, adk.RunnerConfig{Agent: deepAgent})\niter := runner.Query(ctx, \"Analyze the sales data in report.csv and generate a summary chart\")\n```\n\nDeepAgent can be configured to coordinate multiple specialized agents, run shell commands, execute Python code, and search the web.\n\n→ [DeepAgent example](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino-examples\u002Ftree\u002Fmain\u002Fadk\u002Fmultiagent\u002Fdeep) · [docs](https:\u002F\u002Fwww.cloudwego.io\u002Fdocs\u002Feino\u002Fcore_modules\u002Feino_adk\u002Fagent_implementation\u002Fdeepagents\u002F)\n\n## Composition\n\nWhen you need precise control over execution flow, use `compose` to build graphs and workflows:\n\n```Go\ngraph := compose.NewGraph[*Input, *Output]()\ngraph.AddLambdaNode(\"validate\", validateFn)\ngraph.AddChatModelNode(\"generate\", chatModel)\ngraph.AddLambdaNode(\"format\", formatFn)\n\ngraph.AddEdge(compose.START, \"validate\")\ngraph.AddEdge(\"validate\", \"generate\")\ngraph.AddEdge(\"generate\", \"format\")\ngraph.AddEdge(\"format\", compose.END)\n\nrunnable, _ := graph.Compile(ctx)\nresult, _ := runnable.Invoke(ctx, input)\n```\n\nCompositions can be exposed as tools for agents, bridging deterministic workflows with autonomous behavior:\n\n```Go\ntool, _ := graphtool.NewInvokableGraphTool(graph, \"data_pipeline\", \"Process and validate data\")\n\nagent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{\n    Model: chatModel,\n    ToolsConfig: adk.ToolsConfig{\n        ToolsNodeConfig: compose.ToolsNodeConfig{\n            Tools: []tool.BaseTool{tool},\n        },\n    },\n})\n```\n\nThis lets you build domain-specific pipelines with exact control, then let agents decide when to use them.\n\n→ [GraphTool examples](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino-examples\u002Ftree\u002Fmain\u002Fadk\u002Fcommon\u002Ftool\u002Fgraphtool) · [compose docs](https:\u002F\u002Fwww.cloudwego.io\u002Fdocs\u002Feino\u002Fcore_modules\u002Fchain_and_graph_orchestration\u002F)\n\n# Key Features\n\n## Component Ecosystem\n\nEino defines component abstractions (ChatModel, Tool, Retriever, Embedding, etc.) with official implementations for OpenAI, Claude, Gemini, Ark, Ollama, Elasticsearch, and more.\n\n→ [eino-ext](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino-ext)\n\n## Stream Processing\n\nEino automatically handles streaming throughout orchestration: concatenating, boxing, merging, and copying streams as data flows between nodes. Components only implement the streaming paradigms that make sense for them; the framework handles the rest.\n\n→ [docs](https:\u002F\u002Fwww.cloudwego.io\u002Fdocs\u002Feino\u002Fcore_modules\u002Fchain_and_graph_orchestration\u002Fstream_programming_essentials\u002F)\n\n## Callback Aspects\n\nInject logging, tracing, and metrics at fixed points (OnStart, OnEnd, OnError, OnStartWithStreamInput, OnEndWithStreamOutput) across components, graphs, and agents.\n\n→ [docs](https:\u002F\u002Fwww.cloudwego.io\u002Fdocs\u002Feino\u002Fcore_modules\u002Fchain_and_graph_orchestration\u002Fcallback_manual\u002F)\n\n## Interrupt\u002FResume\n\nAny agent or tool can pause execution for human input and resume from checkpoint. The framework handles state persistence and routing.\n\n→ [docs](https:\u002F\u002Fwww.cloudwego.io\u002Fdocs\u002Feino\u002Fcore_modules\u002Feino_adk\u002Fagent_hitl\u002F) · [examples](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino-examples\u002Ftree\u002Fmain\u002Fadk\u002Fhuman-in-the-loop)\n\n# Framework Structure\n\n![](.github\u002Fstatic\u002Fimg\u002Feino\u002Feino_framework.jpeg)\n\nThe Eino framework consists of:\n\n- Eino (this repo): Type definitions, streaming mechanism, component abstractions, orchestration, agent implementations, aspect mechanisms\n\n- [EinoExt](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino-ext): Component implementations, callback handlers, usage examples, evaluators, prompt optimizers\n\n- [Eino Devops](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino-ext\u002Ftree\u002Fmain\u002Fdevops): Visualized development and debugging\n\n- [EinoExamples](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino-examples): Example applications and best practices\n\n## Documentation\n\n- [Eino User Manual](https:\u002F\u002Fwww.cloudwego.io\u002Fzh\u002Fdocs\u002Feino\u002F)\n- [Eino: Quick Start](https:\u002F\u002Fwww.cloudwego.io\u002Fzh\u002Fdocs\u002Feino\u002Fquick_start\u002F)\n\n## Dependencies\n- Go 1.18 and above.\n\n## Code Style\n\nThis repo uses `golangci-lint`. Check locally with:\n\n```bash\ngolangci-lint run .\u002F...\n```\n\nRules enforced:\n- Exported functions, interfaces, packages, etc. should have GoDoc comments\n- Code should be formatted with `gofmt -s`\n- Import order should follow `goimports` (std -> third party -> local)\n\n## Security\n\nIf you discover a potential security issue in this project, or think you may\nhave discovered a security issue, we ask that you notify Bytedance Security via our [security center](https:\u002F\u002Fsecurity.bytedance.com\u002Fsrc) or [vulnerability reporting email](mailto:sec@bytedance.com?subject=Feedback%20On%20Eino).\n\nDo **not** create a public GitHub issue.\n\n## Contact\n- Membership: [COMMUNITY MEMBERSHIP](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Fcommunity\u002Fblob\u002Fmain\u002FCOMMUNITY_MEMBERSHIP.md)\n- Issues: [Issues](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fissues)\n- Lark: Scan the QR code below with [Feishu](https:\u002F\u002Fwww.feishu.cn\u002Fen\u002F) to join the CloudWeGo\u002Feino user group.\n\n&ensp;&ensp;&ensp; \u003Cimg src=\".github\u002Fstatic\u002Fimg\u002Feino\u002Flark_group_zh.png\" alt=\"LarkGroup\" width=\"200\"\u002F>\n\n## License\n\nThis project is licensed under the [Apache-2.0 License](LICENSE-APACHE).\n","# Eino\n\n![coverage](https:\u002F\u002Fraw.githubusercontent.com\u002Fcloudwego\u002Feino\u002Fbadges\u002F.badges\u002Fmain\u002Fcoverage.svg)\n[![Release](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Fcloudwego\u002Feino)](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Freleases)\n[![WebSite](https:\u002F\u002Fimg.shields.io\u002Fwebsite?up_message=cloudwego&url=https%3A%2F%2Fwww.cloudwego.io%2F)](https:\u002F\u002Fwww.cloudwego.io\u002F)\n[![License](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fcloudwego\u002Feino)](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fblob\u002Fmain\u002FLICENSE)\n[![Go Report Card](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcloudwego_eino_readme_2b4a70945b89.png)](https:\u002F\u002Fgoreportcard.com\u002Freport\u002Fgithub.com\u002Fcloudwego\u002Feino)\n[![OpenIssue](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fissues\u002Fcloudwego\u002Feino)](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Fkitex\u002Feino)\n[![ClosedIssue](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fissues-closed\u002Fcloudwego\u002Feino)](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fissues?q=is%3Aissue+is%3Aclosed)\n![Stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fcloudwego\u002Feino)\n![Forks](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fforks\u002Fcloudwego\u002Feino)\n\n英语 | [中文](README.zh_CN.md)\n\n# 概述\n\n**Eino['aino]** 是一个用 Golang 编写的 LLM 应用开发框架。它借鉴了 LangChain、Google ADK 等开源框架，并遵循 Golang 的编码规范设计。\n\nEino 提供：\n- **[组件](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino-ext)**：可复用的构建模块，如 `ChatModel`、`Tool`、`Retriever` 和 `ChatTemplate` 等，官方实现了 OpenAI、Ollama 等多种模型。\n- **Agent 开发套件 (ADK)**：用于构建具备工具使用、多智能体协作、上下文管理、人机交互中断与恢复等功能的 AI 代理，并提供开箱即用的代理模式。\n- **组合能力**：将组件连接成图和工作流，既可独立运行，也可作为工具供代理调用。\n- **[示例](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino-examples)**：常见模式和实际应用场景的可运行代码。\n\n![](.github\u002Fstatic\u002Fimg\u002Feino\u002Feino_concept.jpeg)\n\n# 快速入门\n\n## ChatModelAgent\n\n配置一个 ChatModel，可选地添加工具，即可得到一个可用的代理：\n\n```Go\nchatModel, _ := openai.NewChatModel(ctx, &openai.ChatModelConfig{\n    Model:  \"gpt-4o\",\n    APIKey: os.Getenv(\"OPENAI_API_KEY\"),\n})\n\nagent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{\n    Model: chatModel,\n})\n\nrunner := adk.NewRunner(ctx, adk.RunnerConfig{Agent: agent})\niter := runner.Query(ctx, \"你好，你是谁？\")\nfor {\n    event, ok := iter.Next()\n    if !ok {\n        break\n    }\n    fmt.Println(event.Message.Content)\n}\n```\n\n添加工具以赋予代理更多能力：\n\n```Go\nagent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{\n    Model: chatModel,\n    ToolsConfig: adk.ToolsConfig{\n        ToolsNodeConfig: compose.ToolsNodeConfig{\n            Tools: []tool.BaseTool{weatherTool, calculatorTool},\n        },\n    },\n})\n```\n\n代理会内部处理 ReAct 循环——决定何时调用工具、何时响应。\n\n→ [ChatModelAgent 示例](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino-examples\u002Ftree\u002Fmain\u002Fadk\u002Fintro) · [文档](https:\u002F\u002Fwww.cloudwego.io\u002Fdocs\u002Feino\u002Fcore_modules\u002Feino_adk\u002Fagent_implementation\u002Fchat_model\u002F)\n\n## DeepAgent\n\n对于复杂任务，可以使用 DeepAgent。它会将问题分解为多个步骤，委派给子代理，并跟踪进度：\n\n```Go\ndeepAgent, _ := 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{shellTool, pythonTool, webSearchTool},\n        },\n    },\n})\n\nrunner := adk.NewRunner(ctx, adk.RunnerConfig{Agent: deepAgent})\niter := runner.Query(ctx, \"分析 report.csv 中的销售数据并生成汇总图表\")\n```\n\nDeepAgent 可以配置为协调多个专业代理、执行 Shell 命令、运行 Python 代码以及进行网络搜索。\n\n→ [DeepAgent 示例](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino-examples\u002Ftree\u002Fmain\u002Fadk\u002Fmultiagent\u002Fdeep) · [文档](https:\u002F\u002Fwww.cloudwego.io\u002Fdocs\u002Feino\u002Fcore_modules\u002Feino_adk\u002Fagent_implementation\u002Fdeepagents\u002F)\n\n## 组合\n\n当需要精确控制执行流程时，可以使用 `compose` 构建图和工作流：\n\n```Go\ngraph := compose.NewGraph[*Input, *Output]()\ngraph.AddLambdaNode(\"validate\", validateFn)\ngraph.AddChatModelNode(\"generate\", chatModel)\ngraph.AddLambdaNode(\"format\", formatFn)\n\ngraph.AddEdge(compose.START, \"validate\")\ngraph.AddEdge(\"validate\", \"generate\")\ngraph.AddEdge(\"generate\", \"format\")\ngraph.AddEdge(\"format\", compose.END)\n\nrunnable, _ := graph.Compile(ctx)\nresult, _ := runnable.Invoke(ctx, input)\n```\n\n组合可以作为工具暴露给代理，从而将确定性的工作流与自主行为相结合：\n\n```Go\ntool, _ := graphtool.NewInvokableGraphTool(graph, \"data_pipeline\", \"处理并验证数据\")\n\nagent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{\n    Model: chatModel,\n    ToolsConfig: adk.ToolsConfig{\n        ToolsNodeConfig: compose.ToolsNodeConfig{\n            Tools: []tool.BaseTool{tool},\n        },\n    },\n})\n```\n\n这样就可以构建具有精确控制的领域专用管道，然后让代理自行决定何时使用它们。\n\n→ [GraphTool 示例](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino-examples\u002Ftree\u002Fmain\u002Fadk\u002Fcommon\u002Ftool\u002Fgraphtool) · [compose 文档](https:\u002F\u002Fwww.cloudwego.io\u002Fdocs\u002Feino\u002Fcore_modules\u002Fchain_and_graph_orchestration\u002F)\n\n# 核心特性\n\n## 组件生态\n\nEino 定义了组件抽象（ChatModel、Tool、Retriever、Embedding 等），并提供了针对 OpenAI、Claude、Gemini、Ark、Ollama、Elasticsearch 等的官方实现。\n\n→ [eino-ext](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino-ext)\n\n## 流式处理\n\nEino 在整个编排过程中自动处理流式数据：在节点间传递数据时，会进行流的拼接、封装、合并和复制等操作。组件只需实现与其自身相关的流式处理逻辑，其余部分由框架自动完成。\n\n→ [文档](https:\u002F\u002Fwww.cloudwego.io\u002Fdocs\u002Feino\u002Fcore_modules\u002Fchain_and_graph_orchestration\u002Fstream_programming_essentials\u002F)\n\n## 回调机制\n\n可在固定点位（OnStart、OnEnd、OnError、OnStartWithStreamInput、OnEndWithStreamOutput）为组件、图和代理注入日志记录、链路追踪和指标监控功能。\n\n→ [文档](https:\u002F\u002Fwww.cloudwego.io\u002Fdocs\u002Feino\u002Fcore_modules\u002Fchain_and_graph_orchestration\u002Fcallback_manual\u002F)\n\n## 中断与恢复\n\n任何代理或工具都可以暂停执行，等待人工输入后从检查点继续运行。框架会负责状态的持久化和路由。\n\n→ [文档](https:\u002F\u002Fwww.cloudwego.io\u002Fdocs\u002Feino\u002Fcore_modules\u002Feino_adk\u002Fagent_hitl\u002F) · [示例](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino-examples\u002Ftree\u002Fmain\u002Fadk\u002Fhuman-in-the-loop)\n\n# 框架结构\n\n![](.github\u002Fstatic\u002Fimg\u002Feino\u002Feino_framework.jpeg)\n\nEino 框架由以下部分组成：\n\n- Eino（本仓库）：类型定义、流式处理机制、组件抽象、编排、代理实现、切面机制\n- [EinoExt](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino-ext)：组件实现、回调处理器、使用示例、评估器、提示词优化器\n- [Eino Devops](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino-ext\u002Ftree\u002Fmain\u002Fdevops)：可视化开发与调试工具\n- [EinoExamples](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino-examples)：示例应用及最佳实践\n\n## 文档\n\n- [Eino 用户手册](https:\u002F\u002Fwww.cloudwego.io\u002Fzh\u002Fdocs\u002Feino\u002F)\n- [Eino：快速入门](https:\u002F\u002Fwww.cloudwego.io\u002Fzh\u002Fdocs\u002Feino\u002Fquick_start\u002F)\n\n## 依赖\n\n- Go 1.18 及以上版本。\n\n## 代码风格\n\n本仓库使用 `golangci-lint` 进行代码检查。您可以在本地运行以下命令进行检查：\n\n```bash\ngolangci-lint run .\u002F...\n```\n\n强制执行的规则包括：\n- 导出的函数、接口、包等应包含 GoDoc 注释。\n- 代码应使用 `gofmt -s` 格式化。\n- 导入顺序应遵循 `goimports` 规则（标准库 -> 第三方库 -> 本地包）。\n\n## 安全\n\n如果您在本项目中发现潜在的安全问题，或认为可能发现了安全漏洞，请通过字节跳动安全中心 ([security.bytedance.com\u002Fsrc](https:\u002F\u002Fsecurity.bytedance.com\u002Fsrc)) 或漏洞上报邮箱 (mailto:sec@bytedance.com?subject=Feedback%20On%20Eino) 向字节跳动安全团队报告。\n\n请勿创建公开的 GitHub 问题。\n\n## 联系方式\n\n- 成员加入：[社区成员加入](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Fcommunity\u002Fblob\u002Fmain\u002FCOMMUNITY_MEMBERSHIP.md)\n- 问题反馈：[Issues](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fissues)\n- Lark：使用 [飞书](https:\u002F\u002Fwww.feishu.cn\u002Fen\u002F) 扫描下方二维码，加入 CloudWeGo\u002FEino 用户群。\n\n&ensp;&ensp;&ensp; \u003Cimg src=\".github\u002Fstatic\u002Fimg\u002Feino\u002Flark_group_zh.png\" alt=\"LarkGroup\" width=\"200\"\u002F>\n\n## 许可证\n\n本项目采用 [Apache-2.0 许可证](LICENSE-APACHE)。","# Eino 快速上手指南\n\nEino 是一个基于 Go 语言的大语言模型（LLM）应用开发框架。它借鉴了 LangChain 和 Google ADK 等框架的设计理念，并严格遵循 Go 语言的工程规范，提供组件化、流式处理和智能体编排等核心能力。\n\n## 环境准备\n\n在开始之前，请确保您的开发环境满足以下要求：\n\n*   **操作系统**：Linux, macOS 或 Windows\n*   **Go 版本**：Go 1.18 或更高版本\n*   **依赖管理**：确保已安装 `go` 命令并配置好 `GOPATH` 和 `GO111MODULE`\n\n## 安装步骤\n\n使用 Go Module 初始化项目并安装 Eino 核心库：\n\n```bash\ngo mod init my-eino-app\ngo get github.com\u002Fcloudwego\u002Feino@latest\n```\n\n如果您需要使用官方提供的模型适配器（如 OpenAI、Ollama 等），还需安装扩展库 `eino-ext`：\n\n```bash\ngo get github.com\u002Fcloudwego\u002Feino-ext\u002Fcomponents\u002Fmodel\u002Fopenai@latest\n```\n\n> **提示**：国内开发者若遇到下载缓慢问题，可配置国内代理：\n> `export GOPROXY=https:\u002F\u002Fgoproxy.cn,direct`\n\n## 基本使用\n\n以下示例展示如何快速构建一个具备对话能力的 AI 智能体（Agent）。\n\n### 1. 基础对话智能体\n\n配置 ChatModel 并创建 Agent，即可处理用户查询：\n\n```Go\npackage main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com\u002Fcloudwego\u002Feino\u002Fadk\"\n\t\"github.com\u002Fcloudwego\u002Feino-ext\u002Fcomponents\u002Fmodel\u002Fopenai\"\n)\n\nfunc main() {\n\tctx := context.Background()\n\n\t\u002F\u002F 1. 初始化 ChatModel (以 OpenAI 为例)\n\tchatModel, err := openai.NewChatModel(ctx, &openai.ChatModelConfig{\n\t\tModel:  \"gpt-4o\",\n\t\tAPIKey: os.Getenv(\"OPENAI_API_KEY\"),\n\t})\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\t\u002F\u002F 2. 创建 ChatModelAgent\n\tagent, err := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{\n\t\tModel: chatModel,\n\t})\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\t\u002F\u002F 3. 运行 Runner 并处理流式响应\n\trunner := adk.NewRunner(ctx, adk.RunnerConfig{Agent: agent})\n\titer := runner.Query(ctx, \"Hello, who are you?\")\n\t\n\tfor {\n\t\tevent, ok := iter.Next()\n\t\tif !ok {\n\t\t\tbreak\n\t\t}\n\t\tfmt.Println(event.Message.Content)\n\t}\n}\n```\n\n### 2. 赋予工具能力 (Tool Use)\n\n通过添加工具，让智能体能够执行具体任务（如查询天气、计算等）。Eino 内部会自动处理 ReAct 循环：\n\n```Go\n\u002F\u002F 假设已定义 weatherTool 和 calculatorTool\nagent, err := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{\n\tModel: chatModel,\n\tToolsConfig: adk.ToolsConfig{\n\t\tToolsNodeConfig: compose.ToolsNodeConfig{\n\t\t\tTools: []tool.BaseTool{weatherTool, calculatorTool},\n\t\t},\n\t},\n})\n```\n\n### 3. 工作流编排 (Composition)\n\n对于需要精确控制执行流程的场景，可以使用 `compose` 构建图结构工作流：\n\n```Go\ngraph := compose.NewGraph[*Input, *Output]()\ngraph.AddLambdaNode(\"validate\", validateFn)\ngraph.AddChatModelNode(\"generate\", chatModel)\ngraph.AddLambdaNode(\"format\", formatFn)\n\n\u002F\u002F 定义执行顺序\ngraph.AddEdge(compose.START, \"validate\")\ngraph.AddEdge(\"validate\", \"generate\")\ngraph.AddEdge(\"generate\", \"format\")\ngraph.AddEdge(\"format\", compose.END)\n\n\u002F\u002F 编译并运行\nrunnable, err := graph.Compile(ctx)\nif err != nil {\n\tpanic(err)\n}\nresult, err := runnable.Invoke(ctx, input)\n```\n\n更多复杂场景（如多智能体协作 DeepAgent、人机交互中断\u002F恢复等）请参考 [官方示例仓库](https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino-examples)。","某电商公司的后端团队需要构建一个能自动分析销售数据、调用内部 API 查询库存并生成可视化报告的智能助手。\n\n### 没有 eino 时\n- **重复造轮子**：开发人员需手动编写大量样板代码来管理 LLM 对话状态、解析工具调用参数及处理 ReAct 循环，开发效率极低。\n- **多代理协作困难**：当任务需要“数据分析专家”和“绘图专家”协同工作时，缺乏标准机制来协调子代理间的任务分发与上下文传递。\n- **流程僵化难维护**：硬编码的业务逻辑导致无法灵活插入“人工确认”环节，一旦模型判断失误，整个自动化流程容易中断且难以恢复。\n- **生态集成繁琐**：对接不同的模型供应商（如 OpenAI、Ollama）或自定义工具时，需要为每种情况单独适配接口，代码耦合度高。\n\n### 使用 eino 后\n- **开箱即用的代理能力**：利用 `ChatModelAgent` 直接内置 ReAct 循环，只需配置模型和工具列表，即可自动完成意图识别与工具调用，大幅减少样板代码。\n- **强大的多代理编排**：通过 `DeepAgent` 轻松拆解复杂任务，自动调度专门的子代理处理特定步骤（如先查库再绘图），并完美管理中间上下文。\n- **灵活的人机交互支持**：原生支持中断与恢复机制，可在关键决策点暂停流程等待人工指令，确保复杂业务场景下的执行可靠性。\n- **标准化的组件生态**：基于统一的 `Component` 接口，无缝切换底层模型或复用社区提供的检索器、模板等模块，显著降低集成与维护成本。\n\neino 让 Go 语言开发者能以符合语言习惯的方式，快速构建出具备复杂推理与协作能力的生产级 AI 应用。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcloudwego_eino_317992a8.png","cloudwego","CloudWeGo","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fcloudwego_54577fb8.png","A leading practice for building enterprise-class cloud native architectures!",null,"conduct@cloudwego.io","https:\u002F\u002Fwww.cloudwego.io\u002F","https:\u002F\u002Fgithub.com\u002Fcloudwego",[82,86],{"name":83,"color":84,"percentage":85},"Go","#00ADD8",99.6,{"name":87,"color":88,"percentage":89},"Shell","#89e051",0.4,10583,841,"2026-04-13T03:46:09","Apache-2.0","Linux, macOS, Windows","未说明",{"notes":97,"python":98,"dependencies":99},"这是一个基于 Go 语言 (Golang) 的 LLM 应用开发框架，而非 Python 项目。因此不需要 Python 环境、GPU 或特定的深度学习库（如 PyTorch）。实际运行时的资源需求取决于所调用的大模型服务（如本地运行的 Ollama 或云端 API）。建议使用 goimports 管理导入顺序，并遵循 GoDoc 注释规范。","不适用 (基于 Go 语言)",[100,101],"Go >= 1.18","golangci-lint (用于代码检查)",[35,14,13,15],[104,105,106,107,108,109,110],"ai","langchaingo","ai-application","llm-application","langchain-for-go","ai-framework","langchain","2026-03-27T02:49:30.150509","2026-04-13T17:41:45.291620",[114,119,124,129,134,139],{"id":115,"question_zh":116,"answer_zh":117,"source_url":118},31780,"在使用 DeepSeek 等模型进行流式输出时，为什么无法正确检测 Tool Call 或导致流式中断？","这是因为模型在调用 Tool 前会先输出一些 Content 内容，导致框架无法立即判断是否需要调用工具。若使用了自定义 streamToolCallChecker 后仍无法流式输出，通常是因为 MessageFuture 的使用时机不对。\n\n正确做法是：必须先开启一个协程去读取 MessageFuture 的输出流，然后再启动 Stream 运行。如果先开启 Stream 再读取 MessageFuture，会导致阻塞。\n\n参考代码逻辑：\n1. 使用 `react.WithMessageFuture()` 获取 future 和 option。\n2. 启动一个 goroutine，在其中调用 `msgFuture.GetMessageStreams()` 并循环读取 `iter.Next()` 和 `msgSr.Recv()`。\n3. 在协程启动后，再调用 `runner.Stream` 并传入 `flowagent.GetComposeOptions(msgFutureOpt)`。\n\n这样即可同时实现流式输出和 Tool Call 的正确检测。","https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fissues\u002F806",{"id":120,"question_zh":121,"answer_zh":122,"source_url":123},31781,"ReAct 模式在使用流式（Stream）方法时报错 'EOF' 或无法读取流式输入数据，原因是什么？","该问题通常不是框架本身的 Bug，而是底层推理引擎（如 sglang 或某些 Ollama 配置）不支持带工具调用（Tools）的流式处理。\n\n当传入 Tools 参数时，这些引擎可能会以 `content-type: application\u002Fjson` 的形式一次性返回完整数据，而不是标准的 SSE (Server-Sent Events) 流式格式，导致客户端在尝试按流读取时直接遇到 EOF 错误。\n\n解决方案：检查所使用的推理后端是否支持“带工具调用的流式输出”。如果不支持，需切换至支持该特性的后端，或在非流式模式下使用工具调用功能。","https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fissues\u002F120",{"id":125,"question_zh":126,"answer_zh":127,"source_url":128},31782,"如何实现工作流的局部暂停，而不是让整个图全局卡住？","目前节点返回 `InterruptAndRerun` 会导致整个图暂停。若希望实现“局部暂停”（即一个节点中断等待时，其他无关节点继续执行），框架原生可能不直接支持这种复杂的并行调度。\n\n建议的变通方案：\n1. **业务层控制**：在节点内部逻辑中处理等待，例如监听一个 Redis Key 或 Channel。当需要暂停时，节点进入等待状态，而其他节点可继续执行。\n2. **利用 Context**：确保工作流传入的 context 起作用，利用 Go 的父子 context 信号机制。虽然这主要用于取消任务，但配合外部存储（如 Redis 保存节点状态）可实现类似断点续传的效果。\n3. **官方建议**：对于简单的中断需求，可以尝试使用 `compose.WithGraphInterrupt`，但这通常仍是针对整个图的干预。复杂的局部暂停需结合业务代码自行实现状态管理。","https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fissues\u002F523",{"id":130,"question_zh":131,"answer_zh":132,"source_url":133},31783,"DeepSeek ReactAgent 在流式调用工具时出现无法调用工具的问题，如何解决？","这是 DeepSeek 模型在流式模式下处理 Tool Call 的特殊行为导致的。官方文档中有相关说明：模型可能在输出最终答案前就尝试调用工具，或者在流式过程中工具调用的信号识别存在延迟。\n\n解决方法：\n1. **查阅官方文档**：仔细阅读 Eino 关于 DeepSeek 模型集成的文档部分，通常会有针对该模型的特定配置或 MessageModifier 建议。\n2. **调整提示词或配置**：确保输入给 Agent 的 Prompt 清晰明确，有时需要显式引导模型先思考再调用工具。\n3. **非流式降级**：如果流式调用工具始终不稳定，考虑在该特定场景下暂时关闭流式模式（Stream=false），待工具调用完成后再以流式输出结果（如果业务允许）。\n4. **更新版本**：确认使用的是最新版本的 eino 和 deepseek provider，维护者可能已修复相关解析逻辑。","https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fissues\u002F613",{"id":135,"question_zh":136,"answer_zh":137,"source_url":138},31784,"Eino 的可视化图表编辑器（Visual Graph Editor）是否支持 Web 浏览器或 VS Code？","目前 Eino 的可视化图表编辑器仅作为 IDE 插件提供，主要支持 GoLand（付费软件）。\n\n关于其他平台的支持情况：\n- **VS Code**：目前没有官方支持的 VS Code 插件版本。\n- **Web 浏览器**：官方暂无将编辑器部署到 Web 端的计划，因为目前需求量较小。\n- **开源情况**：该可视化编辑器插件的代码并未开源，因此社区无法自行将其移植到 Web 或其他 IDE。\n\n如果必须在非 GoLand 环境下开发，目前只能通过编写代码来定义图结构，无法使用可视化的拖拽编辑功能。","https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fissues\u002F109",{"id":140,"question_zh":141,"answer_zh":142,"source_url":143},31785,"Eino 是否支持自定义多节点输出的合并（Merge）方法，而不仅仅是默认的 Map 合并？","是的，Eino 支持自定义合并方法。默认情况下，多个节点的输出合并仅支持 Map 类型。\n\n若要自定义合并逻辑（例如合并切片、结构体或其他复杂类型）：\n1. **注册自定义函数**：使用框架提供的注册函数（如 `RegisterValuesMergeFunc[T any]`），为特定类型 `T` 注册一个合并函数。该函数接收一个 `[]T` 类型的切片，返回合并后的单个 `T` 对象和 error。\n2. **优先级**：框架在合并输出时，会优先检查是否注册了针对该类型的自定义合并函数。如果存在，则使用自定义逻辑；否则回退到默认的 Map 合并行为。\n\n这使得用户可以灵活处理 Fan-In 场景下的数据聚合，不再受限于 Map 结构。","https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fissues\u002F132",[145,150,155,160,165,170,175,180,185,190,195,200,205,209,214,219,224,229,234,239],{"id":146,"version":147,"summary_zh":148,"released_at":149},238990,"v0.9.0-alpha.15","## 变更内容\n* 修复（adk）：在 ChatModelAgent 中传播缺失的 ToolsNodeConfig 字段，由 @JonXSnow 在 https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F945 中完成。\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fcompare\u002Fv0.9.0-alpha.14...v0.9.0-alpha.15","2026-04-10T08:24:39",{"id":151,"version":152,"summary_zh":153,"released_at":154},238991,"v0.9.0-alpha.14","## 变更内容\n* 功能（adk）：添加 ChatModel 的故障转移支持，由 @fanlv 在 https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F885 中实现\n* 功能：工具搜索，由 @meguminnnnnnnnn 在 https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F884 中实现\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fcompare\u002Fv0.8.8...v0.9.0-alpha.14","2026-04-09T09:53:44",{"id":156,"version":157,"summary_zh":158,"released_at":159},238992,"v0.8.8","## 变更内容\n* 功能性改进（ADK）：添加 ClearAtLeastTokens 和 ClearExcludeTools 用于规约…，由 @N3kox 在 https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F912 中提交\n* 构建优化（ADK）：使 ChatModelAgent 的 Name\u002FDescription 可选，并在 AgentTool.Info 中进行验证，由 @luohq-bytedance 在 https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F936 中提交\n* 功能性改进（ADK）：规约中间件新增 TruncResult.StreamToolResult，由 @N3kox 在 https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F941 中提交\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fcompare\u002Fv0.8.7...v0.8.8","2026-04-09T09:53:15",{"id":161,"version":162,"summary_zh":163,"released_at":164},238993,"v0.9.0-alpha.13","## 变更内容\n* 功能性改进（adk）：优化 TurnLoop 的停止清理逻辑，并添加 StopOption 控制选项，由 @shentongmartin 在 https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F925 中实现。\n* 功能性改进（compose）：在 ToolsNode 中支持工具名称和参数别名，由 @JonXSnow 在 https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F931 中实现。\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fcompare\u002Fv0.8.7...v0.9.0-alpha.13","2026-04-08T06:14:18",{"id":166,"version":167,"summary_zh":168,"released_at":169},238994,"v0.8.7","## 变更内容\n* docs(schema): 由 @iwen-conf 在 https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F919 中修复了无效的 StreamReader Recv 示例\n* fix(adk): 由 @shentongmartin 在 https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F924 中改进了恢复错误信息，以避免暴露内部类型\n* feat(skill): 由 @ohxiaowo 在 https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F905 中为 fork 技能执行和工具参数添加了扩展钩子\n\n## 新贡献者\n* @iwen-conf 在 https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F919 中完成了首次贡献\n* @ohxiaowo 在 https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F905 中完成了首次贡献\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fcompare\u002Fv0.8.6...v0.8.7","2026-04-07T04:12:24",{"id":171,"version":172,"summary_zh":173,"released_at":174},238995,"v0.9.0-alpha.12","## 变更内容\n* 修复（adk）：防止在代理被取消后，孤立的工具协程发送事件时出现恐慌，由 @shentongmartin 在 https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F929 中实现。\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fcompare\u002Fv0.9.0-alpha.11...v0.9.0-alpha.12","2026-04-02T12:18:35",{"id":176,"version":177,"summary_zh":178,"released_at":179},238996,"v0.9.0-alpha.11","## 变更内容\n* 功能新增（adk）：导出 NewEventSenderToolWrapper，支持自定义工具事件位置，由 @shentongmartin 在 https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F926 中实现。\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fcompare\u002Fv0.8.6...v0.9.0-alpha.11","2026-04-01T03:46:31",{"id":181,"version":182,"summary_zh":183,"released_at":184},238997,"v0.8.6","## 变更内容\n* 功能（ADK）：将读取限制的默认值从后端移至工具层，由 @zhuangjie1125 在 https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F908 中完成。\n* 文档：修复漏洞报告邮件链接，由 @alex2wong 在 https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F519 中完成。\n* 修复（Flow）：防止在嵌套图中使用代理时，WithMessageFuture 出现恐慌，由 @shentongmartin 在 https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F828 中完成。\n* 修复（Schema）：StreamReaderWithConvert 的 errWrapper 应在 ErrNoValue 时继续处理，由 @shentongmartin 在 https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F917 中完成。\n* 修复（ADK）：对未注册的 RunLocalValue 类型进行快速失败处理，由 @shentongmartin 在 https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F901 中完成。\n* 修复（Schema）：移除 WithErrWrapper 路径中的冗余 ErrNoValue 处理，由 @shentongmartin 在 https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F918 中完成。\n\n## 新贡献者\n* @alex2wong 在 https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F519 中完成了首次贡献。\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fcompare\u002Fv0.8.5...v0.8.6","2026-04-01T03:46:01",{"id":186,"version":187,"summary_zh":188,"released_at":189},238998,"v0.9.0-alpha.10","## 变更内容\n* 修复（adk）：当 TurnLoop 处于空闲状态时，跳过保存检查点的操作，由 @shentongmartin 在 https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F916 中完成。\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fcompare\u002Fv0.9.0-alpha.9...v0.9.0-alpha.10","2026-03-27T03:47:31",{"id":191,"version":192,"summary_zh":193,"released_at":194},238999,"v0.9.0-alpha.9","## 变更内容\n* 重构（adk）：由 @shentongmartin 在 https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F835 中将 TurnLoop 替换为基于 push 的 API\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fcompare\u002Fv0.9.0-alpha.8...v0.9.0-alpha.9","2026-03-26T11:45:27",{"id":196,"version":197,"summary_zh":198,"released_at":199},239000,"v0.8.5","## What's Changed\r\n* feat(adk): add ContextMessages trigger for summarization by @mrh997 in https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F898\r\n* feat(adk): support user message filter for summarization by @mrh997 in https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F904\r\n* test(adk): add WrapToolCall ToolMiddleware tests by @zhuangjie1125 in https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F906\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fcompare\u002Fv0.8.4...v0.8.5","2026-03-24T10:23:45",{"id":201,"version":202,"summary_zh":203,"released_at":204},239001,"v0.9.0-alpha.8","## What's Changed\r\n* feat(adk): add ContextMessages trigger for summarization by @mrh997 in https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F898\r\n* feat(adk): support user message filter for summarization by @mrh997 in https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F904\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fcompare\u002Fv0.8.4...v0.9.0-alpha.8","2026-03-23T11:22:00",{"id":206,"version":207,"summary_zh":77,"released_at":208},239002,"v0.9.0-alpha.7","2026-03-18T10:12:23",{"id":210,"version":211,"summary_zh":212,"released_at":213},239003,"v0.8.4","## What's Changed\r\n* fix(adk): harden checkpoint resume compatibility by @shentongmartin in https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F896\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fcompare\u002Fv0.8.3...v0.8.4","2026-03-18T10:02:56",{"id":215,"version":216,"summary_zh":217,"released_at":218},239004,"v0.9.0-alpha.6","## What's Changed\r\n* feat(adk): add agentmd middleware for auto-injecting Agents.md into m… by @fanlv in https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F882\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fcompare\u002Fv0.9.0-alpha.4...v0.9.0-alpha.6","2026-03-17T13:53:44",{"id":220,"version":221,"summary_zh":222,"released_at":223},239005,"v0.9.0-alpha.5","## What's Changed\r\n* fix(adk): register type for summarization mw by @mrh997 in https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F890\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fcompare\u002Fv0.8.2...v0.9.0-alpha.5","2026-03-17T13:49:55",{"id":225,"version":226,"summary_zh":227,"released_at":228},239006,"v0.8.3","ATTENTION: Recommend to upgrade to v0.8.4 and later for checkpoint compatibility reasons.\r\n\r\n## What's Changed\r\n* fix(adk): register type for summarization mw by @mrh997 in https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F890\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fcompare\u002Fv0.8.2...v0.8.3","2026-03-16T17:03:11",{"id":230,"version":231,"summary_zh":232,"released_at":233},239007,"v0.8.2","ATTENTION: Recommend to upgrade to v0.8.4 and later for checkpoint compatibility reasons.\r\n\r\n## What's Changed\r\n* feat: add dev and AI setup scripts by @shentongmartin in https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F856\r\n* fix(adk): preserve multimodal content fields in rewriteMessage by @shentongmartin in https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F847\r\n* feat(schema): convToolOutputPartToMessageInputPart transmit tool extra by @N3kox in https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F879\r\n* fix(schema): add missing CompletionTokensDetails.ReasoningTokens handling in ConcatMessages by @jesse-engineer in https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F886\r\n\r\n## New Contributors\r\n* @jesse-engineer made their first contribution in https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F886\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fcompare\u002Fv0.8.1...v0.8.2","2026-03-15T13:47:32",{"id":235,"version":236,"summary_zh":237,"released_at":238},239008,"v0.9.0-alpha.4","## What's Changed\r\n* feat: add json tag for agentic message by @mrh997 in https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F880\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fcompare\u002Fv0.9.0-alpha.3...v0.9.0-alpha.4","2026-03-13T02:55:18",{"id":240,"version":241,"summary_zh":242,"released_at":243},239009,"v0.9.0-alpha.3","## What's Changed\r\n* feat: add dev and AI setup scripts by @shentongmartin in https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fpull\u002F856\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fcloudwego\u002Feino\u002Fcompare\u002Fv0.8.1...v0.9.0-alpha.3","2026-03-12T03:21:40"]