[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-5013":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":23,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":33,"readmeContent":34,"aiSummary":35,"trendingCount":16,"starSnapshotCount":16,"syncStatus":36,"lastSyncTime":37,"discoverSource":38},5013,"eino","cloudwego\u002Feino","cloudwego","The ultimate LLM\u002FAI application development framework in Go.","https:\u002F\u002Fwww.cloudwego.io\u002Fdocs\u002Feino\u002F",null,"Go",11766,961,72,81,0,23,119,611,112,43.95,"Apache License 2.0",false,"main",[26,27,28,29,30,31,32],"ai","ai-application","ai-framework","langchain","langchain-for-go","langchaingo","llm-application","2026-06-12 02:01:07","# 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\u002Fgoreportcard.com\u002Fbadge\u002Fgithub.com\u002Fcloudwego\u002Feino)](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 是一个用于开发 LLM\u002FAI 应用的 Go 语言框架。它借鉴了 LangChain 和 Google ADK 等开源框架的设计，并遵循 Go 语言的惯例，提供了包括 ChatModel、Tool、Retriever 和 ChatTemplate 在内的可复用组件，以及构建 AI 代理所需的 Agent Development Kit (ADK)，支持工具使用、多代理协调、上下文管理和中断\u002F恢复等功能。此外，Eino 还允许将这些组件组合成图和工作流，既可以独立运行，也可以作为其他代理的工具。此框架适用于需要快速搭建具有复杂交互能力的 AI 应用场景，如智能客服、自动化助手等。",2,"2026-06-11 03:02:04","top_language"]