Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1,176 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AgentFlow

🚀 2026 年生产级 Go 语言 LLM Agent 框架

Go Version License codecov Go Report Card CI

English | 中文

✨ 核心特性

🤖 Agent 框架

  • 官方单 Agent 主链 - react + native tool calling + checkpoint/session/guardrails
  • 官方多 Agent 门面 - agent/team,统一 supervisor / selector / round_robin / swarm
  • Reflection 机制 - 自我评估与迭代改进
  • 动态工具选择 - 智能工具匹配,减少 Token 消耗
  • 双模型架构 (toolProvider) - 便宜模型优先承担工具调用链路(原生 tool calling,非原生 provider 自动降级 XML tool-calling),贵模型做内容生成,大幅降低成本
  • Skills 系统 - 动态技能加载
  • MCP/A2A 协议 - 完整 Agent 互操作协议栈 (支持 Google A2A & Anthropic MCP)
  • Guardrails - 输入/输出验证、PII 检测、注入防护、自定义验证规则
  • Evaluation - 自动化评估框架 (A/B 测试、LLM Judge、研究质量多维评估)
  • Thought Signatures - 推理链签名,保持多轮推理连续性
  • 角色编排 (Role Pipeline) - 多 Agent 角色流水线,支持 Collector→Filter→Generator→Validator→Writer 研究管线
  • Web 工具 - Web Search / Web Scrape 工具抽象,支持可插拔搜索/抓取后端
  • 声明式 Agent 加载器 — YAML/JSON 定义 Agent,工厂自动装配
  • 插件系统 — 插件注册表、生命周期管理(Init/Shutdown)
  • Human-in-the-Loop — 人工审批节点
  • Agent 联邦/服务发现 — 跨集群编排与注册发现

🧠 记忆系统

  • 多层记忆 - 仿人脑记忆架构:
    • 短期/工作记忆 (Working Memory) - 存储当前任务上下文,支持 TTL 与优先级衰减
    • 长期记忆 (Long-term Memory) - 结构化信息存储
    • 情节记忆 (Episodic Memory) - 存储事件序列与执行经验
    • 语义记忆 (Semantic Memory) - 存储事实知识与本体关系
    • 程序性记忆 (Procedural Memory) - 存储“如何做”的技能与流程
  • Intelligent Decay - 基于 recency/relevance/utility 的智能衰减算法
  • 上下文工程 - 自适应压缩、摘要、窗口管理、紧急截断

🧩 推理模式

  • 官方默认 - ReAct 作为唯一默认推理/执行主链
  • 高级显式启用 - ReflexionReWOOPlan-Execute
  • 实验能力 - Dynamic PlannerIterative Deepening
  • 统一约束 - 高级与实验模式不再默认注入 runtime,需显式 opt-in

🔄 工作流引擎

  • DAG 工作流 - 支持有向无环图的复杂逻辑编排
  • DAG 节点并行执行 - 支持分支并发执行与结果聚合
  • 状态持久化 - 支持检查点 (Checkpoint) 的保存与恢复
  • 熔断器 (Circuit Breaker) - DAG 节点级熔断保护(Closed/Open/HalfOpen 三态机)
  • YAML DSL 编排语言 - 声明式工作流定义,支持变量插值、条件分支、循环、子图

🧱 启动装配链路

  • 单入口启动链路 - cmd/agentflow/main.runServe -> internal/app/bootstrap.InitializeServeRuntime -> cmd/agentflow/server_handlers_runtime.BuildServeHandlerSet -> cmd/agentflow/server_http.RegisterHTTPRoutes -> api/routes -> api/handlers -> internal/usecase -> domain(agent/rag/workflow/llm)
  • 组合根职责收敛 - cmd 仅做装配;运行时构建集中在 internal/app/bootstrap(详见 docs/architecture/启动装配链路与组合根说明.md
  • 组合根状态已分 bundle - cmd/agentflow/server_runtime_bundles.go 将长生命周期状态收口到 handlers / text / tooling / workflow / infra / ops 六组,避免 Server 持有一整份扁平跨域字段表
  • 热重载单 seam - server_hotreload.go 只负责触发重建与状态回写,真正的 chat/cost 绑定、resolver 重建、workflow runtime 重建统一下沉到 internal/app/bootstrap
  • 用例边界已收口 - internal/usecase 现在对 handler 暴露自有 chat/workflow 契约,例如 ChatStreamEventWorkflowPlanWorkflowNodeEvent,handler 不再直接依赖 llmcore.UnifiedChunkworkflow.DAGWorkflow
  • 领域入口并列 - api/handlers 可直接进入 agent usecaserag usecaseworkflow usecase;不是所有请求都必须先进入 workflow
  • 编排关系固定 - workflow 是 Layer 3 编排层,不是 agent 的一种;有编排需求时由 workflow 调用 agent/rag/llm,无编排需求时可直接走 agentrag

🔍 RAG 系统 (检索增强生成)

  • 混合检索 (Hybrid Retrieval) - 结合向量搜索 (Dense) 与关键词搜索 (Sparse)
  • BM25 Contextual Retrieval - 基于 Anthropic 最佳实践的上下文检索,BM25 参数可调(k1/b),IDF 缓存
  • Multi-hop 推理与去重 - 多跳推理链,四阶段去重流程(ID 去重 + 内容相似度去重),DedupStats 统计
  • Web 增强检索 - 本地 RAG + 实时 Web 搜索混合检索,支持权重分配与结果去重
  • 语义缓存 (Semantic Cache) - 基于向量相似度的响应缓存,大幅降低延迟与成本
  • 多向量数据库支持 - Qdrant, Pinecone, Milvus, Weaviate 及内置 InMemoryStore
  • 文档管理 - 自动分块 (Chunking)、元数据过滤、重排序 (Reranker)
  • 学术数据源 - arXiv 论文检索、GitHub 仓库/代码搜索适配器
  • DocumentLoader — 统一文档加载接口(Text/Markdown/CSV/JSON)
  • RAG Runtime Builder — 统一通过 rag/runtime.Builder 完成配置桥接与运行时装配
  • Graph RAG — 知识图谱检索增强
  • 查询路由/变换 — 智能查询分发与改写

🎯 多提供商支持

  • 10+ 独立提供商 + 4 个兼容厂商 - OpenAI、Anthropic Claude、Google Gemini、xAI Grok、GLM、MiniMax、Mistral、Qwen(通义千问)、Doubao(豆包)独立实现;DeepSeek、Kimi、腾讯混元、Llama 通过 OpenAI 兼容层接入
  • 智能路由 - 成本/健康/QPS 负载均衡
  • A/B 测试路由 - 多变体流量分配、粘性路由、动态权重调整、指标收集
  • 统一 Token 计数器 - Tokenizer 接口 + tiktoken 适配器 + CJK 估算器
  • Provider 重试包装器 - RetryableProvider 指数退避重试,仅重试可恢复错误
  • API Key 池 - 多 Key 轮询、限流检测
  • Provider 工厂函数 — 配置驱动的 Provider 实例化(标准 chat 入口:llm/providers/vendor.NewChatProviderFromConfig
  • OpenAI 兼容层 — 统一适配 OpenAI 兼容 API(9 个 provider 瘦身至 ~30 行)
  • 协议兼容 HTTP 入站/v1/chat/completions/v1/responses/v1/messages 统一收口到同一 ChatService -> llm/gateway 主链;Gemini / Vertex generateContent 路径保持 provider 出站协议边界

🎨 多模态能力

  • Embedding - OpenAI、Gemini、Cohere、Jina、Voyage
  • Image - gpt-image-1、Imagen 4、Flux、Stability、Ideogram、通义万相、智谱、文心一格、豆包、腾讯混元、可灵
  • Video - sora-2、Runway Gen-4.5 / gen4_turbo、Veo 3.1、Gemini、可灵、Luma、MiniMax、即梦 Seedance
  • Speech - gpt-4o-mini-ttsgpt-4o-transcribe、ElevenLabs、Deepgram
  • Music - Suno, MiniMax
  • 3D - Meshy, Tripo
  • Rerank - Cohere, Qwen, GLM
  • 文档总表 - 近 12 个月主流模型总表见 docs/cn/guides/近12个月主流多模态模型总表.md

🛡️ 企业级能力

  • 弹性机制 - 重试、幂等、熔断
  • 可观测性 - Prometheus 指标、OpenTelemetry 追踪
  • 缓存系统 - 多级缓存策略
  • API 安全中间件 - API Key 认证、IP 限流、CORS、Panic 恢复、请求日志
  • 成本控制与预算管理 - Token 计数、周期重置、成本报告、优化建议
  • 配置热重载与回滚 - 文件监听自动重载、版本化历史、一键回滚、验证钩子
  • MCP WebSocket 心跳重连 — 指数退避重连、连接状态监控
  • 金丝雀发布 (Canary) — 分阶段流量切换(10%→50%→100%)、自动回滚、错误率/延迟监控

⚠️ 认证迁移说明(2026-03)

  • API Key 仅支持 X-API-Key Header,api_key Query 参数已禁用且不再受支持。
  • server.environment=production 时,server.allow_no_auth=true 会在启动校验阶段直接报错并拒绝启动。
  • 当未配置 JWT/API Key 且 server.allow_no_auth=false 时,受保护接口会 fail-closed 返回 503
  • 升级建议:生产环境必须显式配置 server.api_keysserver.jwt;仅 development / test 环境可设置 server.allow_no_auth=true

🚀 快速开始

go get github.com/BaSui01/agentflow

正式入口约定:

  • 仓库级正式入口统一为 sdk.New(opts).Build(ctx)
  • agent/runtime.Builder 作为 agent 子模块 runtime 入口
  • 多 Agent 正式入口统一为 agent/team,显式编排正式入口统一为 workflow/runtime
  • github.com/BaSui01/agentflow/agent 根包已删除;需要直接使用 Agent runtime DTO / Builder 时,请显式导入 agent/runtime
  • github.com/BaSui01/agentflow/raggithub.com/BaSui01/agentflow/workflowgithub.com/BaSui01/agentflow/llm 根包已删除;分别改为导入 rag/runtimeworkflow/core|runtimellm/core|gateway|runtime/compose
  • Agent 运行时主面采用三层模型:Model / Control / Tools
    • Model 负责模型与 provider 相关参数
    • Control 负责 loop/budget/reasoning/override 等执行控制
    • Tools 负责工具声明、选择与协议装配
  • types.AgentConfig 是对外配置入口,运行时会先收口为 ExecutionOptions,再由 ChatRequestAdapter 生成 provider 侧 ChatRequest
  • ChatRequest 只是 gateway/provider adapter DTO,不是 Agent 运行时正式配置主面

基础对话

完整可运行示例:examples/01_simple_chat/

package main

import (
    "context"
    "fmt"
    "os"

    agent "github.com/BaSui01/agentflow/agent/runtime"
    "github.com/BaSui01/agentflow/sdk"
    "github.com/BaSui01/agentflow/llm/providers"
    openaiprov "github.com/BaSui01/agentflow/llm/providers/openai"
    "github.com/BaSui01/agentflow/types"
    "go.uber.org/zap"
)

func main() {
    ctx := context.Background()
    logger, _ := zap.NewDevelopment()
    defer logger.Sync()

    provider := openaiprov.NewOpenAIProvider(providers.OpenAIConfig{
        BaseProviderConfig: providers.BaseProviderConfig{
            APIKey:  os.Getenv("OPENAI_API_KEY"),
            BaseURL: "https://api.openai.com",
        },
    }, logger)

    rt, err := sdk.New(sdk.Options{
        Logger: logger,
        LLM: &sdk.LLMOptions{
            Provider: provider,
        },
        Agent: &sdk.AgentOptions{},
    }).Build(ctx)
    if err != nil {
        panic(err)
    }

    ag, err := rt.NewAgent(ctx, types.AgentConfig{
        Core: types.CoreConfig{
            ID:   "hello-agent",
            Name: "Hello Agent",
            Type: "assistant",
        },
        LLM: types.LLMConfig{
            Model: "gpt-5.4",
        },
    })
    if err != nil {
        panic(err)
    }

    if err := ag.Init(ctx); err != nil {
        panic(err)
    }

    out, err := ag.Execute(ctx, &agent.Input{
        Content: "Hello!",
    })
    if err != nil {
        panic(err)
    }

    fmt.Println(out.Content)
}

多提供商路由

package main

import (
    "context"
    "fmt"
    "os"

    llm "github.com/BaSui01/agentflow/llm/core"
    llmrouter "github.com/BaSui01/agentflow/llm/runtime/router"
    "github.com/glebarez/sqlite"
    "go.uber.org/zap"
    "gorm.io/gorm"
)

func main() {
    logger, _ := zap.NewDevelopment()
    defer logger.Sync()

    ctx := context.Background()

    db, err := gorm.Open(sqlite.Open("file::memory:?cache=shared"), &gorm.Config{})
    if err != nil {
        panic(err)
    }

    // AutoMigrate LLM provider/model tables
    if err := db.AutoMigrate(&llm.LLMProvider{}, &llm.LLMModel{}, &llm.LLMProviderModel{}, &llm.LLMProviderAPIKey{}); err != nil {
        panic(err)
    }

    // Minimal seed: one provider + one model + mapping + API key.
    p := llm.LLMProvider{Code: "openai", Name: "OpenAI", Status: llm.LLMProviderStatusActive}
    if err := db.Create(&p).Error; err != nil {
        panic(err)
    }
    m := llm.LLMModel{ModelName: "gpt-5.4", DisplayName: "GPT-5.4", Enabled: true}
    if err := db.Create(&m).Error; err != nil {
        panic(err)
    }
    pm := llm.LLMProviderModel{
        ModelID:         m.ID,
        ProviderID:      p.ID,
        RemoteModelName: "gpt-5.4",
        BaseURL:         "https://api.openai.com",
        PriceInput:      0.001,
        PriceCompletion: 0.002,
        Priority:        10,
        Enabled:         true,
    }
    if err := db.Create(&pm).Error; err != nil {
        panic(err)
    }

    key := os.Getenv("OPENAI_API_KEY")
    if key == "" {
        key = "sk-xxx" // demo key (no live call without real key)
    }
    if err := db.Create(&llm.LLMProviderAPIKey{
        ProviderID: p.ID,
        APIKey:     key,
        Label:      "default",
        Priority:   10,
        Weight:     100,
        Enabled:    true,
    }).Error; err != nil {
        panic(err)
    }

    factory := llmrouter.VendorChatProviderFactory{Logger: logger}
    router := llmrouter.NewMultiProviderRouter(db, factory, llmrouter.RouterOptions{Logger: logger})
    if err := router.InitAPIKeyPools(ctx); err != nil {
        panic(err)
    }

    selection, err := router.SelectProviderWithModel(ctx, "gpt-5.4", llmrouter.StrategyCostBased)
    if err != nil {
        panic(err)
    }

    fmt.Printf("selected provider=%s model=%s\n", selection.ProviderCode, selection.ModelName)
}

推荐把 llm/runtime/router.VendorChatProviderFactory 视为配置驱动 chat provider 的标准构造入口;只有在你明确需要 provider 包级低级 API 时,才直接使用 llm/providers/openaillm/providers/anthropicllm/providers/gemini 构造器。

上面的 MultiProviderRouter 示例只用于维护框架内置的 legacy DB-backed provider + api_key pool 部署。 如果你是在做新的 routed-provider 集成,不要把它当作仓库级推荐主入口,直接从 BuildChannelRoutedProvider(...) 开始。

如果你的底层路由语义不是 provider + api_key pool,而是业务侧自定义的 channel / key / model mapping

  • 推荐主链路是:Handler/Service -> Gateway -> ChannelRoutedProvider -> resolvers/selectors -> provider factory -> provider API
  • ChannelRoutedProvider 是 channel-based routing 的推荐主入口
  • 外部项目建议通过 BuildChannelRoutedProvider(...) 一次性装配这条链,而不是手工散落 wiring
  • 仓库内置 llm/runtime/router/extensions/channelstore 作为通用 extension 起点,提供 StoreModelMappingResolverPriorityWeightedSelectorStoreSecretResolverStoreProviderConfigSourceStaticStore
  • 上层业务保持 Handler/Service -> Gateway 不变,迁移时只替换 Gateway 后面的 routed provider 链路
  • 通过 ChannelSelectorModelMappingResolverSecretResolverUsageRecorder 等接口注入自定义实现
  • BuildChannelRoutedProvider(...) 是新接入唯一推荐的 routed-provider 装配入口
  • MultiProviderRouter 仅为旧部署兼容与维护保留;如果你仍在使用它,请把它视为 legacy DB-backed 实现,而不是与 ChannelRoutedProvider 并列的同级推荐入口
  • 旧部署若还依赖 DB-backed provider catalog + API key pool,可继续停留在 Gateway -> RoutedChatProvider -> MultiProviderRouter,但不要在新的公共接入链路里再引入它
  • 外部项目现在可通过 llm/runtime/compose.Build(...) 复用同一套 resilience/cache/policy/tool-provider runtime 装配;仓库自身组合根继续通过 internal/app/bootstrap.BuildLLMHandlerRuntimeFromProvider(...) 复用这层公共装配;image/video 仍延后到 gateway + capabilities
  • 仓库内置 llm.main_provider_mode 启动切换位;仓库自身通过 internal/app/bootstrap.RegisterMainProviderBuilder(...) 注册 channel_routed builder 并复用 server 启动链;外部项目若需要相同模式,应在自己的组合根直接调用 channelstore.NewMainProviderBuilder(...) 或自行装配 routed provider
  • llm/runtime/router/extensions/runtimepolicy 提供可复用的 UsageRecorder / CooldownController / QuotaPolicy 参考实现,便于先把 usage、cooldown、daily limit、concurrency limit 链路跑通
  • 第一阶段不把 image/video 接进 ChannelRoutedProvider,因为 image/video 当前走的是 capability 路由面:gateway + capabilities + vendor.Profile;若硬塞进 llm.Provider,会把文本 routed provider 与多模态 capability 入口过早耦合
  • 外部项目的 adapter-only 接入模板与配置切换示例见 docs/architecture/Channel路由外部接入模板-中文版.md
  • 设计与迁移说明见 docs/architecture/Channel路由扩展架构说明.md

Reflection 自我改进

完整可运行示例:examples/06_advanced_features/(或 examples/09_full_integration/

executor := agent.NewReflectionExecutor(baseAgent, agent.ReflectionExecutorConfig{
    Enabled:       true,
    MaxIterations: 3,
    MinQuality:    0.7,
})

result, _ := executor.ExecuteWithReflection(ctx, input)

LSP 一键启用

opts := runtime.DefaultBuildOptions()
opts.EnableAll = false
opts.EnableLSP = true

rt, err := sdk.New(sdk.Options{
    Logger: logger,
    LLM: &sdk.LLMOptions{
        Provider: provider,
    },
    Agent: &sdk.AgentOptions{
        BuildOptions: opts,
    },
}).Build(ctx)
if err != nil {
    panic(err)
}

ag, err := rt.NewAgent(ctx, types.AgentConfig{
    Core: types.CoreConfig{
        ID:   "assistant-1",
        Name: "Assistant",
        Type: "assistant",
    },
    LLM: types.LLMConfig{
        Model: "gpt-5.4",
    },
})
if err != nil {
    panic(err)
}

fmt.Println("LSP enabled:", ag.GetFeatureStatus()["lsp"])

上下文运行时默认会随 sdk -> agent/runtime.Builder 主链装配;可通过 types.AgentConfig.Context 控制预算与压缩策略:

cfg.Context = &types.ContextConfig{
    Enabled:          true,
    MaxContextTokens: 128000,
    ReserveForOutput: 4096,
}

启用 Skills / 增强 Memory / retrieval / tool-state 注入时,这些信息会作为 context runtime 管理的独立上下文段进入消息组装,而不是直接改写原始用户输入。

请求级 session_overlaytrace_feedback_plantrace_synopsistrace_historytool_guidanceverification_gatecontext_pressure 等临时策略层,也会统一通过 ephemeral prompt layer builder 注入,而不是并入稳定 system prompt;其中 tool_guidance 会按 safe_read / requires_approval / unknown 风险层输出工具提示,审批语义会同时进入 runtime stream 事件与 explainability trace,并进一步汇总进高层 decision timeline(如 prompt_layers / approval / validation_gate / completion_decision),最终生成双层可回灌摘要:短层 trace_synopsis 与压缩长层 trace_history。这两层是否注入不再是写死规则,而是由轻量 TraceFeedbackPlanner 先产出一个 trace-aware micro plan(目标、推荐动作、主/辅层、原因、阈值),再决定是否注入,并把决策结果写入 trace_feedback_decision timeline。默认主链是 ComposedTraceFeedbackPlanner(rule-based planner + hint adapter),后续统计驱动或 LLM 规划器也应通过同一 planner adapter 面接入,而不是引入第二套注入主链。

也可以通过 runtime.Builder 一键开关:

opts := runtime.DefaultBuildOptions()
opts.EnableAll = false
opts.EnableLSP = true

gateway := llmgateway.New(llmgateway.Config{ChatProvider: provider, Logger: logger})

ag, err := runtime.NewBuilder(gateway, logger).
    WithOptions(opts).
    Build(ctx, cfg)
if err != nil {
    panic(err)
}
_ = ag

DAG 工作流

完整可运行示例:examples/05_workflow/

graph := workflow.NewDAGGraph()
graph.AddNode(&workflow.DAGNode{ID: "start", Type: workflow.NodeTypeAction, Step: startStep})
graph.AddNode(&workflow.DAGNode{ID: "process", Type: workflow.NodeTypeAction, Step: processStep})
graph.AddEdge("start", "process")
graph.SetEntry("start")

wf := workflow.NewDAGWorkflow("my-workflow", "description", graph)

rt, _ := sdk.New(sdk.Options{
    Logger:   logger,
    Workflow: &sdk.WorkflowOptions{Enable: true},
}).Build(ctx)

result, _ := rt.Workflow.Facade.ExecuteDAG(ctx, wf, input)

🏗️ 项目结构

如果你觉得子目录过多、阅读压力大,先看精简导航:docs/cn/目录导航(精简版).md

分层与依赖全图

                        ┌──────────────────────────────┐
                        │ cmd/                        │
                        │ 组合根:启动/装配/生命周期      │
                        └──────────────┬───────────────┘
                                       │
                        ┌──────────────▼───────────────┐
                        │ api/                        │
                        │ 协议适配层:HTTP/MCP/A2A      │
                        └──────────────┬───────────────┘
                                       │
                        ┌──────────────▼───────────────┐
                        │ workflow/  (Layer 3)        │
                        │ 编排层:DAG/DSL/步骤调度      │
                        │ 可调用 agent/rag/llm         │
                        └───────┬─────────────┬────────┘
                                │             │
                 ┌──────────────▼───┐   ┌────▼─────────────┐
                 │ agent/ (Layer 2) │   │ rag/ (Layer 2)   │
                 │ 执行能力/推理/工具 │   │ 检索能力/索引/重排 │
                 └──────────────┬───┘   └────┬─────────────┘
                                │            │
                                └──────┬─────┘
                                       │
                             ┌─────────▼─────────┐
                             │ llm/ (Layer 1)    │
                             │ Provider/Gateway  │
                             └─────────┬─────────┘
                                       │
                             ┌─────────▼─────────┐
                             │ types/ (Layer 0)  │
                             │ 零依赖共享契约层     │
                             └───────────────────┘

pkg/ = 横向基础设施层,可被多层复用,但不得反向依赖 api/ 与 cmd/
internal/app/bootstrap/ = 启动期装配与 bridge,属于组合根支撑,不承载领域决策

依赖规则速记:

  • types 只允许被依赖,不反向依赖业务层
  • llm 不依赖 agent/workflow/api/cmd
  • agentrag 同属 Layer 2;单 agent 可以直接用 rag
  • workflowagent/rag 之上,是编排层,不是 agent 的一种
  • api 只做协议转换;cmd 只做装配

允许依赖 / 禁止依赖矩阵

源目录 允许依赖 禁止依赖
types/ llm/agent/rag/workflow/api/cmd/internal/config/pkg/
llm/ types/pkg/config/ agent/rag/workflow/api/cmd/internal/
agent/ types/llm/rag/pkg/config/ workflow/api/cmd/internal/
rag/ types/llm/pkg/config/ agent/workflow/api/cmd/internal/
workflow/ types/llm/agent/rag/pkg/config/ api/cmd/internal/agent/persistence
api/ types/llm/agent/rag/workflow/config/ provider 实现细节、组合根逻辑
cmd/ 通过 internal/app/bootstrap 装配各层 业务实现下沉、绕过 bootstrap 直拼底层细节
pkg/ types/ 与必要的 pkg/* api/cmd/
agentflow/
├── types/                    # Layer 0: 零依赖核心类型
│   ├── message.go            # Message, Role, ToolCall
│   ├── error.go              # Error, ErrorCode
│   ├── token.go              # TokenUsage, Tokenizer
│   ├── context.go            # Context key helpers
│   ├── schema.go             # JSONSchema
│   └── tool.go               # ToolSchema, ToolResult
│
├── llm/                      # Layer 1: LLM 抽象层(目录容器;root 无 Go 文件)
│   ├── providers/            # Provider 实现
│   │   ├── openai/           # OpenAI
│   │   ├── anthropic/        # Claude
│   │   ├── gemini/           # Gemini
│   │   ├── openaicompat/     # Compat Chat 基座
│   │   ├── vendor/           # Chat factory + vendor profiles
│   │   └── ...               # 多模态 / 厂商特化能力实现
│   ├── runtime/              # Router / policy / compose
│   ├── gateway/              # 统一能力入口
│   ├── batch/                # 批量请求处理
│   ├── capabilities/         # Image / Video / Audio / Rerank ...
│   ├── core/                 # Provider / request-response / gateway contracts
│   ├── tokenizer/            # 统一 Token 计数器
│   └── tools/                # 工具执行
│
├── agent/                    # Layer 2: Agent 核心(目录容器;root 无 Go 文件)
│   ├── adapters/             # 适配层(chat/declarative/structured/handoff)
│   ├── capabilities/         # 能力层(memory/reasoning/planning/tools/guardrails/streaming)
│   ├── collaboration/        # 协作层(federation 联邦编排)
│   ├── core/                 # 核心层(registry/helpers/extension contracts)
│   ├── execution/            # 执行层(runtime/context/loop/protocol/orchestration)
│   ├── integration/          # 集成层(deployment/hosted/k8s/lsp/voice)
│   ├── observability/        # 可观测层(monitoring/evaluation/hitl)
│   └── persistence/          # 持久化层(checkpoint/conversation/artifacts/mongodb)
│
├── rag/                      # Layer 2: RAG 检索能力(目录容器;root 无 Go 文件)
│   ├── core/                 # 检索契约 / document / vector store 抽象
│   ├── runtime/              # RAG 运行时构建入口与主能力面
│   ├── retrieval/            # hybrid / contextual / multi-hop / graph / query routing
│   ├── loader/               # DocumentLoader(Text/Markdown/CSV/JSON)
│   ├── sources/              # 数据源适配器(arXiv, GitHub)
│   └── adapter/              # runtime / loader / tokenizer 适配桥
│
├── workflow/                 # Layer 3: 工作流编排层(目录容器;root 无 Go 文件)
│   ├── core/                 # DAG / Workflow / Step / checkpoint 契约
│   ├── runtime/              # Builder / Facade 统一装配入口
│   ├── engine/               # 执行引擎与 step dependency integration
│   ├── steps/                # 节点级 step 实现
│   ├── observability/        # 执行历史与工作流可观测
│   └── dsl/                  # YAML DSL 编排
│       ├── schema.go         # DSL 类型定义
│       ├── parser.go         # YAML 解析 + 变量插值
│       └── validator.go      # DSL 验证器
│
├── api/                      # 适配层:HTTP/MCP/A2A handler + routes
│   ├── handlers/             # 协议解析、响应序列化、service/usecase 入口
│   └── routes/               # 路由注册
│
├── internal/                 # 组合根支撑:启动期 builder / wiring / bridge
│   └── app/bootstrap/        # runtime 构建、依赖注入、handler 装配
│
├── config/                   # 配置管理
│   ├── loader.go             # 配置加载器
│   ├── defaults.go           # 默认配置
│   ├── hotreload.go          # 热重载与回滚
│   ├── watcher.go            # 文件监听
│   ├── api.go                # 配置 API
│   └── doc.go                # 包文档
│
├── pkg/                      # 横向基础设施层(不得反向依赖 api/cmd)
│   ├── service/              # 生命周期服务注册与总线
│   └── openapi/              # OpenAPI 工具生成
│
├── cmd/agentflow/            # 应用入口与运行时装配
│   ├── main.go               # CLI 入口(serve/migrate/health/version)
│   ├── migrate.go            # 迁移子命令
│   ├── server_runtime.go     # Server 结构与启动编排
│   ├── server_runtime_bundles.go # Server 运行时 bundle 分组(handlers/text/tooling/workflow/infra/ops)
│   ├── server_services.go    # 基于 pkg/service.Registry 的生命周期总线
│   ├── server_http.go        # 路由注册与 HTTP/Metrics 管理器构建
│   ├── server_handlers_runtime.go # 调用 BuildServeHandlerSet 并回填 Server 字段
│   ├── server_startup_summary.go # 启动摘要与能力/依赖状态汇总
│   ├── server_stores.go      # Mongo/RAG/Memory/Audit 装配
│   ├── server_hotreload.go   # 热重载管理器初始化
│   └── server_shutdown.go    # 优雅关闭流程
│
└── examples/                 # 示例代码(20 个场景)

📖 示例

示例 说明
01_simple_chat 基础对话
02_streaming 流式响应
03_tool_use 工具调用
04_custom_agent 自定义 Agent
05_workflow 工作流编排
06_advanced_features 高级特性
07_mid_priority_features 中优先级特性
08_low_priority_features 低优先级特性
09_full_integration 完整集成
11_multi_provider_apis 多提供商 API
12_complete_rag_system RAG 系统
13_new_providers 新提供商
14_guardrails 安全护栏
15_structured_output 结构化输出
16_a2a_protocol A2A 协议
18_advanced_agent_features 高级 Agent 特性
19_2026_features 2026 新特性
20_multimodal_providers 多模态提供商
21_research_workflow 研究工作流

📚 文档

🔧 技术栈

  • Go 1.24+
  • MongoDB - 对话/运行状态/记忆/审计日志持久化
  • Redis - 短期记忆/缓存
  • PostgreSQL/MySQL/SQLite - 元数据 (GORM)
  • Qdrant/Pinecone/Milvus/Weaviate - 向量存储
  • Prometheus - 指标收集
  • OpenTelemetry - 分布式追踪
  • Zap - 结构化日志
  • tiktoken-go - OpenAI Token 计数
  • github.com/coder/websocket - WebSocket 客户端
  • golang-migrate - 数据库迁移
  • yaml.v3 - YAML 解析

📄 License

MIT License - 详见 LICENSE

About

AgentFlow: A production-grade Go LLM Agent framework with layered architecture, multi-provider LLM support, memory systems, reasoning modes, and workflow engine. 生产级 Go 语言 LLM Agent 框架。

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages