news 2026/7/6 2:39:14

从RAG到智能体:构建生产级可信AI Agent的工程化实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从RAG到智能体:构建生产级可信AI Agent的工程化实践

🚀 30+款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度

在实际企业级 AI 应用开发中,单纯依赖大语言模型(LLM)的问答能力往往难以应对复杂、动态且对准确性要求极高的场景。一个典型的挑战是:如何让 AI 系统不仅能理解用户意图,还能自主调用外部工具(如搜索引擎、数据库、API)获取最新、最准确的信息,并最终生成一个结构清晰、来源可信的答案?这正是“工程化 Agentic RAG 系统”要解决的核心问题。它不是一个简单的检索增强生成(RAG),而是一个融合了智能体(Agent)决策、工具调用、多步推理和结果验证的复杂系统。本文将以一个从“调用 Google Search”到构建“生产级可信 AI Agent”的演进路径为主线,为你拆解其背后的设计思想、核心组件、实现步骤以及从原型走向生产必须跨越的工程化鸿沟。无论你是希望构建一个能自动调研市场动态的智能助手,还是一个能精准回答内部技术文档问题的知识库 Agent,本文提供的思路和方案都将为你提供一条清晰的实践路径。

1. 理解 Agentic RAG 系统的核心架构与演进

传统的 RAG 系统通常遵循“检索 -> 排序 -> 生成”的固定流水线。用户提问,系统从向量库中检索相关文档片段,然后由 LLM 基于这些片段生成答案。这种模式在文档静态、问题明确的场景下有效,但存在明显局限:无法处理动态信息(如实时股价、新闻),无法执行复杂操作(如计算、数据查询),且一旦检索结果不相关,生成的答案质量会急剧下降。

Agentic RAG 系统则引入了“智能体”范式。它将 LLM 视为一个具备推理和决策能力的“大脑”,而 RAG 检索、工具调用、代码执行等则是其可用的“工具”或“技能”。系统的工作流程不再是线性的,而是由 LLM 根据对任务的理解,动态规划并执行一系列动作。

1.1 从简单 RAG 到 Agentic RAG 的演进

我们可以通过一个查询的演变来理解这种区别:

  • 查询:“苹果公司最新一季的营收是多少?与上一季度相比增长了多少百分比?”

  • 传统 RAG:系统会从预存的关于苹果公司的财报文档中检索可能包含“营收”、“季度”等关键词的片段。如果文档库没有最新的财报数据,或者数据是分散的,系统可能无法给出准确答案,更无法完成百分比计算。

  • Agentic RAG

    1. 规划:LLM 分析问题,识别出需要两个关键信息:最新季度营收上一季度营收,并需要进行数学计算。
    2. 执行
      • 动作 1:调用Web Search Tool,搜索“Apple Q1 2024 earnings revenue”。
      • 观察:解析搜索结果,提取出营收数字(例如 1196 亿美元)。
      • 动作 2:调用Web Search Tool,搜索“Apple Q4 2023 earnings revenue”。
      • 观察:解析搜索结果,提取出营收数字(例如 895 亿美元)。
      • 动作 3:调用Calculator Tool,计算增长率(1196 - 895) / 895 * 100%
    3. 生成:LLM 综合所有观察结果,组织语言生成最终答案:“苹果公司最新一季(2024财年Q1)营收为1196亿美元,相比上一季度(2023财年Q4)的895亿美元,环比增长约33.6%。”

这个过程中,LLM 扮演了“规划者”和“调度者”的角色,而 RAG 检索(可能用于查找公司背景)和网络搜索、计算器等工具则是其执行单元。

1.2 生产级可信 Agent 的关键特征

一个停留在原型阶段的 Agent 和一个能投入生产环境的可信 Agent 有天壤之别。生产级 Agent 必须具备以下特征:

  • 可靠性:能处理各种边界情况和异常输入,不会轻易崩溃或陷入死循环。
  • 可控性:对工具调用有明确的权限和次数限制,避免产生不可控的成本或副作用(如无限循环搜索)。
  • 可解释性:每一步的决策、调用的工具、使用的源数据都有清晰的日志记录,便于追溯和审计。
  • 准确性:具备结果验证和交叉检查机制,减少“幻觉”(Hallucination)。
  • 性能:响应延迟在可接受范围内,能有效管理 LLM 调用和工具调用的开销。

2. 环境准备与核心工具链选择

构建这样一个系统,选择合适的工具链是成功的第一步。我们将基于一个主流的开源技术栈进行搭建。

2.1 基础环境与 LLM 服务

首先,你需要一个 Python 开发环境(建议 3.9+)和访问 LLM API 的能力。

# 创建项目目录并初始化虚拟环境 mkdir agentic-rag-system && cd agentic-rag-system python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate # 安装核心依赖 pip install langchain langchain-community langchain-openai tavily-python
  • LangChain/LangGraph:这是构建 Agent 系统的首选框架。LangChain提供了丰富的组件(Models, Prompts, Chains, Agents, Tools),而LangGraph特别适合构建有状态、多步骤的智能体工作流。我们将主要使用它。
  • LLM 提供商:我们使用 OpenAI 的 GPT-4 或 GPT-3.5-Turbo 作为“大脑”。你需要准备一个有效的OPENAI_API_KEY
  • 搜索工具:我们将使用Tavily Search API作为示例。它是一个为 AI Agent 优化的搜索引擎 API,返回结构化的结果,比直接调用 Google 搜索 API 更简单。你需要注册并获取TAVILY_API_KEY。当然,你也可以使用 Serper、Google Search API 等替代方案。

2.2 工具(Tools)的定义

工具是 Agent 能力的延伸。在 LangChain 中,工具通常是一个 Python 函数,配合描述性文档,供 LLM 理解和调用。

我们先定义一个简单的网络搜索工具和一个计算器工具。

# tools.py import os from langchain_community.tools.tavily_search import TavilySearchResults from langchain.tools import tool import math # 初始化 Tavily 搜索工具 os.environ["TAVILY_API_KEY"] = "your_tavily_api_key_here" search_tool = TavilySearchResults(max_results=3) # 限制结果数量以控制成本与上下文长度 # 定义一个计算器工具 @tool def calculator(expression: str) -> str: """执行数学计算。输入应为一个有效的数学表达式字符串,例如 ‘(10 + 5) * 2‘。只支持基本算术和 math 库函数。""" try: # 警告:使用 eval 有安全风险,此处仅用于演示。生产环境应使用更安全的表达式解析器(如 ast.literal_eval 配合限制)。 # 确保 expression 只包含数字、运算符和安全的 math 函数 allowed_names = {k: v for k, v in math.__dict__.items() if not k.startswith("_")} allowed_names.update({"abs": abs, "round": round}) result = eval(expression, {"__builtins__": {}}, allowed_names) return str(result) except Exception as e: return f"计算错误:{e}" # 工具列表 tools = [search_tool, calculator]

关键解释

  1. @tool装饰器将函数转换为 LangChain 可识别的工具。函数的文档字符串("""执行数学计算...""")至关重要,LLM 依靠它来决定何时以及如何调用该工具。
  2. 我们为TavilySearchResults设置了max_results=3,这是生产环境中的重要实践,用于控制每次搜索返回的数据量,避免上下文窗口被撑爆。
  3. calculator工具中使用了eval,这在演示中方便,但在生产环境是高危操作。必须替换为安全的表达式求值库(如asteval)或严格的白名单验证,绝对禁止执行用户提供的任意代码。

3. 构建一个基础的 ReAct 智能体

ReAct(Reasoning + Acting)是让 LLM 将思考过程与工具调用交织进行的经典范式。我们使用 LangChain 的create_react_agent来快速构建一个。

# agent_basic.py import os from langchain import hub from langchain.agents import AgentExecutor, create_react_agent from langchain_openai import ChatOpenAI from tools import tools # 导入之前定义的工具 # 1. 设置 API Keys os.environ["OPENAI_API_KEY"] = "your_openai_api_key_here" # 2. 初始化 LLM llm = ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0) # 对于 Agent,temperature 通常设为 0 以获得更确定性的输出 # 3. 从 LangChain Hub 拉取一个优化的 ReAct 提示词模板 # 这个模板会指导 LLM 按照 “Thought:”, “Action:”, “Observation:” 的格式进行输出 prompt = hub.pull("hwchase17/react") # 4. 创建 ReAct Agent agent = create_react_agent(llm, tools, prompt) # 5. 创建 Agent 执行器,这是控制 Agent 运行的核心组件 agent_executor = AgentExecutor( agent=agent, tools=tools, verbose=True, # 开启详细日志,方便调试 handle_parsing_errors=True, # 处理 LLM 输出解析错误 max_iterations=5, # 限制最大迭代次数,防止无限循环 early_stopping_method="generate", # 当 Agent 认为任务完成时,输出最终答案 ) # 6. 运行 Agent if __name__ == "__main__": query = "特斯拉当前股价是多少?比一年前上涨了百分之多少?" result = agent_executor.invoke({"input": query}) print("\n=== 最终答案 ===") print(result["output"])

运行这个脚本,你会看到类似以下的详细输出(verbose 模式):

> Entering new AgentExecutor chain... Thought: 用户想知道特斯拉的当前股价以及与一年前相比的涨幅百分比。我需要获取当前股价和一年前的股价。我应该先搜索特斯拉的当前股价。 Action: tavily_search_results_json Action Input: {"query": "Tesla current stock price"} Observation: [{'title': 'Tesla, Inc. (TSLA) Stock Price, News, Quote & History - Yahoo Finance', 'url': 'https://finance.yahoo.com/quote/TSLA/', 'content': 'Find the latest Tesla, Inc. (TSLA) stock quote, history, news and other vital information to help you with your stock trading and investing. The current price is $175.79.'}, ...] Thought: 我找到了当前股价,大约是175.79美元。现在我需要一年前的股价。 Action: tavily_search_results_json Action Input: {"query": "Tesla stock price one year ago"} Observation: [{'title': 'Tesla, Inc. (TSLA) Stock Historical Prices & Data - Yahoo Finance', 'url': 'https://finance.yahoo.com/quote/TSLA/history/', 'content': 'View the historical price data for Tesla, Inc. (TSLA) ... On April 10, 2023, the closing price was $185.06.'}, ...] Thought: 我找到了一年前(大约2023年4月10日)的股价,是185.06美元。现在我需要计算涨幅百分比。计算公式是:((当前价 - 过去价) / 过去价) * 100%。 Action: calculator Action Input: (175.79 - 185.06) / 185.06 * 100 Observation: -5.006484383443208 Thought: 计算结果是约-5.01%。这意味着股价比一年前下跌了约5.01%。我现在有足够的信息来回答用户的问题了。 Action: generate Action Input: 特斯拉(TSLA)当前股价约为175.79美元。相比一年前(2023年4月10日)的收盘价185.06美元,下跌了约5.01%。 > Finished chain. === 最终答案 === 特斯拉(TSLA)当前股价约为175.79美元。相比一年前(2023年4月10日)的收盘价185.06美元,下跌了约5.01%。

关键点分析

  1. 流程可控AgentExecutormax_iterations参数防止了因 LLM 逻辑错误导致的无限循环,这是生产环境的基本安全措施。
  2. 可解释性verbose=True输出的Thought-Action-Observation链,完美记录了 Agent 的决策过程,便于调试和审计。
  3. 工具编排:Agent 自动判断何时使用搜索工具,何时使用计算器,完成了多步骤任务。

4. 工程化进阶:构建可信且健壮的生产级系统

基础 Agent 能跑通,但距离“生产级可信”还有很大差距。我们需要在以下几个方面进行强化。

4.1 使用 LangGraph 实现更复杂、可靠的工作流

LangGraph允许我们将 Agent 的工作流定义为一个有向图(State Graph),节点是函数(工具调用或 LLM 推理),边是条件判断。这带来了更强的控制力。

我们将构建一个包含“验证”节点的图,在 Agent 给出最终答案前,增加一次事实核查步骤。

# agent_graph.py import os from typing import TypedDict, Annotated, List import operator from langgraph.graph import StateGraph, END from langgraph.prebuilt import ToolExecutor, ToolInvocation from langchain_openai import ChatOpenAI from langchain_core.messages import HumanMessage, AIMessage, SystemMessage from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from tools import tools, search_tool # 单独导入 search_tool 用于验证 # 定义状态结构,这是图在不同节点间传递的数据 class AgentState(TypedDict): messages: Annotated[List, operator.add] # 消息历史 final_answer: str # 暂存的最终答案 # 初始化 LLM 和工具执行器 llm = ChatOpenAI(model="gpt-4-turbo-preview", temperature=0) tool_executor = ToolExecutor(tools) # 1. 定义“规划与执行”节点 def plan_and_execute(state: AgentState): messages = state['messages'] # 系统提示词,指导 LLM 使用工具 system_prompt = SystemMessage(content="你是一个有帮助的助手,可以使用工具。请逐步推理,并使用合适的工具来回答问题。") prompt = ChatPromptTemplate.from_messages([ system_prompt, MessagesPlaceholder(variable_name="messages"), ]) # 创建一个绑定工具的 LLM llm_with_tools = llm.bind_tools(tools) # 调用 LLM,期望它返回一个包含工具调用请求的 AIMessage ai_msg = llm_with_tools.invoke(prompt.format_messages(messages=messages)) # 将 LLM 的回复添加到消息历史 state['messages'].append(ai_msg) # 检查 LLM 是否调用了工具 if not ai_msg.tool_calls: # 如果没有调用工具,说明 LLM 直接给出了答案,将其存入 final_answer state['final_answer'] = ai_msg.content return state else: # 如果有工具调用,则执行工具 for tool_call in ai_msg.tool_calls: tool_invocation = ToolInvocation( tool=tool_call['name'], tool_input=tool_call['args'] ) # 执行工具,获取结果 tool_result = tool_executor.invoke(tool_invocation) # 将工具执行结果作为 ToolMessage 添加到历史 state['messages'].append({ "role": "tool", "content": str(tool_result), "tool_call_id": tool_call['id'] }) return state # 2. 定义“验证”节点 def verify_answer(state: AgentState): final_answer = state.get('final_answer') if not final_answer: # 如果还没有最终答案,直接返回当前状态 return state # 基于最终答案,构造一个验证性问题,让另一个 LLM 调用搜索工具进行事实核查 verify_prompt = f""" 请对以下陈述进行事实核查。陈述是:'{final_answer}' 请使用网络搜索工具,查找可靠来源(如官方财报、权威新闻网站),验证该陈述中的关键数据(如股价、营收、日期、百分比)是否准确。 你只需要回复‘验证通过’或指出具体的不准确之处。不要生成新的答案。 """ verify_message = HumanMessage(content=verify_prompt) # 创建一个只绑定搜索工具的 LLM 用于验证,避免二次计算或复杂操作 llm_for_verify = llm.bind_tools([search_tool]) verify_ai_msg = llm_for_verify.invoke([verify_message]) if verify_ai_msg.tool_calls: # 如果验证 LLM 认为需要搜索核查,则执行搜索 tool_call = verify_ai_msg.tool_calls[0] tool_invocation = ToolInvocation(tool=tool_call['name'], tool_input=tool_call['args']) verify_result = tool_executor.invoke(tool_invocation) # 简单判断:如果搜索结果中包含与最终答案明显矛盾的信息,则标记验证失败 # 生产环境这里需要更复杂的逻辑,例如实体匹配、数值比较等 if "contradict" in str(verify_result).lower() or "different" in str(verify_result).lower(): state['final_answer'] = f"[验证警告] 答案可能存在不准确之处,请谨慎参考。原始答案:{final_answer}" else: state['final_answer'] = f"[已验证] {final_answer}" else: # 验证 LLM 没有调用工具,可能认为无需核查或无法核查 state['final_answer'] = f"[未外部验证] {final_answer}" return state # 3. 构建图 workflow = StateGraph(AgentState) # 添加节点 workflow.add_node("agent", plan_and_execute) workflow.add_node("verifier", verify_answer) # 设置入口点 workflow.set_entry_point("agent") # 定义边:在 agent 节点之后,根据是否有 final_answer 决定是否进入验证节点 def route_after_agent(state: AgentState): # 如果 agent 节点产生了 final_answer,则去验证,否则继续循环(但我们需要一个停止条件) if state.get('final_answer'): return "verifier" else: # 如果没有最终答案,说明还在工具调用循环中,应返回 agent 节点。 # 但为了避免无限循环,我们需要在 plan_and_execute 逻辑中控制。 # 这里我们简单返回 agent,实际应结合 max_iterations 逻辑。 return "agent" workflow.add_conditional_edges( "agent", route_after_agent, {"verifier": "verifier", "agent": "agent"} ) workflow.add_edge("verifier", END) # 编译图 app = workflow.compile() # 4. 运行图 if __name__ == "__main__": query = "OpenAI 的 GPT-4 模型是什么时候发布的?" initial_state = {"messages": [HumanMessage(content=query)], "final_answer": ""} # 设置一个最大步数限制 config = {"recursion_limit": 10} final_state = app.invoke(initial_state, config=config) print("\n=== 图工作流最终输出 ===") print(final_state['final_answer'])

工程化价值

  1. 显式状态管理AgentState清晰地定义了工作流中的数据流,比隐式的链式调用更易于监控和调试。
  2. 模块化与可扩展性plan_and_executeverify_answer是独立的节点,可以单独测试、替换或优化。例如,你可以轻松加入一个“格式化”节点或“用户确认”节点。
  3. 增强的可信度:验证节点引入了简单的交叉检查机制,虽然示例逻辑简单,但展示了如何通过额外步骤提升答案可信度。生产环境中可以接入更专业的 fact-checking API 或内部知识库。

4.2 生产环境必须考虑的工程问题

问题领域具体挑战解决方案与最佳实践
可靠性Agent 陷入无意义循环或卡住。在图层面设置recursion_limit;在 Agent 逻辑中设置max_iterations;实现超时机制;定义清晰的终止状态。
成本控制工具调用(尤其是搜索、LLM API)产生意外高费用。为每个工具设置预算和速率限制;使用缓存(如LangChainInMemoryCacheRedisCache)存储重复查询的结果;对非实时性查询使用更便宜的模型(如 GPT-3.5-Turbo)。
错误处理工具调用失败、网络超时、LLM 返回格式错误。在每个工具调用和 LLM 调用外包裹 try-catch;实现重试逻辑(使用指数退避);提供友好的降级回复(如“暂时无法获取该信息”)。
可观测性无法追踪一次查询背后 Agent 的完整思考过程和工具使用记录。结构化日志记录:记录每个状态的快照、每个工具调用的输入输出、LLM 的提示词和补全。集成像 LangSmith 这样的 APM 工具。
安全性用户输入可能诱导 Agent 调用危险工具或泄露敏感信息。严格的输入清洗和验证;工具访问权限控制(如计算器工具禁用ossubprocess等模块);对输出内容进行过滤和审查。
性能串行的工具调用导致总响应时间过长。分析工作流,对无依赖关系的工具调用尝试并行化(LangGraph 支持);对 LLM 调用进行批处理;使用流式输出先返回部分结果。

4.3 关键配置与参数详解

AgentExecutor或自定义图中,以下参数对系统行为有决定性影响:

  • max_iterations/max_steps最重要的安全阀。必须设置,防止恶意或模糊查询导致无限循环。通常设置在 5-15 之间。
  • early_stopping_method:决定何时停止。“generate”模式依赖 LLM 说出“Final Answer”之类的关键词。更可靠的方式是自定义一个“判断任务是否完成”的分类器节点。
  • handle_parsing_errors:设为True,当 LLM 的输出无法被解析为有效的工具调用时,系统不会崩溃,而是将错误信息返回给 LLM 让其重试。
  • temperature:对于需要确定性工具调用的 Agent,通常设为0或接近0(如0.1),以减少随机性。
  • 工具描述:工具函数的文档字符串是 LLM 能否正确使用它的关键。描述必须清晰、准确、包含示例。模糊的描述会导致 LLM 误用或不用该工具。

5. 从原型到生产:部署与运维考量

当你有一个本地运行良好的 Agentic RAG 系统后,下一步是将其部署为可对外服务的 API。

5.1 部署为 API 服务

使用 FastAPI 可以快速将你的 Agent 包装成 RESTful API。

# app/main.py from fastapi import FastAPI, HTTPException from pydantic import BaseModel from .agent_graph import app as agent_workflow # 导入之前编译好的 LangGraph 工作流 from langchain_core.messages import HumanMessage import asyncio app = FastAPI(title="Agentic RAG API") class QueryRequest(BaseModel): question: str user_id: str | None = None # 可用于权限和审计 session_id: str | None = None # 用于多轮对话 class QueryResponse(BaseModel): answer: str session_id: str | None = None processing_time: float @app.post("/query", response_model=QueryResponse) async def query_agent(request: QueryRequest): start_time = asyncio.get_event_loop().time() try: initial_state = { "messages": [HumanMessage(content=request.question)], "final_answer": "" } config = {"recursion_limit": 10} # 注意:LangGraph 的 invoke 可能是同步的,在异步上下文中需要使用 run_in_executor # 这里假设 agent_workflow.invoke 是同步的 import concurrent.futures with concurrent.futures.ThreadPoolExecutor() as pool: final_state = await asyncio.get_event_loop().run_in_executor( pool, agent_workflow.invoke, initial_state, config ) end_time = asyncio.get_event_loop().time() return QueryResponse( answer=final_state['final_answer'], session_id=request.session_id, processing_time=round(end_time - start_time, 2) ) except Exception as e: # 记录详细日志 raise HTTPException(status_code=500, detail=f"Agent processing failed: {str(e)}") # 添加健康检查端点 @app.get("/health") async def health_check(): return {"status": "healthy"}

部署时,你需要考虑:

  • 容器化:使用 Docker 打包应用和环境。
  • 编排:使用 Kubernetes 或 Docker Compose 管理服务。
  • API 网关:添加认证、限流、日志聚合(如使用 Nginx, Kong)。
  • 配置管理:将 API Keys、模型名称、超时时间等抽离为环境变量或配置中心。

5.2 监控与评估

部署后,持续的监控和评估至关重要。

  • 技术指标监控
    • 延迟/query端点的 P95/P99 响应时间。
    • 成功率:HTTP 5xx 错误率,Agent 内部错误率。
    • 成本:统计每日/每用户的 LLM Token 消耗和工具调用次数。
  • 业务/质量指标评估
    • 答案准确性:定期抽样,人工或通过规则评估答案是否准确、有无幻觉。
    • 工具使用效率:统计各工具被调用的频率和成功率,优化工具描述或逻辑。
    • 用户反馈:提供“答案是否有用”的反馈按钮,收集数据。

5.3 常见问题排查清单

当你的 Agent 系统出现异常时,可以按以下顺序排查:

问题现象可能原因检查点
Agent 不调用任何工具,直接生成答案。1. 工具描述不清晰,LLM 不理解何时使用。
2. 系统提示词未强调使用工具。
3. LLM 温度 (temperature) 过高,导致输出随机。
1. 检查工具函数的文档字符串是否清晰、有示例。
2. 检查传入 Agent 的初始提示词。
3. 将temperature设为 0 再测试。
Agent 陷入循环,反复调用同一工具。1. 工具返回的结果未能让 LLM 推断出任务完成。
2.max_iterations设置过高或未生效。
3. 任务本身定义模糊。
1. 查看verbose日志,观察Observation内容是否有效。
2. 确认AgentExecutor或图的max_iterations/recursion_limit参数已正确设置并生效。
3. 优化用户问题或增加任务拆解的引导。
工具调用失败(如网络错误)。1. 工具依赖的 API 不可用或密钥失效。
2. 网络超时。
3. 工具输入参数格式错误。
1. 检查 API 密钥和配额。
2. 在工具函数内添加更详细的错误日志和重试机制。
3. 检查 LLM 生成的工具调用参数是否符合函数签名。
最终答案包含明显错误(幻觉)。1. 检索或搜索到的源信息本身有误。
2. LLM 在整合信息时产生误解。
3. 缺乏验证或交叉检查机制。
1. 引入更多可靠的数据源。
2. 在提示词中要求 LLM 严格引用来源。
3. 像第 4.1 节一样,引入验证节点或后处理步骤。
响应时间过长。1. 串行调用了多个耗时工具。
2. LLM 生成速度慢。
3. 网络延迟高。
1. 分析工作流,将无依赖的工具调用改为并行。
2. 考虑使用更快的 LLM 模型或在非关键步骤使用小模型。
3. 为工具调用设置合理的超时时间。

构建工程化的 Agentic RAG 系统是一个从简单到复杂、从原型到稳健的迭代过程。核心在于认识到 LLM 是一个强大的“决策引擎”,而工程框架的任务是为其提供可靠的工具、清晰的规则以及安全的运行环境。从定义一个清晰的工具开始,到用 LangGraph 构建可控的工作流,再到为生产环境添加监控、限流和验证,每一步都在增强系统的可靠性、可信度和可用性。真正的挑战往往不在第一个能运行的 Demo,而在于如何处理长尾的异常输入、控制不可预测的成本以及保证持续稳定的输出质量。开始实践时,不妨从一个明确、具体的小任务出发,逐步扩展其能力和 robustness。

🚀 30+款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/6 2:38:16

构建Apple Music级动态歌词体验的终极技术指南

构建Apple Music级动态歌词体验的终极技术指南 【免费下载链接】applemusic-like-lyrics An Apple Music style lyric player component, with React & Vue support. 一个类 Apple Music 歌词显示组件,同时提供 React 和 Vue 绑定。 项目地址: https://gitcod…

作者头像 李华
网站建设 2026/7/6 2:38:05

Ubuntu系统向日葵远程桌面配置指南

Ubuntu系统安装向日葵远程桌面后防止访问异常的补充操作 Ubuntu 安装向日葵后,最关键的配置是禁用 Wayland、启用 Xorg,再配合无人值守、锁屏 / 休眠、防火墙、权限与自启等设置,可大幅降低桌面无法远程访问的风险。 一、核心配置&#xff1a…

作者头像 李华
网站建设 2026/7/6 2:37:27

Git 工作流程完整指南:从拉取项目到合并分支

1. 拉取项目 首先使用 Git 克隆远程仓库到本地: git clone 项目地址(ssh/http) 项目目录 2. 进入项目目录 克隆完成后,进入项目目录并运行 Git 命令: cd 项目目录 3. 切换到主分支并更新 确保本地主分支与远程同…

作者头像 李华
网站建设 2026/7/6 2:37:04

从零实现一个安全沙箱:文件行为分析系统

前言你有没有想过:杀毒软件是怎么判断一个未知程序是病毒还是正常软件的?它不只是查特征码,还会让程序在"沙箱"里先跑一遍,看看它做了什么。沙箱是一个隔离的执行环境,让可疑程序在里面运行,观察…

作者头像 李华
网站建设 2026/7/6 2:36:34

Anycubic Mono X 6K 与 828 树脂:5项核心参数优化实现高精度与强韧性

Anycubic Mono X 6K 与 828 树脂:5项核心参数优化实现高精度与强韧性光固化3D打印技术近年来在精度和材料性能上取得了显著突破,而Anycubic Mono X 6K与828树脂的组合正成为追求高精度与强韧性的理想选择。本文将深入解析如何通过五项关键参数调整&#…

作者头像 李华
网站建设 2026/7/6 2:35:57

VIA键盘配置工具:3个场景教你打造专属机械键盘工作流

VIA键盘配置工具:3个场景教你打造专属机械键盘工作流 【免费下载链接】releases 项目地址: https://gitcode.com/gh_mirrors/re/releases 你是否曾经因为键盘快捷键不够顺手而影响工作效率?或者玩游戏时总感觉按键布局不够合理?VIA键…

作者头像 李华