LLM应用架构模式:从简单到复杂系统
简单链、RAG、智能体与多智能体模式及决策框架
LLM应用架构模式:从简单到复杂系统
简单链、RAG、智能体与多智能体模式及决策框架
LLM 应用架构模式:RAG、Agent/工具调用、模型路由、缓存、评估(evals)、护栏(guardrails)与可观测性等真实模式与取舍。
构建基于大语言模型(LLM)的应用时,架构选择直接决定了系统的可靠性、可维护性和成本。从简单的单次调用到复杂的多智能体协作,每种模式都有其适用场景和权衡。本文梳理从单体到流水线、从无状态到有状态、从无工具到多工具的常见架构模式,并给出选型建议。
单体模式:最简起点
核心思路:将用户输入直接传给 LLM,返回结果。无外部数据、无工具调用、无状态管理。
python
伪代码示例:单体模式
def simple_chat(user_input: str) -> str:
response = llm.generate(user_input)
return response
关键取舍:单体模式是起点,但几乎不适用于生产级应用。一旦需要引用外部数据或执行动作,就必须引入其他模式。
检索增强生成(RAG):解决知识边界
RAG 模式在 LLM 调用前增加检索步骤,从外部知识库(如向量数据库、搜索引擎)获取相关文档,作为上下文注入 prompt。
python
伪代码示例:RAG 模式
def rag_answer(query: str) -> str:
docs = vector_store.similarity_search(query, k=5)
context = "\n".join([doc.text for doc in docs])
prompt = f"基于以下资料回答:\n{context}\n问题:{query}"
return llm.generate(prompt)
选型建议:RAG 是当前最成熟的知识增强方案。若知识库规模大(百万级文档),需考虑分片策略和索引优化;若对实时性要求高,可结合缓存。
工具调用/函数调用:赋予 LLM 行动能力
工具调用(Tool Calling)让 LLM 能够调用外部 API、数据库、计算器或代码解释器。模型输出结构化 JSON 描述要调用的函数及其参数,由应用层执行并返回结果。
python
伪代码示例:工具调用
def handle_tool_call(user_input: str) -> str:
response = llm.generate_with_tools(user_input, tools=[get_weather, search_db])
if response.tool_call:
result = execute_tool(response.tool_call)
return llm.generate(f"工具返回:{result},请回答用户")
return response.text
选型建议:工具调用是构建 Agent 的基础。若应用需要执行多步操作(如先查数据库再发邮件),需配合状态管理。
Agent 模式:多步推理与自主决策
Agent 模式让 LLM 在循环中自主决定下一步动作:思考 → 调用工具 → 观察结果 → 继续推理,直到完成任务或达到终止条件。
选型建议:Agent 模式适合探索性任务,但对可靠性要求高的生产系统需谨慎。可考虑“受限 Agent”:限定工具集、步骤数、输出格式。
路由模式:智能分流
路由模式(Model Router)根据输入特征(如意图、语言、复杂度)将请求分发到不同的处理流程或模型。
python
伪代码示例:路由模式
def route_request(user_input: str) -> str:
intent = classify_intent(user_input) # 可用 LLM 或分类模型
if intent == "faq":
return rag_answer(user_input)
elif intent == "calculation":
return tool_call_answer(user_input)
else:
return simple_chat(user_input)
缓存模式:降本增效
缓存模式在 LLM 调用前检查是否已有相同或相似请求的结果。
评估与护栏:保障质量与安全
选型建议:评估和护栏应作为基础设施,而非事后补救。建议在 CI/CD 中集成评估流水线,在生产中部署实时护栏。
可观测性:理解系统行为
LLM 应用的黑盒特性要求更强的可观测性。关键指标:延迟、token 消耗、工具调用次数、错误率、用户满意度。常用工具:OpenTelemetry、LangSmith、自定义日志。
常见坑:仅记录输入输出,忽略中间步骤(如检索结果、工具调用链)。建议记录完整 trace,包括 prompt 模板、检索文档、工具返回值。
单体 vs 流水线:架构风格对比
选型建议:从单体开始,当需要引入外部知识或工具时,逐步拆分为流水线。不要过早抽象。
选型综合建议
FAQ
Q1: RAG 和微调有什么区别?什么时候用 RAG? A: RAG 在推理时检索外部知识,适合知识频繁更新或需要引用来源的场景。微调改变模型行为(如风格、格式),适合固定知识或特定输出格式。RAG 更灵活,微调更稳定。
Q2: Agent 模式中如何防止无限循环? A: 设置最大迭代次数(如 10 步)、超时时间(如 30 秒)、以及“无进展”检测(连续相同工具调用)。建议在 Agent 循环中加入“思考”步骤的 token 限制。
Q3: 语义缓存和精确缓存哪个更好? A: 取决于场景。精确缓存零误匹配,但命中率低。语义缓存命中率高,但有误匹配风险。生产环境建议两者结合:先查精确缓存,再查语义缓存,并设置相似度阈值。
Q4: 路由模式中如何选择分类器? A: 简单场景用规则(如关键词匹配)或轻量分类模型(如 fastText)。复杂场景用 LLM 做动态路由(但成本高)。建议先用规则兜底,再逐步引入模型。
Q5: 评估 LLM 输出时,如何避免“LLM-as-judge”的偏见? A: 使用多个 judge 模型投票、引入人工抽检、定义明确的评分标准(如“是否包含事实错误”而非“是否好”)。也可用对比评估(A/B 测试)替代绝对评分。
*最后更新:2026 年 7 月。请以各工具官方文档为准。*
相关教程
构建生产级检索增强生成系统,实现大规模向量搜索
使用参数高效微调技术,将基础模型高效适配到你的领域
使用现代 Python AI 栈构建生产级 AI 应用
面向开发者的LLM API对比:定价、速率限制、SDK及生产模式
无需额外训练,组合多个微调模型以创建更优模型
从部署到调优,手把手搭建企业级 RAG 知识库问答系统