面试题:说说你理解的 Agent 六层架构

"六层架构"是业界对一个可用 Agent 系统的分层拆解。 它的价值在于:当面试官问"你怎么设计一个 Agent"时,你能按层展开而不遗漏

图 1-1 Agent 六层架构

从上到下是调用方向,从下到上是依赖方向。面试时按这个顺序逐层说明,不会漏

回答技巧:不要干巴巴背六层,要每层配一句"这层的常见坑"

  • L1 模型层:坑在降级——主模型挂了有没有兜底?成本有没有上限?
  • L2 能力层:坑在工具描述——写得含糊,模型就不会用或乱用。
  • L3 上下文层:坑在膨胀——不加管理,上下文迟早爆窗。
  • L4 智能体层:坑在死循环——必须有迭代上限和熔断。
  • L5 编排层:坑在状态——断点续跑、并发会话隔离有没有做。
  • L6 接入层:坑在流式与超时——长任务前端怎么展示进度。

一句话速记模型 → 能力 → 上下文 → 智能体 → 编排 → 接入;答场景题时按这六层展开,每层补一个坑,就是一份高分答案。

核心代码表达:Agent 六层架构的“填坑指南”

面试时,你可以按照以下结构进行表述:“这一层的坑是……我们在代码里是这样解决的……”

L1 模型层 - 坑:主模型挂了没有兜底,成本没有上限
from langchain.chat_models import init_chat_model
from langchain.agents import create_agent

# 解决方案 1:降级(Fallback)
model = init_chat_model(
    "openai:gpt-4o", 
    temperature=0, 
    timeout=30, 
    # 超时和重试是标配
    max_retries=2 
)

# 推荐使用内置中间件实现降级链
agent = create_agent(
    model=model, 
    tools=tools, 
    middleware=[
        # 重试 3 次后仍失败,切换到备选模型
        ToolRetryMiddleware(max_attempts=3), 
        # 主模型失败,自动切换到备选
        ModelFallbackMiddleware(
            "anthropic:claude-sonnet-4-6",
            # 还可以继续链式降级,比如到 gpt-4o-mini
        ), 
    ]
)

# 解决方案 2:成本上限(Budget)
# 用中间件控制单次会话的模型调用次数,防止恶意刷量
from langchain.agents.middleware import ModelCallLimitMiddleware

agent = create_agent(
    model=model,
    tools=tools,
    middleware=[
        # 最多调用 15 次模型,防止死循环和成本失控
        ModelCallLimitMiddleware(limit=15, exit_behavior="end"), 
    ]
)

面试加分点: “我们不仅设了超时重试,更重要的是建立了降级链。ModelFallbackMiddleware 是 v1 最重要的可靠性武器。同时,ModelCallLimitMiddleware 是我们成本控制的第一道防线,必须配。”


L2 能力层 - 坑:工具描述写得含糊,模型不会用或乱用
from langchain.tools import tool
from pydantic import BaseModel, Field
from typing import Annotated
from langchain.tools import InjectedToolArg

# 解决方案:编写“高质量的工具定义”
class SearchOrdersInput(BaseModel):
    """严格地描述参数,给模型清晰的指引。"""
    query: str = Field(description="搜索关键词,可以是订单号、商品名或收件人。")
    user_id: Annotated[str, InjectedToolArg] # 运行时注入,模型看不到这个参数
    limit: int = Field(default=5, ge=1, le=10, description="返回结果数量")

@tool(args_schema=SearchOrdersInput)
def search_orders(query: str, user_id: str, limit: int) -> str:
    """
    【核心工具】按关键词搜索用户的订单。
    使用场景:用户问“我的XXX订单在哪里”、”最近买了什么“。
    切勿用于:查询商品详情、修改订单状态(这是其它工具的职责)。
    如果用户未提供搜索关键词,必须主动询问,不要凭空猜测。
    """
    return f"搜索到 {limit} 条与'{query}'相关的订单..."

面试加分点: “坑在于模型把工具当黑盒。解决方法是精确地写 description 和 args_schema。我特别强

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值