一、引言:架构范式的根本转移

当大模型(LLM)的能力逐渐同质化,基于Agent(智能体)的应用架构正在成为新的技术护城河。2026年AI技术生态迎来了一个关键转折:单一模型能力已无法满足复杂业务需求,以智能体为核心的多角色协同系统成为主流。这标志着AI从工具属性向自主生产力属性的质变。

对开发者而言,这意味着关注点必须从“Prompt调优”转向“系统编排与治理”。一个“能跑起来的Agent”与一个“能稳定落地、可持续演化的Agent系统”,完全是两个层级的事情。本文将从架构师视角,系统阐述全栈大模型智能体系统的核心架构设计、关键组件实现与工程实践。

二、整体架构:从线性链到图编排

早期LLM应用普遍采用“提示 → LLM → 响应”的线性模式,但这种架构难以应对真实智能体系统的复杂性。生产环境中的多智能体协作需要分支(基于数据选择不同执行路径)、循环(支持重试与迭代优化)、汇合(多个智能体向共享状态写入数据),以及条件路由(根据执行结果动态决定后续流程)。

一个完整的企业级Agent系统,其核心架构可以抽象为五个层次:

┌─────────────────────────────────────────────────────────────┐
│              治理层(Guardrails & Observability)			  |
├─────────────────────────────────────────────────────────────┤
│                  编排层(Orchestration Engine)			  |           
│         ┌──────────┐  ┌──────────┐  ┌──────────┐			  |          
│         │ Planner  │→ │Executor  │→ │ Verifier │			  |          
│         └──────────┘  └──────────┘  └──────────┘ 			  |
|                                                             |
├─────────────────────────────────────────────────────────────┤
│               记忆层(Memory & State Management)			  |           
│         短期记忆(Thread) + 长期记忆(Vector DB)			  |           
├─────────────────────────────────────────────────────────────┤
│             数据层(RAG & Knowledge Graph)			      |                 
│      向量检索  +  知识图谱  +  混合检索与重排			      |               
├─────────────────────────────────────────────────────────────┤
│                   模型层(LLM Foundation)			          |                    
│        基座模型  +  SFT  +  RLHF/RLALF 后训练			      |                 
└─────────────────────────────────────────────────────────────┘

下面逐层深入。

三、编排层:用LangGraph构建多智能体工作流

编排层是Agent系统的“大脑中枢”。LangGraph是目前最主流的编排框架之一,其核心设计理念是:多智能体工作流本质上是图结构,而非线性链。

3.1 状态图驱动的工作流

LangGraph里每个工作流都是一个StateGraph——本质上是有向图。节点就是智能体(处理状态的函数),是智能体之间的转换,状态是在整个图中流动的共享数据结构。

以下是一个典型的“智能导购Agent”工作流实现:

from langgraph.graph import StateGraph, END
from typing import TypedDict, List, Dict, Any
from langchain_openai import ChatOpenAI
from langchain.tools import Tool
from langgraph.checkpoint import MemorySaver

# 定义状态结构
class ShoppingState(TypedDict):
    user_query: str
    intent: str
    budget: float
    category: str
    candidates: List[Dict[str, Any]]
    selected_product: Dict[str, Any]
    reasoning: str
    final_response: str
    retry_count: int
    resolved: bool

# 初始化LLM
llm = ChatOpenAI(model="gpt-4", temperature=0.1)

# ----- 各智能体节点定义 -----
def intent_analyzer(state: ShoppingState) -> dict:
    """意图识别Agent:解析用户查询,提取意图、预算、品类"""
    prompt = f"分析用户查询,提取意图、预算范围和商品品类:{state['user_query']}"
    response = llm.invoke(prompt)
    # 模拟解析结果
    return {
        "intent": "product_search",
        "budget": 3000,
        "category": "手机"
    }

def product_searcher(state: ShoppingState) -> dict:
    """商品搜索Agent:根据意图和预算检索商品"""
    # 这里实际应调用向量检索或商品API
    candidates = [
        {"name": "Phone X", "price": 2999, "score": 0.95},
        {"name": "Phone Y", "price": 2499, "score": 0.88}
    ]
    return {"candidates": candidates}

def product_reasoner(state: ShoppingState) -> dict:
    """推理分析Agent:对候选商品进行综合评估"""
    prompt = f"基于用户需求(预算{state['budget']}),评估以下商品:{state['candidates']}"
    reasoning = llm.invoke(prompt).content
    return {"reasoning": reasoning}

def selection_agent(state: ShoppingState) -> dict:
    """选品决策Agent:做出最终推荐"""
    # 基于推理结果选择最优商品
    selected = state["candidates"][0] if state["candidates"] else {}
    return {
        "selected_product": selected,
        "final_response": f"推荐{selected.get('name')},价格{selected.get('price')}元",
        "resolved": True
    }

def fallback_agent(state: ShoppingState) -> dict:
    """兜底Agent:当推荐失败时,进行澄清追问"""
    return {
        "final_response": "抱歉,未找到匹配商品。能否提供更多需求信息?",
        "resolved": False
    }

# ----- 构建工作流图 -----
workflow = StateGraph(ShoppingState)

# 添加节点
workflow.add_node("intent", intent_analyzer)
workflow.add_node("search", product_searcher)
workflow.add_node("reason", product_reasoner)
workflow.add_node("select", selection_agent)
workflow.add_node("fallback", fallback_agent)

# 定义静态边
workflow.add_edge("intent", "search")
workflow.add_edge("search", "reason")

# 条件边:根据候选结果决定走select还是fallback
def route_after_reason(state: ShoppingState) -> str:
    if state.get("candidates") and len(state["candidates"]) > 0:
        return "select"
    return "fallback"

workflow.add_conditional_edges(
    "reason",
    route_after_reason,
    {
        "select": "select",
        "fallback": "fallback"
    }
)

# 终止条件
workflow.add_conditional_edges(
    "select",
    lambda s: "resolved" if s.get("resolved") else "retry",
    {
        "resolved": END,
        "retry": "intent"  # 支持重试循环
    }
)
workflow.add_edge("fallback", END)

# 设置入口
workflow.set_entry_point("intent")

# 编译并启用记忆检查点
memory = MemorySaver()
app = workflow.compile(checkpointer=memory)

# ----- 执行示例 -----
config = {"configurable": {"thread_id": "user_session_001"}}
result = app.invoke(
    {"user_query": "帮我推荐一款3000元左右的手机"},
    config=config
)
print(result["final_response"])

3.2 运行时机制与状态管理

工作流启动后,LangGraph用状态机来管理执行。关键设计原则是:智能体永远不会直接修改共享状态——它们拿到的是只读副本,返回增量更新,实际的状态修改由LangGraph原子性地合并。这种职责分离让系统好理解、好调试、好扩展。

节点、边、状态三者各司其职:

  • 节点封装具体逻辑操作,只管做事
  • 定义节点间交互顺序
  • 状态承载共享上下文,让节点保持无状态

3.3 多智能体协作模式

在实际系统中,多智能体协作主要有三种模式:

  1. 主管模式(Supervisor) :单个中央主管智能体协调所有通信流和任务委派
  2. 群组模式(Swarms) :智能体根据专业性动态地相互移交控制权
  3. 层级模式(Hierarchical) :结合高层规划与模块化Agent协作

选择哪种模式取决于业务复杂度。对于智能导购这类场景,主管模式最为合适——一个主Agent负责意图识别和任务分解,多个子Agent分别负责搜索、推理、选品等专项任务。

四、记忆层:让Agent拥有“连续性”

LLM本身是无状态的。如果LLM的所有决策都只依赖于调用瞬间看到的“世界”,那么Agent就无法实现多轮对话的上下文连贯性。状态必须由系统自己来管理

4.1 短期记忆(线程级)

LangGraph通过checkpointer机制实现短期记忆。在上面的代码中,MemorySaver将每个thread_id的完整状态持久化,确保多轮对话的上下文不丢失。

4.2 长期记忆(跨会话)

长期记忆让Agent能够跨不同会话存储和召回信息。实现方式通常是将关键信息向量化后存入向量数据库:

from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
from langchain.memory import ConversationSummaryBufferMemory

# 长期记忆存储
embeddings = OpenAIEmbeddings()
vector_store = Chroma(
    collection_name="agent_long_term_memory",
    embedding_function=embeddings
)

class LongTermMemory:
    def __init__(self, vector_store):
        self.store = vector_store
    
    def save_memory(self, user_id: str, key: str, content: str):
        """保存用户级别的长期记忆"""
        self.store.add_texts(
            texts=[content],
            metadatas=[{"user_id": user_id, "key": key}]
        )
    
    def recall_memory(self, user_id: str, query: str, k: int = 3):
        """根据查询召回相关记忆"""
        results = self.store.similarity_search(
            query,
            k=k,
            filter={"user_id": user_id}
        )
        return [doc.page_content for doc in results]

4.3 记忆的进化机制

前沿的记忆系统已经不只是简单的“存取”。Engram等项目模拟人类记忆的遗忘、强化、联想机制,让Agent跨会话记住真正重要的事,自然忘掉不再需要的细节。这种自进化记忆是构建真正智能的长期记忆系统的关键方向。

五、数据层:RAG与知识图谱的深度融合

RAG(检索增强生成)是解决LLM幻觉问题的标准解法。但在企业级场景中,单纯的向量检索远远不够——需要知识图谱的结构化推理能力与向量检索的语义理解优势相结合。

5.1 混合检索架构

from langchain.retrievers import EnsembleRetriever
from langchain.vectorstores import Chroma
from langchain_community.graphs import Neo4jGraph
from langchain.chains import GraphCypherQAChain

class HybridRetriever:
    def __init__(self, vector_store: Chroma, graph: Neo4jGraph):
        self.vector_store = vector_store
        self.graph = graph
        self.ensemble = EnsembleRetriever(
            retrievers=[self.vector_store.as_retriever(), self.graph_retriever],
            weights=[0.6, 0.4]  # 向量检索权重大于图检索
        )
    
    def graph_retriever(self, query: str):
        """基于知识图谱的检索"""
        cypher_chain = GraphCypherQAChain.from_llm(
            llm=ChatOpenAI(),
            graph=self.graph,
            verbose=True
        )
        return cypher_chain.run(query)
    
    def retrieve(self, query: str):
        """混合检索:向量 + 图谱"""
        vector_results = self.vector_store.similarity_search(query, k=5)
        graph_results = self.graph_retriever(query)
        # 融合排序
        return self.merge_and_rerank(vector_results, graph_results)

5.2 GraphRAG:图增强的检索生成

GraphRAG通过融合知识图谱的结构化推理与向量检索,显著提升复杂知识场景下的生成准确性。其核心子系统包括:

  • 知识图谱理解抽取系统:从非结构化数据中抽取实体和关系
  • GraphRAG引擎系统:执行图遍历和多跳推理
  • 支持RAG的AI工程框架:将检索结果注入LLM上下文

在智能导购场景中,商品之间的“替代关系”、“配套关系”、“价格锚定”等复杂关联,只有通过知识图谱才能有效建模和检索。

六、模型层:后训练与数据飞轮

基座模型(如GPT-4、Claude、Qwen)提供了通用能力,但要在特定业务领域达到最优表现,必须进行领域后训练。

6.1 SFT(有监督微调)

SFT是后训练的第一步:收集高质量的(prompt, response)数据对,用标准交叉熵损失函数对预训练模型进行微调。数据通常包括指令跟随数据、特定领域专业数据和多轮对话数据。

from transformers import AutoModelForCausalLM, TrainingArguments, Trainer
from datasets import load_dataset

# 加载基座模型
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2-7B")

# 加载领域SFT数据(如电商导购对话数据)
dataset = load_dataset("json", data_files="shopping_sft_data.jsonl")

# 配置训练
training_args = TrainingArguments(
    output_dir="./shopping_agent_sft",
    num_train_epochs=3,
    per_device_train_batch_size=4,
    learning_rate=2e-5,
    fp16=True,
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=dataset["train"]
)
trainer.train()

6.2 RLHF/RLALF:偏好对齐

SFT之后,通过RLHF(基于人类反馈的强化学习)或RLALF(基于AI反馈的强化学习)使模型输出更符合用户偏好。完整的RLHF流程包括:

  1. SFT:在指令数据上微调基座模型
  2. 奖励模型训练:训练一个模型来评估输出质量
  3. PPO强化学习:用奖励模型指导策略优化

6.3 数据飞轮

打通C端线上交互数据的自动化回流链路,是构建数据飞轮的关键。每次用户与Agent的交互,都可以转化为训练数据:

class DataFlywheel:
    def __init__(self):
        self.feedback_store = []
    
    def collect_interaction(self, user_query: str, agent_response: str, 
                           user_feedback: int, resolved: bool):
        """收集一次交互数据"""
        self.feedback_store.append({
            "prompt": user_query,
            "response": agent_response,
            "score": user_feedback,  # 用户评分 1-5
            "resolved": resolved,
            "timestamp": datetime.now()
        })
    
    def generate_training_data(self, threshold: int = 4):
        """筛选高质量交互生成SFT数据"""
        high_quality = [d for d in self.feedback_store if d["score"] >= threshold]
        # 格式化为SFT所需的 (instruction, response) 格式
        return self.format_for_sft(high_quality)

七、治理层:安全护栏与可观测性

在生产阶段,我们关注的是“可不可控”而非“能不能跑通”。

7.1 输入/输出安全护栏

防止Prompt注入攻击及敏感数据泄露:

from guardrails import Guard
from guardrails.hub import ToxicLanguage, ProfanityFree

class AgentGuardrails:
    def __init__(self):
        self.input_guard = Guard().use(
            ToxicLanguage(threshold=0.7),
            ProfanityFree()
        )
    
    def validate_input(self, user_input: str) -> bool:
        """验证用户输入是否安全"""
        result = self.input_guard.validate(user_input)
        return result.validation_passed
    
    def validate_output(self, agent_output: str) -> bool:
        """验证Agent输出是否安全"""
        # 检查是否包含敏感信息、幻觉内容等
        return self.safety_check(agent_output)

7.2 可观测性

利用Tracing工具追踪Agent的每一步思考过程。LangSmith等工具可以完整记录每个节点的输入、输出、耗时和Token消耗,为调试和优化提供数据支撑。

八、总结:从代码编写者到智能体编排者

构建全栈大模型智能体系统,技术栈横跨模型层、数据层、编排层、记忆层和治理层,要求开发者具备从算法思路到工程落地的全链路能力。

未来的核心竞争力将不再是“手搓模型”,而是:

  • 业务理解力:深刻理解垂直场景的工作流
  • 架构设计力:设计高内聚、低耦合的Agent系统
  • 编排治理力:让多个Agent协同工作且安全可控

从“代码编写者”进化为“智能体编排者”,这不仅是技术的升级,更是思维方式的重塑。当大模型能力逐渐同质化,系统架构能力才是真正的技术护城河。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐