"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 æ¡æ¶\", \"æå»ºæºè½ä½\"."
Install
npx skillscat add fanqingxuan/awesome-skills/eino Install via the SkillsCat registry.
Eino æ¡æ¶å¼åæå
Eino æ¯åèè·³å¨å¼æºç Golang LLM/AI åºç¨å¼åæ¡æ¶ï¼ä¸æ³¨äº Agent å¼åã工使µç¼æãå·¥å ·è°ç¨ã
ç¯å¢è¦æ±
- Go çæ¬: 1.18+
- 代ç è§è: golangci-lint
å¿«éå¼å§
å®è£
go get github.com/cloudwego/eino
go get github.com/cloudwego/eino-ext项ç®åå§å
# å建项ç®
mkdir my-eino-app && cd my-eino-app
go mod init my-eino-app
# å®è£
ä¾èµ
go get github.com/cloudwego/eino
go get github.com/cloudwego/eino-ext/components/model/openaiæ ¸å¿ç¤ºä¾
1. ChatModelAgentï¼åºç¡ Agentï¼
æç®åçå¯¹è¯ Agentï¼
package main
import (
"context"
"fmt"
"os"
"github.com/cloudwego/eino-ext/components/model/openai"
"github.com/cloudwego/eino/adk"
)
func main() {
ctx := context.Background()
// é
ç½® ChatModel
chatModel, err := openai.NewChatModel(ctx, &openai.ChatModelConfig{
Model: "gpt-4o",
APIKey: os.Getenv("OPENAI_API_KEY"),
})
if err != nil {
panic(err)
}
// å建 Agent
agent, err := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
Model: chatModel,
})
if err != nil {
panic(err)
}
// è¿è¡ Agent
runner := adk.NewRunner(ctx, adk.RunnerConfig{Agent: agent})
iter := runner.Query(ctx, "Hello, who are you?")
for {
event, ok := iter.Next()
if !ok {
break
}
fmt.Println(event.Message.Content)
}
}2. å¸¦å·¥å ·ç Agent
æ·»å å·¥å ·è°ç¨è½åï¼
package main
import (
"context"
"fmt"
"os"
"github.com/cloudwego/eino-ext/components/model/openai"
"github.com/cloudwego/eino/adk"
"github.com/cloudwego/eino/compose"
"github.com/cloudwego/eino/components/tool"
)
// å®ä¹å¤©æ°å·¥å
·
type WeatherTool struct{}
func (w *WeatherTool) Info(ctx context.Context) (*tool.Info, error) {
return &tool.Info{
Name: "get_weather",
Desc: "Get current weather for a location",
ParamsOneOf: tool.NewParamsOneOfByParams(
map[string]*tool.ParameterInfo{
"location": {
Type: "string",
Desc: "City name",
Required: true,
},
},
),
}, nil
}
func (w *WeatherTool) InvokableRun(ctx context.Context, argumentsInJSON string) (string, error) {
// å®é
åºè¯¥è°ç¨å¤©æ° API
return fmt.Sprintf("Weather in %s: Sunny, 25°C", argumentsInJSON), nil
}
func main() {
ctx := context.Background()
chatModel, _ := openai.NewChatModel(ctx, &openai.ChatModelConfig{
Model: "gpt-4o",
APIKey: os.Getenv("OPENAI_API_KEY"),
})
// å建工å
·
weatherTool := &WeatherTool{}
// å建带工å
·ç Agent
agent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
Model: chatModel,
ToolsConfig: adk.ToolsConfig{
ToolsNodeConfig: compose.ToolsNodeConfig{
Tools: []tool.BaseTool{weatherTool},
},
},
})
runner := adk.NewRunner(ctx, adk.RunnerConfig{Agent: agent})
iter := runner.Query(ctx, "What's the weather in Beijing?")
for {
event, ok := iter.Next()
if !ok {
break
}
fmt.Println(event.Message.Content)
}
}3. DeepAgentï¼å¤æä»»å¡ï¼
å¤ç夿夿¥éª¤ä»»å¡ï¼
package main
import (
"context"
"os"
"github.com/cloudwego/eino-ext/components/model/openai"
"github.com/cloudwego/eino/adk"
"github.com/cloudwego/eino/adk/deep"
"github.com/cloudwego/eino/compose"
"github.com/cloudwego/eino/components/tool"
)
func main() {
ctx := context.Background()
chatModel, _ := openai.NewChatModel(ctx, &openai.ChatModelConfig{
Model: "gpt-4o",
APIKey: os.Getenv("OPENAI_API_KEY"),
})
// å建å Agent
researchAgent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
Model: chatModel,
})
codeAgent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
Model: chatModel,
})
// å建 DeepAgent
deepAgent, _ := deep.New(ctx, &deep.Config{
ChatModel: chatModel,
SubAgents: []adk.Agent{researchAgent, codeAgent},
ToolsConfig: adk.ToolsConfig{
ToolsNodeConfig: compose.ToolsNodeConfig{
Tools: []tool.BaseTool{
// shellTool, pythonTool, webSearchTool
},
},
},
})
runner := adk.NewRunner(ctx, adk.RunnerConfig{Agent: deepAgent})
iter := runner.Query(ctx, "Analyze the sales data and generate a report")
for {
event, ok := iter.Next()
if !ok {
break
}
// å¤çäºä»¶
}
}4. Graph ç¼æ
精确æ§å¶æ§è¡æµç¨ï¼
package main
import (
"context"
"os"
"github.com/cloudwego/eino-ext/components/model/openai"
"github.com/cloudwego/eino/compose"
)
type Input struct {
Text string
}
type Output struct {
Result string
}
func main() {
ctx := context.Background()
chatModel, _ := openai.NewChatModel(ctx, &openai.ChatModelConfig{
Model: "gpt-4o",
APIKey: os.Getenv("OPENAI_API_KEY"),
})
// å建 Graph
graph := compose.NewGraph[*Input, *Output]()
// æ·»å èç¹
graph.AddLambdaNode("validate", func(ctx context.Context, input *Input) (*Input, error) {
// éªè¯é»è¾
return input, nil
})
graph.AddChatModelNode("generate", chatModel)
graph.AddLambdaNode("format", func(ctx context.Context, input *Input) (*Output, error) {
// æ ¼å¼åé»è¾
return &Output{Result: input.Text}, nil
})
// æ·»å è¾¹
graph.AddEdge(compose.START, "validate")
graph.AddEdge("validate", "generate")
graph.AddEdge("generate", "format")
graph.AddEdge("format", compose.END)
// ç¼è¯å¹¶è¿è¡
runnable, _ := graph.Compile(ctx)
result, _ := runnable.Invoke(ctx, &Input{Text: "Hello"})
println(result.Result)
}5. Graph è½¬å·¥å ·
å°å·¥ä½æµæ´é²ä¸º Agent å·¥å ·ï¼
package main
import (
"context"
"os"
"github.com/cloudwego/eino-ext/components/model/openai"
"github.com/cloudwego/eino/adk"
"github.com/cloudwego/eino/compose"
"github.com/cloudwego/eino/components/tool"
"github.com/cloudwego/eino/components/tool/graphtool"
)
func main() {
ctx := context.Background()
chatModel, _ := openai.NewChatModel(ctx, &openai.ChatModelConfig{
Model: "gpt-4o",
APIKey: os.Getenv("OPENAI_API_KEY"),
})
// å建 Graph
graph := compose.NewGraph[*Input, *Output]()
// ... æ·»å èç¹åè¾¹
// å° Graph 转æ¢ä¸ºå·¥å
·
graphTool, _ := graphtool.NewInvokableGraphTool(
graph,
"data_pipeline",
"Process and validate data",
)
// Agent 使ç¨è¯¥å·¥å
·
agent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
Model: chatModel,
ToolsConfig: adk.ToolsConfig{
ToolsNodeConfig: compose.ToolsNodeConfig{
Tools: []tool.BaseTool{graphTool},
},
},
})
runner := adk.NewRunner(ctx, adk.RunnerConfig{Agent: agent})
iter := runner.Query(ctx, "Process the data using the pipeline")
for {
event, ok := iter.Next()
if !ok {
break
}
// å¤çäºä»¶
}
}6. æµå¼å¤ç
å¤çæµå¼è¾åºï¼
package main
import (
"context"
"fmt"
"os"
"github.com/cloudwego/eino-ext/components/model/openai"
"github.com/cloudwego/eino/adk"
)
func main() {
ctx := context.Background()
chatModel, _ := openai.NewChatModel(ctx, &openai.ChatModelConfig{
Model: "gpt-4o",
APIKey: os.Getenv("OPENAI_API_KEY"),
})
agent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
Model: chatModel,
})
runner := adk.NewRunner(ctx, adk.RunnerConfig{Agent: agent})
// æµå¼æ¥è¯¢
iter := runner.Query(ctx, "Write a long story")
for {
event, ok := iter.Next()
if !ok {
break
}
// 宿¶è¾åºæµå¼å
容
if event.Message != nil && event.Message.Content != "" {
fmt.Print(event.Message.Content)
}
}
}7. åè°å¤ç
æ·»å æ¥å¿ãè¿½è¸ªãææ ï¼
package main
import (
"context"
"fmt"
"os"
"github.com/cloudwego/eino-ext/components/model/openai"
"github.com/cloudwego/eino/adk"
"github.com/cloudwego/eino/callbacks"
)
// èªå®ä¹åè°å¤çå¨
type LoggingHandler struct {
callbacks.Handler
}
func (h *LoggingHandler) OnStart(ctx context.Context, info *callbacks.RunInfo, input callbacks.CallbackInput) context.Context {
fmt.Printf("Start: %s\n", info.Name)
return ctx
}
func (h *LoggingHandler) OnEnd(ctx context.Context, info *callbacks.RunInfo, output callbacks.CallbackOutput) context.Context {
fmt.Printf("End: %s\n", info.Name)
return ctx
}
func (h *LoggingHandler) OnError(ctx context.Context, info *callbacks.RunInfo, err error) context.Context {
fmt.Printf("Error: %s - %v\n", info.Name, err)
return ctx
}
func main() {
ctx := context.Background()
chatModel, _ := openai.NewChatModel(ctx, &openai.ChatModelConfig{
Model: "gpt-4o",
APIKey: os.Getenv("OPENAI_API_KEY"),
})
// æ·»å åè°å¤çå¨
handler := &LoggingHandler{}
ctx = callbacks.CtxWithHandlers(ctx, handler)
agent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
Model: chatModel,
})
runner := adk.NewRunner(ctx, adk.RunnerConfig{Agent: agent})
iter := runner.Query(ctx, "Hello")
for {
event, ok := iter.Next()
if !ok {
break
}
fmt.Println(event.Message.Content)
}
}8. 人æºåä½ï¼Interrupt/Resumeï¼
å®ç°äººå·¥å®¡æ¹æµç¨ï¼
package main
import (
"context"
"fmt"
"os"
"github.com/cloudwego/eino-ext/components/model/openai"
"github.com/cloudwego/eino/adk"
)
func main() {
ctx := context.Background()
chatModel, _ := openai.NewChatModel(ctx, &openai.ChatModelConfig{
Model: "gpt-4o",
APIKey: os.Getenv("OPENAI_API_KEY"),
})
agent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
Model: chatModel,
})
runner := adk.NewRunner(ctx, adk.RunnerConfig{
Agent: agent,
// é
ç½®æ£æ¥ç¹åå¨
})
// ç¬¬ä¸æ¬¡è¿è¡
iter := runner.Query(ctx, "Create a report")
var checkpointID string
for {
event, ok := iter.Next()
if !ok {
break
}
// æ£æµå°éè¦äººå·¥ç¡®è®¤
if event.NeedHumanInput {
checkpointID = event.CheckpointID
fmt.Println("Waiting for human approval...")
break
}
}
// äººå·¥ç¡®è®¤åæ¢å¤
if checkpointID != "" {
// è·å人工è¾å
¥
humanInput := "Approved"
// 仿£æ¥ç¹æ¢å¤
iter = runner.Resume(ctx, checkpointID, humanInput)
for {
event, ok := iter.Next()
if !ok {
break
}
fmt.Println(event.Message.Content)
}
}
}æ ¸å¿æ¦å¿µ
1. Componentï¼ç»ä»¶ï¼
å¯å¤ç¨çæå»ºåï¼
- ChatModel: 大è¯è¨æ¨¡åæ¥å£
- Tool: å·¥å ·/彿°è°ç¨
- Retriever: æ£ç´¢å¨
- Embedding: åéåµå ¥
- ChatTemplate: æç¤ºè¯æ¨¡æ¿
2. Agentï¼æºè½ä½ï¼
å ·æèªä¸»å³çè½åçå®ä½ï¼
- ChatModelAgent: åºç¡ Agentï¼å¤çç®å对è¯åå·¥å ·è°ç¨
- DeepAgent: å¤æä»»å¡ Agentï¼æ¯æä»»å¡åè§£åå¤ Agent åä½
- èªå®ä¹ Agent: å®ç°
adk.Agentæ¥å£
3. Graphï¼å¾ï¼
èç¹åè¾¹ç»æçæ§è¡æµç¨ï¼
graph := compose.NewGraph[InputType, OutputType]()
graph.AddLambdaNode("node1", func1)
graph.AddChatModelNode("node2", chatModel)
graph.AddEdge("node1", "node2")4. Toolï¼å·¥å ·ï¼
Agent å¯ä»¥è°ç¨çåè½ï¼
type MyTool struct{}
func (t *MyTool) Info(ctx context.Context) (*tool.Info, error) {
return &tool.Info{
Name: "my_tool",
Desc: "Tool description",
ParamsOneOf: tool.NewParamsOneOfByParams(params),
}, nil
}
func (t *MyTool) InvokableRun(ctx context.Context, args string) (string, error) {
// å·¥å
·é»è¾
return result, nil
}5. Streamï¼æµï¼
æµå¼æ°æ®å¤çï¼
- èªå¨å¤çæµå¼ä¼ è¾
- è¿æ¥ãè£ ç®±ãåå¹¶ãå¤å¶æµ
- ç»ä»¶åªéå®ç°éåçæµå¼èå¼
6. Callbackï¼åè°ï¼
åé¢ç¼ç¨æºå¶ï¼
type MyHandler struct {
callbacks.Handler
}
func (h *MyHandler) OnStart(ctx context.Context, info *callbacks.RunInfo, input callbacks.CallbackInput) context.Context {
// å¼å§æ¶çé»è¾
return ctx
}7. Checkpointï¼æ£æ¥ç¹ï¼
ç¶ææä¹ åï¼
- ä¿åæ§è¡ç¶æ
- æ¯æä¸ææ¢å¤
- 人æºåä½
æ¯æçæ¨¡å
ChatModel å®ç°
- OpenAI: GPT-4, GPT-3.5
- Claude: Claude 3 ç³»å
- Gemini: Google Gemini
- Ark: åèè·³å¨ç«å±±å¼æ
- Ollama: æ¬å°æ¨¡å
- èªå®ä¹: å®ç°
ChatModelæ¥å£
Embedding å®ç°
- OpenAI: text-embedding-ada-002
- Ark: ç«å±±å¼æ Embedding
- èªå®ä¹: å®ç°
Embeddingæ¥å£
Retriever å®ç°
- Elasticsearch: å ¨ææ£ç´¢
- OpenSearch: åéæ£ç´¢
- èªå®ä¹: å®ç°
Retrieveræ¥å£
å¼åæä½³å®è·µ
- ç»ä»¶å¤ç¨: ä½¿ç¨ eino-ext æä¾ç宿¹ç»ä»¶
- é误å¤ç: å§ç»æ£æ¥é误è¿åå¼
- ä¸ä¸æä¼ é: æ£ç¡®ä½¿ç¨ context.Context
- æµå¼ä¼å : ä¼å ä½¿ç¨æµå¼ API æåç¨æ·ä½éª
- åè°çæ§: 使ç¨åè°æºå¶è¿è¡æ¥å¿åçæ§
- å·¥å ·è®¾è®¡: å·¥å ·åºè¯¥åä¸èè´£ãåæ°æ¸ æ°
- Graph ç¼æ: 夿æµç¨ä½¿ç¨ Graph èé硬ç¼ç
- æ£æ¥ç¹: é¿æ¶é´ä»»å¡ä½¿ç¨æ£æ¥ç¹æ¯ææ¢å¤
- ç±»åå®å ¨: å åå©ç¨ Go çç±»åç³»ç»
- æµè¯: 为 Agent åå·¥å ·ç¼ååå æµè¯
常ç¨å½ä»¤
# ä»£ç æ£æ¥
golangci-lint run ./...
# æ ¼å¼å代ç
gofmt -s -w .
# æ´ç导å
¥
goimports -w .
# è¿è¡æµè¯
go test ./...
# æå»º
go build -o app main.go
# è¿è¡
./app宿¹èµæº
- GitHub: https://github.com/cloudwego/eino
- ææ¡£: https://www.cloudwego.io/docs/eino/
- 示ä¾: https://github.com/cloudwego/eino-examples
- æ©å±: https://github.com/cloudwego/eino-ext
- 社åº: é£ä¹¦ç¾¤ï¼è§ READMEï¼
使ç¨åºæ¯
- å¯¹è¯æºå¨äºº: 客æãé®çãç¥è¯åºæ¥è¯¢
- å·¥å ·è°ç¨: å¤©æ°æ¥è¯¢ã计ç®å¨ãæ°æ®åºæä½
- æ°æ®åæ: æ°æ®å¤çãæ¥è¡¨çæãå¯è§å
- 代ç çæ: 代ç 婿ãèªå¨åèæ¬
- å¤ Agent åä½: ä»»å¡åè§£ãä¸ä¸åå·¥
- 工使µèªå¨å: ä¸å¡æµç¨ãETL ä»»å¡
- 人æºåä½: å®¡æ¹æµç¨ã交äºå¼ä»»å¡
- RAG åºç¨: ç¥è¯åºæ£ç´¢å¢å¼ºçæ
注æäºé¡¹
- API Key å®å ¨: ä¸è¦ç¡¬ç¼ç API Keyï¼ä½¿ç¨ç¯å¢åé
- å¹¶åæ§å¶: 注æ Go çå¹¶åç¹æ§ï¼é¿å ç«ææ¡ä»¶
- èµæºéæ¾: åæ¶éæ¾èµæºï¼é¿å å åæ³æ¼
- é误å¤ç: ä¸è¦å¿½ç¥é误ï¼å好é误å¤ç忥å¿
- æ§è½ä¼å: ä½¿ç¨æµå¼ APIãæ¹å¤çãç¼åçä¼åæ§è½
- çæ¬å ¼å®¹: 注æ Eino å eino-ext ççæ¬å ¼å®¹æ§
- 模åéæ©: æ ¹æ®ä»»å¡å¤æåº¦éæ©åéçæ¨¡å
- ææ¬æ§å¶: çæ§ API è°ç¨æ¬¡æ°å Token 使ç¨é
宿¹ç¤ºä¾ç´¢å¼
详ç»ç¤ºä¾è¯·åè references/docs_examples/ ç®å½ï¼
ð¦ ADK (Agent Development Kit)
| ç®å½ | åç§° | 说æ |
|---|---|---|
| adk/helloworld | Hello World Agent | æç®åç Agent 示ä¾ï¼å±ç¤ºå¦ä½å建åºç¡å¯¹è¯ Agent |
| adk/intro/chatmodel | ChatModel Agent | ChatModelAgent 使ç¨å Interrupt æºå¶ |
| adk/intro/custom | èªå®ä¹ Agent | å®ç°ç¬¦å ADK å®ä¹çèªå®ä¹ Agent |
| adk/intro/workflow | Workflow Agents | LoopãParallelãSequential Agent æ¨¡å¼ |
| adk/intro/session | Session 管ç | éè¿ Session å¨å¤ä¸ª Agent é´ä¼ éæ°æ®åç¶æ |
| adk/intro/transfer | Agent 转移 | ChatModelAgent ç Transfer è½åï¼Agent é´ä»»å¡è½¬ç§» |
| adk/intro/http-sse-service | HTTP SSE æå¡ | å° ADK Runner æ´é²ä¸º HTTP æå¡ï¼Server-Sent Eventsï¼ |
| adk/human-in-the-loop | 人æºåä½ | 8 个示ä¾ï¼å®¡æ¹ãå®¡æ ¸ç¼è¾ãåé¦å¾ªç¯ã追é®ãSupervisor |
| adk/multiagent | å¤ Agent åä½ | SupervisorãPlan-Execute-ReplanãDeep AgentsãExcel Agent |
| adk/common/tool/graphtool | GraphTool | å° Graph/Chain/Workflow å°è£ 为 Agent å·¥å · |
ð Compose (ç¼æ)
| ç®å½ | åç§° | 说æ |
|---|---|---|
| compose/chain | Chain | ä½¿ç¨ compose.Chain è¿è¡é¡ºåºç¼æï¼Prompt + ChatModelï¼ |
| compose/graph | Graph | å¾ç¼æï¼ç¶æå¾ãå·¥å ·è°ç¨ Agentã弿¥èç¹ã䏿æºå¶ |
| compose/workflow | Workflow | 工使µï¼å段æ å°ãçº¯æ°æ®æµã纯æ§å¶æµãéæå¼ãæµå¼å¤ç |
| compose/batch | BatchNode | æ¹éå¤çç»ä»¶ï¼æ¯æå¹¶åæ§å¶å䏿æ¢å¤ |
ð Flow (æµç¨æ¨¡å)
| ç®å½ | åç§° | 说æ |
|---|---|---|
| flow/agent/react | ReAct Agent | ReAct Agentï¼å å«è®°å¿ã卿éé¡¹ãæªç¥å·¥å ·å¤ç |
| flow/agent/multiagent | Multi-Agent | Host Multi-Agentï¼æ¥è®°å©æï¼ãPlan-Execute æ¨¡å¼ |
| flow/agent/manus | Manus Agent | åºäº Eino å®ç°ç Manus Agentï¼åè OpenManusï¼ |
| flow/agent/deer-go | Deer-Go | åè deer-flow ç Go å®ç°ï¼æ¯æç ç©¶å¢éåä½ |
ð§© Components (ç»ä»¶)
| ç®å½ | åç§° | 说æ |
|---|---|---|
| components/model | Model | A/B æµè¯è·¯ç±ãcURL 飿 ¼ç HTTP ä¼ è¾æ¥å¿ |
| components/retriever | Retriever | 夿¥è¯¢æ£ç´¢ãè·¯ç±æ£ç´¢ |
| components/tool | Tool | JSON Schema å·¥å ·ãMCP å·¥å ·ãä¸é´ä»¶ï¼é误移é¤ãJSON ä¿®å¤ï¼ |
| components/document | Document | èªå®ä¹è§£æå¨ãæ©å±è§£æå¨ãææ¬è§£æå¨ |
| components/prompt | Prompt | Chat Prompt 模æ¿ç¤ºä¾ |
| components/lambda | Lambda | Lambda 彿°ç»ä»¶ç¤ºä¾ |
ð QuickStart (å¿«éå¼å§)
| ç®å½ | åç§° | 说æ |
|---|---|---|
| quickstart/chat | Chat å¿«éå¼å§ | æåºç¡ç LLM 对è¯ç¤ºä¾ï¼æ¨¡æ¿ãçæãæµå¼è¾åºï¼ |
| quickstart/eino_assistant | Eino 婿 | 宿´ç RAG åºç¨ï¼ç¥è¯ç´¢å¼ãAgent æå¡ãWeb çé¢ï¼ |
| quickstart/todoagent | Todo Agent | ç®åç Todo 管ç Agent ç¤ºä¾ |
ð ï¸ DevOps (å¼åè¿ç»´)
| ç®å½ | åç§° | 说æ |
|---|---|---|
| devops/debug | è°è¯å·¥å · | Eino è°è¯åè½ï¼æ¯æ Chain å Graph è°è¯ |
| devops/visualize | å¯è§åå·¥å · | å° Graph/Chain/Workflow 渲æä¸º Mermaid å¾è¡¨ |
åèææ¡£
è¯¦ç»ææ¡£è¯·åè references/ ç®å½ï¼
- æ¡æ¶æ¦è§: references/overview.md - Eino æ¡æ¶å®æ´æ¢³çï¼å 嫿 ¸å¿æ¦å¿µã使ç¨åºæ¯ãå¦ä¹ è·¯å¾
- README: references/readme.md - 宿¹ README ææ¡£ï¼è±æï¼
- 宿¹ç¤ºä¾: references/docs_examples/ - 宿¹ç¤ºä¾ä»£ç åº
- 示ä¾è¯´æ: references/docs_examples/COOKBOOK.md - æ¯ä¸ªç¤ºä¾ç详ç»è¯´æ
- 宿¹ææ¡£: https://www.cloudwego.io/docs/eino/ - å¨çº¿ææ¡£
- æ©å±ç»ä»¶: https://github.com/cloudwego/eino-ext - ç»ä»¶å®ç°åº