"六层架构"是业界对一个可用 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。我特别强

125

被折叠的 条评论
为什么被折叠?



