Agentic Application Stack

Agentic 应用的技术栈分层:从用户界面到 Agent 引擎,每一层的职责、选型和工程边界。

#type / concept #status / evergreen #tech / ai #tech / architecture

[!info] related notes

Agentic Application Stack

一句话定义

Agentic Application Stack 是构建 AI Agent 应用所需的完整技术栈分层,从用户界面到 Agent 引擎,每一层有明确的职责边界和选型考量。

它解决什么问题

很多团队在构建 AI Agent 应用时遇到的问题不是”能不能调通 API”,而是:

  • 前端和后端的职责怎么划分?谁管 SSE?
  • Python AI Service 需要直接查业务数据库吗?
  • 工具注册和执行放在哪一层?
  • 上下文组装在 Go 端还是 Python 端?
  • 流式事件的协议怎么定义?

技术栈分层不清晰,会导致代码散落、职责混乱、难以维护。

核心原理

四层架构

┌─────────────────────────────────────────────────────┐
│  Layer 1: 用户交互层 (React)                         │
│  Chat UI · Tool Call UI · Approval UI · Artifact UI  │
├─────────────────────────────────────────────────────┤
│  Layer 2: 业务编排层 (Go)                            │
│  Session · Message · Context Builder · SSE Gateway   │
├─────────────────────────────────────────────────────┤
│  Layer 3: Agent 引擎层 (Python)                      │
│  Agent Runtime · Tool Registry · RAG · Memory        │
├─────────────────────────────────────────────────────┤
│  Layer 4: 基础设施层                                 │
│  LLM Provider · Vector DB · Database · Object Store  │
└─────────────────────────────────────────────────────┘

各层职责边界

核心职责不该做的事
React 前端渲染、交互、状态展示不做业务逻辑、不直接调 LLM
Go 后端会话管理、上下文组装、协议转换、权限不做 Agent 推理、不直接查向量库
Python AI ServiceAgent 推理、工具执行、RAG、记忆不直接查业务数据库、不管用户鉴权
基础设施提供 LLM、向量存储、文件存储不包含业务逻辑

层间通信协议

React ←→ Go:   HTTP REST + SSE (流式)
Go ←→ Python:  gRPC 或 HTTP + SSE (流式)
Python ←→ LLM: HTTP API (OpenAI/Anthropic 兼容协议)

典型工程实现

一个请求的完整数据流

用户输入 "分析最近的销售趋势"


[React] POST /api/chat/message


[Go] Auth → Create Turn → ContextBuilder.Build()


[Go] POST /ai-service/chat (携带 Context Bundle)


[Python] AgentRuntime.start_run(context)

        ├── LLM 推理 → 决定调用 query_database
        ├── ToolExecutor.execute(query_database)
        ├── 结果回传 LLM
        ├── LLM 推理 → 决定调用 create_chart
        ├── ToolExecutor.execute(create_chart)
        ├── LLM 生成最终回复


[Python] SSE stream → Go → React


[React] 渲染: 文本 + 图表 + 工具调用状态

技术选型参考

推荐技术栈替代方案
前端React + Vercel AI SDK / assistant-uiNext.js、Vue
后端Go (Gin/Echo) + SSENode.js (Express/Fastify)
AI ServicePython (FastAPI) + LangGraphTypeScript (Vercel AI SDK)
LLMOpenAI API / Anthropic API自部署模型
向量库pgvector (MVP) → Qdrant/Milvus (规模化)Pinecone、Weaviate
数据库PostgreSQLMySQL、MongoDB
对象存储S3 / MinIO本地文件系统
可观测性OpenTelemetry + LangSmith/Langfuse自建

常见设计模式

1. BFF 模式 (Backend For Frontend)

Go 后端作为前端的专用后端,负责协议转换和上下文组装,不暴露 AI Service 的内部细节。

2. AI Service 独立部署

Python AI Service 作为独立服务,通过内部 API 与 Go 通信。好处是独立扩缩容、独立发布。

3. LLM Provider 抽象

AI Service 内部通过抽象层对接多个 LLM Provider,支持模型切换和 Fallback。

4. 事件驱动的流式架构

全链路 SSE 流式:Python → Go → React,事件逐层透传。

常见坑

  1. Go 后端变成纯转发层: Go 不该只是透传请求,应该负责上下文组装、权限、审计
  2. Python 直接查业务数据库: 打破了层间边界,导致耦合
  3. 前端直接调 AI Service: 绕过了权限和审计
  4. 没有统一的事件协议: 每层各自定义事件格式,对接困难
  5. 过度工程化: MVP 阶段不需要微服务,单体 + 模块化就够了

和其他概念的关系

极简示例

一个最小可用的技术栈:

前端: React + fetch + EventSource
后端: Go (单文件 handler)
AI:   Python FastAPI + OpenAI SDK
DB:   PostgreSQL + pgvector

不需要 Kubernetes、不需要微服务、不需要消息队列。先把单体跑通,再按需拆分。

总结

技术栈分层的核心原则是:每层只做自己擅长的事。前端管渲染,后端管编排和权限,AI Service 管推理和执行,基础设施管存储和计算。层间通过清晰的协议通信,而不是共享数据库。

参考资料

创建于 2026/6/30 更新于 2026/7/15