GAI 是 AI Skill Hub 本期精选Agent工作流之一。综合评分 8.0 分,整体质量较高。我们强烈推荐将其纳入你的 AI 工具库,帮助提升工作效率。
GAI 是一套完整的 AI Agent 自动化工作流方案。通过可视化的节点编排,将复杂的多步骤任务拆解为清晰的自动化流程,实现全程无人值守的智能处理。支持与数百种外部服务和 API 无缝集成,适合构建数据处理管线、业务自动化和 AI 辅助决策系统。
GAI 是一套完整的 AI Agent 自动化工作流方案。通过可视化的节点编排,将复杂的多步骤任务拆解为清晰的自动化流程,实现全程无人值守的智能处理。支持与数百种外部服务和 API 无缝集成,适合构建数据处理管线、业务自动化和 AI 辅助决策系统。
# 方式一:go install(推荐) go install github.com/lace-ai/gai@latest # 方式二:从源码编译 git clone https://github.com/lace-ai/gai cd gai go build -o gai . # 方式三:下载预编译二进制 # 访问 Releases 页面下载对应平台二进制文件 # https://github.com/lace-ai/gai/releases
# 查看帮助 gai --help # 基本运行 gai [options] <input> # 详细使用说明请查阅文档 # https://github.com/lace-ai/gai
# gai 配置说明 # 查看配置选项 gai --config-example > config.yml # 常见配置项 # output_dir: ./output # log_level: info # workers: 4 # 环境变量(覆盖配置文件) export GAI_CONFIG="/path/to/config.yml"
<p><strong>Type-safe, provider-neutral agent runtime for Go.</strong></p> <p>Build streaming, tool-using agents across OpenAI, Anthropic, Gemini, and Mistral without hiding provider-native capabilities.</p>
<p> <a href="https://github.com/lace-ai/gai/blob/main/go.mod"><img alt="Go version" src="https://img.shields.io/github/go-mod/go-version/lace-ai/gai"></a> <a href="https://github.com/lace-ai/gai/actions"><img alt="CI" src="https://github.com/lace-ai/gai/actions/workflows/go.yml/badge.svg"></a> <a href="https://github.com/lace-ai/gai/blob/main/LICENSE"><img alt="MIT license" src="https://img.shields.io/badge/license-MIT-informational.svg"></a> <a href="https://pkg.go.dev/github.com/lace-ai/gai"><img alt="Go reference" src="https://pkg.go.dev/badge/github.com/lace-ai/gai.svg"></a> </p> </div>
GAI is a composable Go runtime for model calls, tools, streaming, context, history, and observability. Shared APIs keep application code provider-neutral, while built-in adapters preserve native tools, structured output, reasoning controls, and message history where supported.
Project status: GAI is pre-v1. It is already usable, but public APIs may still change before the first stable release.
1.26.1 or newerInstall the module in an existing application:
go get github.com/lace-ai/gai
This complete program streams a response from an OpenAI-backed agent:
package main
import (
"context"
"fmt"
"log"
"os"
"github.com/lace-ai/gai/agent"
"github.com/lace-ai/gai/ai/openai"
gaictx "github.com/lace-ai/gai/context"
"github.com/lace-ai/gai/loop"
"github.com/lace-ai/gai/ai"
)
func main() {
if err := run(context.Background()); err != nil {
log.Fatal(err)
}
}
func run(ctx context.Context) error {
provider := openai.New(os.Getenv("OPENAI_API_KEY"), nil)
model, err := provider.Model("gpt-4.1-mini")
if err != nil {
return err
}
defer func() {
if err := model.Close(); err != nil {
log.Printf("close model: %v", err)
}
}()
assistant := agent.New(agent.Definition{
Name: "assistant",
Model: model,
Prompt: func(context.Context, agent.RunInput) (gaictx.PromptBuilder, error) {
return gaictx.New(gaictx.Definition{
SystemInstructions: []gaictx.Part{
gaictx.NewTextPart("You are a concise, helpful assistant."),
},
}), nil
},
})
workflow, err := assistant.NewRun(ctx, agent.RunInput{
Prompt: gaictx.PromptInput{
User: gaictx.NewTextContent("What is the capital of France?"),
},
})
if err != nil {
log.Fatal(err)
}
var runErr error
for event := range workflow.RunEvents(ctx) {
switch event.Type {
case loop.EventToken:
if event.Token != nil && event.Token.Type == ai.TokenTypeText {
if event.Token.Text != "" {
fmt.Print(event.Token.Text)
} else {
fmt.Print(event.Token.String())
}
}
case loop.EventError, loop.EventCanceled:
runErr = event.Err
}
}
fmt.Println()
return runErr
}
Workflow.RunEvents is the preferred API for a primary agent when event order matters. Each workflow is single-use; create a new workflow from the reusable agent definition for each request.
agent is the high-level API: it owns reusable definitions, per-run configuration, workflow lifecycle, middleware, and aggregate results. loop is the canonical low-level execution API and owns tools, tool responses and helpers, selection and transport, ordered events, and iterations. ai owns provider-neutral request, definition, and call types. Use agent for application workflows; use loop directly only when an application deliberately needs mutable execution control.
Workflow.RunEvents exposes the canonical loop.Event stream, while workflow results contain copied loop.Iteration snapshots. Prompt-only tool rendering accepts context.ToolSignature, so context packages do not require executable tools.
A tool has a typed schema and a Go function:
type Tool interface {
Name() string
Description() string
Params() ai.ToolParameters
Function(ctx context.Context, req *ai.ToolCall) *ToolResponse
}
Tool parameters are converted to JSON Schema for provider-native function calling. Models that do not support native tools can use GAI's text-protocol compatibility path.
func (t *LookupOrderTool) Params() ai.ToolParameters {
return ai.ToolParameters{
Strict: true,
Properties: []ai.ToolParameter{
{
Name: "order_id",
Type: ai.ToolParameterString,
Description: "The order ID to look up.",
Required: true,
},
},
}
}
func (t *LookupOrderTool) Function(
ctx context.Context,
req *ai.ToolCall,
) *loop.ToolResponse {
var args struct {
OrderID string `json:"order_id"`
}
if err := loop.DecodeToolArgs(req, &args); err != nil {
return loop.NewToolError(err)
}
return loop.NewToolSuccess(`{"status":"in_transit"}`)
}
Attach tools to an agent definition:
support := agent.New(agent.Definition{
Name: "support",
Model: model,
Tools: []loop.Tool{lookupOrderTool},
Prompt: supportPrompt,
})
The loop sends definitions to the model, executes requested calls, appends tool results to the conversation, and continues until the model commits a normal response or the iteration limit is reached.
For per-run tools, set RunInput.Execution.Tools:
nil inherits Definition.Toolsworkflow, err := support.NewRun(ctx, agent.RunInput{
Execution: agent.ExecutionConfig{
Tools: []loop.Tool{lookupOrderToolForUser(userID)},
},
})
Execution.ToolChoice and Execution.Reasoning can also be configured per run.
RunEvents forwards the loop's event stream without splitting it into unrelated channels:
for event := range workflow.RunEvents(ctx) {
switch event.Type {
case loop.EventAttemptStart:
// A generation attempt began.
case loop.EventToken:
// Stream visible text or inspect other token types.
case loop.EventRetry:
// Roll back output associated with event.AttemptID.
case loop.EventIterationDone:
// One model/tool iteration completed.
case loop.EventDone:
// The loop completed successfully.
case loop.EventError, loop.EventCanceled:
// Handle terminal failure or cancellation.
}
}
Workflow.Run remains available for workflows that use post-processing middleware. It exposes compatibility token, status, and error channels; consumers must drain all three concurrently.
Middleware stages run after an upstream agent completes and are suited to tasks such as memory extraction, auditing, formatting, and evaluation.
agent.NewAgentMiddleware adapts another agent with one of three output policies:
PreserveOutput keeps the upstream output and records the stage result.AppendOutput emits the stage output after the upstream output.ReplaceOutput replaces the visible output after a successful stage.Use AgentMiddlewareConfig.MapInput to map a typed upstream WorkflowResult into the next agent's RunInput. Use MiddlewareFunc for transformations that do not need another model call.
Middleware is post-processing, not a supervisor or handoff runtime. Tool authorization and approval belong at the tool-execution boundary rather than in workflow middleware.
agent/ Reusable agent definitions, workflows, middleware, and summary agents
ai/ Provider-neutral requests, responses, tools, capabilities, and providers
context/ Prompt construction, rendering, structured input, and messages
context/history/ Persisted history selection and optional summarization
loop/ Ordered model/tool execution and tool helpers
observability/langfuse/ Optional Langfuse OpenTelemetry exporter setup
testutil/ Mocks and helpers used by tests
高质量的AI工作流框架,易于使用
该工具使用 LGPL-2.1 协议,商用场景请仔细阅读协议条款,必要时咨询法律意见。
AI Skill Hub 为第三方内容聚合平台,本页面信息基于公开数据整理,不对工具功能和质量作任何法律背书。
建议在沙箱或测试环境中充分验证后,再部署至生产环境,并做好必要的安全评估。
⚠️ LGPL 2.1 — 弱 Copyleft,可动态链接到商业软件,但修改库本身须开源。
经综合评估,GAI 在Agent工作流赛道中表现稳健,质量优秀。如果你已有明确的使用需求,可以直接上手体验;如果还在评估阶段,建议对比同类工具后再做决策。
| 原始名称 | gai |
| 原始描述 | 开源AI工作流:🤖 GAI is a flexible Go framework for building agent-style applications on top o。⭐8 · Go |
| Topics | AIGo工作流 |
| GitHub | https://github.com/lace-ai/gai |
| License | LGPL-2.1 |
| 语言 | Go |
收录时间:2026-06-03 · 更新时间:2026-06-05 · License:LGPL-2.1 · AI Skill Hub 不对第三方内容的准确性作法律背书。
选择 Agent 类型,复制安装指令后粘贴到对应客户端