尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

从大模型到AI Agent:开发者落地实战指南

从大模型到AI Agent:开发者落地实战指南 2023年之前大多数技术圈的讨论焦点还是“训练一个大模型需要多少钱、多少张卡”。到了2024年话题变得更实际大模型到底怎么用起来、怎么接入业务、怎么让一线的开发者和运营人员真的受益。到了2025年以后一个更尖锐的问题开始出现光是“会聊天”的大模型已经撑不起大家对企业级AI的期待了。在这种背景下王慧文家族办公室持续押注AI版图——从大模型基础设施一路延伸到AI Agent方向本身就传递了一个值得开发者认真对待的信号AI投资的重心正在从“模型本身”向“模型的落地形态”转移。大模型并没有退潮只是价值兑现的路径变了。这篇文章不是要讨论某个投资人的私事而是想借这条线索把“从大模型到AI Agent”这条技术主线梳理清楚大模型现在处于什么阶段AI Agent到底解决了什么问题作为开发者我们可以通过哪些可落地的方案把想法变成真实可运行的系统。文章会包含本地部署、工具调用、最小Agent实现的完整示例也会说明常见的坑和工程建议。1. 从“赌大模型”到“赌AI Agent”资本视角在变什么先看一个公开信息里可以确认的轨迹。王慧文在2023年宣布进入AI领域创业成立光年之外面向大模型方向投入后来该公司被美团收购。随后公开信息显示他以家族办公室的形式继续参与AI投资标的范围逐渐覆盖到AI应用和AI Agent方向。这个轨迹并不是孤例。过去两年里一级市场对“基础大模型”的关注度明显下降对大模型应用的讨论开始增多。到了2024年末和2025年AI Agent几乎成为所有AI讨论里出现频率最高的词之一。相关的技术热搜里也能看到类似风向“AI Agent入门”“AI Agent开发”“AI Agent完整架构”都被大量搜索这说明判断技术趋势的人正在从模型训练转向Agent应用。为什么会这样本质上是因为大模型的基础设施已经走到了一个“够用”的阶段。开源模型在绝大多数日常任务上的表现已经接近可用水平。API调用、私有化部署、微调、量化都有成熟工具链。光是“生成文本”本身很难再构成核心壁垒。于是真正的竞争点转移到谁能把模型能力组合成复杂的业务流程。这就是Agent的价值所在。一个Agent不是简单地调用一次模型而是让模型扮演“决策者”自己规划步骤、调用工具、观察结果、修正方向最终完成一个有明确目标的任务。对开发者来说这意味着两件事第一模型能力的选择变得多元化。你不再需要自己训练一个大模型更实际的是选择合适的开源模型或API服务把精力花在应用架构上。第二Agent开发能力开始成为新的技术分水岭。谁更早掌握提示词工程、Function Calling、Agent循环、工具调用这些技能谁就越接近AI应用层的核心生产力。可以从一个更感性的角度理解这种“焦点转移”过去大家问的是“这个大模型聪明吗”现在大家问的是“这个AI能不能替我把活儿干了”。前者是模型层的评判维度后者是Agent层的评判维度。2. 大模型层的现状基础设施在成熟但成本难题仍未解决要理解Agent为什么变得重要得先知道大模型层现在走到了哪一步。我们可以把大模型相关的技术栈粗略分成三层训练、微调、推理部署。2.1 训练层门槛正在向少数玩家集中训练一个大模型的重资产属性非常明显。它需要大规模GPU集群、高质量数据、算法团队和持续的资金投入。这类工作现在主要由头部云厂商和少数创业公司承担。对绝大多数企业和个人开发者而言“从零训练一个大模型”已经不是合理选项。2.2 微调层场景定制的主战场微调是介于“从零训练”和“直接用通用模型”之间的路径。它用领域数据对已有模型做二次训练让模型更懂某个垂直领域的表达方式。开源社区的LoRA、QLoRA等方案已经把微调的硬件门槛降到消费级显卡可以训练的程度。2.3 推理部署层成本与速度的持续博弈真正让开发者每天面对的问题是推理成本。一个模型跑一次问答背后是GPU的算力消耗。业务量大了以后推理成本会变成一个持续增长的开销。解决这个问题的常见方案包括本地化部署利用Ollama、vLLM等工具在内部环境部署开源模型。模型量化把FP16的模型权重量化为INT8、INT4用一点精度换显存和速度。缓存与路由对高频请求做语义缓存简单问题走小模型复杂问题才走大模型。下面是一个使用Ollama部署本地大模型的示例流程。Ollama是目前社区使用最广泛的本地模型运行工具之一它屏蔽了底层模型加载、参数配置等细节适合快速验证。# 1. 安装 OllamamacOS / Linux / Windows WSL2 均可 # 官方安装脚本 curl -fsSL https://ollama.com/install.sh | sh # 2. 启动服务 ollama serve # 3. 拉取一个开源模型例如通义千问系列 ollama pull qwen2.5:7b # 4. 运行模型进入交互式对话 ollama run qwen2.5:7b如果需要批量推理或更高的吞吐量可以换用vLLM。vLLM是一个专门优化推理性能的框架通过PagedAttention等技术大幅提升GPU利用率。下面是一个最简单的vLLM离线推理示例# 文件路径examples/vllm_offline_inference.py from vllm import LLM, SamplingParams llm LLM(modelQwen/Qwen2.5-7B-Instruct) sampling_params SamplingParams(temperature0.7, top_p0.8, max_tokens512) outputs llm.generate( [介绍一下AI Agent的核心概念, 什么是函数调用Function Calling], sampling_params ) for output in outputs: for output_item in output.outputs: print(output_item.text) print(---)从工程实践看本地部署的价值不只是省钱更重要的是数据安全和对系统的自主控制权。很多企业对数据出境和第三方依赖有严格要求本地部署开源模型往往是唯一合规的选择。这也解释了为什么相关热词里频繁出现“Ollama部署本地大模型”“vLLM部署大模型”“本机部署的大模型”。基础设施已经足够成熟真正需要思考的是模型部署好之后拿它做什么。3. AI Agent是什么从“会问答”到“会干活”AI Agent的中文叫法是“智能体”。这个名字听起来抽象其实拆开看并不复杂。一个Agent就是一个能自主完成任务的AI系统。它不只是回答你“什么是天气”而是会为了回答“北京明天适合跑步吗”这种问题自己去调用天气API、对比温度风速甚至结合你的健康记录给出建议。从架构上看一个完整的AI Agent通常包含四层组成作用通俗解释模型层Model负责推理和决策相当于Agent的大脑决定下一步做什么规划层Planning把目标任务拆解成子任务相当于项目负责人把大目标拆成小步骤工具层Tools让Agent能调用外部能力相当于手脚执行搜索、查库、发消息等动作记忆层Memory保存上下文和历史信息相当于短期记忆和长期档案这里需要重点区分两组容易混淆的概念。3.1 Agent 和 RAG 的区别RAG检索增强生成是目前很成熟的一种方案。它的思路是用户提问时先从外部知识库检索相关内容再把这些内容拼接到提示词里让模型基于这些材料生成答案。RAG的优点是简单、可控、不容易胡说八道适合“知识问答”场景。Agent则更进了一步。它不只是“读资料”而是会“采取行动”。比如一个客服Agent遇到用户要退款它会查订单库、核对退款政策、调用退款接口、确认结果后回复用户。整个过程涉及多次决策和多个工具的串联调用。RAG只是Agent工具箱里的一个检索工具而不是Agent本身。3.2 Agent 和 传统工作流Workflow的区别再对比一下Agent和传统自动化工作流。传统工作流是“确定性”的如果A则B然后C。每一步都是预先定义好的。Agent是“非确定性”的模型根据当前情况即时决定下一步。举一个业务场景一个用户投诉“我昨天买的手机今天降价了”。传统工作流先判断用户是否输入“保价”关键词是则进入保价处理流程否则转人工。Agent先理解用户的真实意图是“申请价格保护”然后在自己的知识库里检索保价政策调用订单系统确认购买时间判断是否符合保价条件再调用优惠券系统生成差价补偿最后用自然语言把处理结果告诉用户。传统工作流把“所有可能的分支”都写死在代码里Agent则把“决策权”交给模型让模型动态组合能力。这也是Agent最核心的优势它不需要你提前枚举所有场景。4. Agent 的核心机制Function Calling 与 ReAct 范式的工程价值理解了Agent的概念后下一步是搞懂它的核心技术机制。目前主流的Agent实现几乎都离不开两个底层的工程范式Function Calling函数调用和 ReAct。4.1 Function Calling让模型学会“请求调用工具”早期的LLM只能处理文本。用户问“今天北京天气怎么样”模型只能基于它的训练记忆回答并不知道实时天气。解决思路是给模型提供一批“工具”的说明让模型在需要时决定是否调用某个工具。Function Calling的流程是开发者定义函数结构包括函数名、功能描述、参数格式。用户提问时开发者把函数结构和用户问题一起发给大模型API。模型分析是否需要调用函数。如果需要输出一个结构化的调用请求而不是直接生成答案。开发者解析这个请求执行真实函数把结果返回给模型。模型基于函数执行结果生成最终回答。下面是一个典型的气象查询工具调用示例# 文件路径examples/function_calling_demo.py import os from openai import OpenAI client OpenAI( api_keyos.environ.get(LLM_API_KEY), base_urlos.environ.get(LLM_BASE_URL, https://api.openai.com/v1) ) tools [ { type: function, function: { name: get_weather, description: 获取指定城市的实时天气信息, parameters: { type: object, properties: { city: { type: string, description: 城市名称例如北京 } }, required: [city] } } } ] user_question 北京今天适合跑步吗帮我查一下天气。 response client.chat.completions.create( modelos.environ.get(LLM_MODEL, gpt-4o-mini), messages[{role: user, content: user_question}], toolstools ) message response.choices[0].message print(message) # 如果模型决定调用函数message.tool_calls 会有内容 if message.tool_calls: tool_call message.tool_calls[0] print(模型请求调用工具:, tool_call.function.name) print(参数:, tool_call.function.arguments)这套机制最大的工程意义在于模型的输出变成了“可执行的指令”而不是一段自由文本。开发者的代码可以精准解析模型想调用哪个函数、传什么参数真正把大模型接进了业务系统。4.2 ReAct让模型学会“思考-行动-观察”Function Calling解决的是“怎么调用工具”ReAct解决的是“什么时候调用、调完怎么办”的循环问题。ReAct本质上是一种提示词组织方式模型按照“Thought思考、Action行动、Observation观察”的循环来推进任务。Thought模型先分析当前状况决定下一步做什么。Action执行一个工具调用或者直接生成回答。Observation观察工具返回的结果然后进入下一轮循环。这种方式让模型具备了“试错”和“迭代”的能力。第一次行动如果没解决问题模型可以根据Observation重新思考再采取新的行动直到达到目标或超出最大步数。从工程角度看ReAct并不需要特别复杂的框架核心是写一个循环在每次循环里把历史信息和工具结果拼接进提示词请求模型解析模型输出决定是否继续。5. 一个最小可用的AI Agent完整示例接下来我们实现一个最小可用的AI Agent。这个Agent具备工具调用能力和简单的循环规划能力目标是让用户输入“帮我在北京和上海之间选一个出差城市比较一下两地天气和消费水平”Agent能够调用天气查询和城市信息查询两个工具组合信息后给出推荐。为了演示更通用的流程我使用Python模拟工具函数并定义Agent的执行循环。这里的工具函数可以替换成任何真实业务系统的API调用。5.1 环境准备推荐环境Python 3.10 及以上版本OpenAI SDK兼容 OpenAI 协议的国内大模型服务同样适用pip install openai所有配置通过环境变量传入不把密钥写在代码里。5.2 定义工具函数# 文件路径agent_demo/tools.py 模拟工具层。实际项目中这里应该是对真实业务API的封装。 def get_weather(city: str) - str: 模拟获取城市天气信息 weather_data { 北京: {weather: 晴, temperature: 25°C, wind: 微风}, 上海: {weather: 多云, temperature: 27°C, wind: 东风3级} } info weather_data.get(city) if not info: return f未找到 {city} 的天气数据 return f{city}天气{info[weather]}气温{info[temperature]}{info[wind]} def get_city_info(city: str) - str: 模拟获取城市基础信息 city_data { 北京: {transport: 地铁发达通勤便利, consumption: 平均消费水平较高}, 上海: {transport: 地铁覆盖广打车方便, consumption: 平均消费水平较高餐饮选择多} } info city_data.get(city) if not info: return f未找到 {city} 的信息 return f{city}{info[transport]}{info[consumption]}这里的关键是工具函数要使用清晰的类型注解和准确的描述模型会根据这些信息来判断什么时候调用、传什么参数。5.3 编写Agent核心循环# 文件路径agent_demo/agent.py import json import os from openai import OpenAI from tools import get_weather, get_city_info client OpenAI( api_keyos.environ.get(LLM_API_KEY), base_urlos.environ.get(LLM_BASE_URL) ) TOOLS [ { type: function, function: { name: get_weather, description: 获取指定城市的实时天气信息, parameters: { type: object, properties: { city: {type: string, description: 城市名称} }, required: [city] } } }, { type: function, function: { name: get_city_info, description: 获取指定城市的交通和消费信息, parameters: { type: object, properties: { city: {type: string, description: 城市名称} }, required: [city] } } } ] # 工具函数注册表程序里真正执行时通过这个映射找到对应函数 TOOL_MAP { get_weather: get_weather, get_city_info: get_city_info, } def run_agent(user_query: str, max_steps: int 5): messages [{role: user, content: user_query}] step 0 while step max_steps: print(f\n 第 {step 1} 轮 ) response client.chat.completions.create( modelos.environ.get(LLM_MODEL, gpt-4o-mini), messagesmessages, toolsTOOLS, tool_choiceauto ) message response.choices[0].message messages.append(message) # 模型没有请求调用工具说明已经生成最终答案结束循环 if not message.tool_calls: print(Agent 最终回答) print(message.content) return message.content # 模型请求调用工具逐条执行 for tool_call in message.tool_calls: function_name tool_call.function.name arguments json.loads(tool_call.function.arguments) print(f模型决定调用工具: {function_name}参数: {arguments}) # 通过注册表执行真实函数 function_to_call TOOL_MAP.get(function_name) if not function_to_call: result f错误未知工具 {function_name} else: result function_to_call(**arguments) print(f工具返回结果: {result}) # 把工具结果作为模型消息追加到对话中 messages.append({ role: tool, tool_call_id: tool_call.id, content: json.dumps(result, ensure_asciiFalse) }) step 1 print(已达到最大步数Agent 结束。) return None if __name__ __main__: run_agent(我最近要去北京和上海出差帮我对比一下两地的天气和消费水平给出一个推荐。)这段代码里真正让Agent“活”起来的是这个循环把用户问题发给模型。模型决定是直接回答还是调用某个工具。如果调用工具代码通过注册表找到真实函数执行。工具结果回传给模型模型继续推理。循环直到模型不再请求工具。5.4 运行与验证# 设置 API 环境变量 export LLM_API_KEY你的密钥 export LLM_BASE_URLhttps://api.openai.com/v1 export LLM_MODELgpt-4o-mini # 运行 Agent python agent_demo/agent.py预期可以看到类似下面的输出 第 1 轮 模型决定调用工具: get_weather参数: {city: 北京} 工具返回结果: 北京天气晴气温25°C微风 模型决定调用工具: get_city_info参数: {city: 北京} 工具返回结果: 北京地铁发达通勤便利平均消费水平较高 第 2 轮 模型决定调用工具: get_weather参数: {city: 上海} 工具返回结果: 上海天气多云气温27°C东风3级 模型决定调用工具: get_city_info参数: {city: 上海} 工具返回结果: 上海地铁覆盖广打车方便平均消费水平较高餐饮选择多 第 3 轮 Agent 最终回答 根据天气和消费水平信息北京天气晴朗温度适宜上海多云略热。两地消费水平都比较高如果更看重出行时的天气舒适度这两天北京更合适如果更在意餐饮丰富度上海的选择会更多。综合来看更推荐短途出差去北京。这个演示虽然简单但它把Agent最核心的工程链路完整走了一遍规划、调用工具、回传结果、总结输出。这个模式可以扩展到订单查询、工单处理、数据报表、客服应答等几乎所有业务场景。6. 效果验证怎么判断Agent真的能用Agent代码写完后最不能省的一步是验证。很多Agent项目在demo阶段效果不错一上真实业务就荒腔走板。原因往往在于没有建立效果验证的标准。6.1 验证维度维度关注点通过标准任务完成率Agent是否达成用户目标简单任务90%以上复杂任务70%以上工具调用正确率是否调用了正确的工具、参数是否合理关键业务场景建议99%无效循环率是否出现重复调用同一个工具、原地打转无效循环低于5%Token 消耗整个任务消耗的总Token数与人工编写步骤的成本做对比响应延迟从用户提问到最终回答的总耗时根据业务场景要求一般控制在5秒内失败回退率遇到异常时是否给出合理说明不能静默失败或答非所问6.2 使用测试用例集建议准备至少20到50条覆盖真实业务场景的测试用例。每条用例包含用户原始输入期望调用的工具序列期望的最终答案要素Agent运行后自动记录每次调用的工具、参数和输出再与预期结果比对。# 文件路径evaluation/run_eval.py 简易评测脚本批量执行测试用例并统计通过率 import json from agent_demo.agent import run_agent test_cases [ { id: case_001, query: 帮我查一下北京今天的天气, expected_tools: [get_weather], expected_answer_keywords: [晴, 25] }, { id: case_002, query: 我想知道上海的交通便利程度, expected_tools: [get_city_info], expected_answer_keywords: [地铁] } ] passed 0 for case in test_cases: try: run_agent(case[query], max_steps4) passed 1 print(f[PASS] {case[id]}) except Exception as e: print(f[FAIL] {case[id]}: {e}) print(f通过率: {passed}/{len(test_cases)})7. 常见问题与排查思路在写Agent的过程中有几个问题出现频率极高。这里整理成一张排查表方便收藏备用。问题现象可能原因排查方式解决方案模型始终不调用工具工具描述不清晰或模型没有感知到工具的可用性检查工具description是否准确尝试直接询问模型“你能调用什么工具”补充工具说明明确“当你需要XX信息时调用XX工具”模型调用了错误的工具多个工具功能重叠模型难以区分查看工具参数和使用场景描述拆分工具职责一个工具只做一件事在描述中增加反面说明工具调用失败工具函数抛异常或参数格式不匹配检查工具函数日志确认模型传参是否完整工具函数内部增加参数校验和异常捕获返回结构化错误信息Agent陷入死循环工具返回结果不满足模型终止条件查看每一轮的Thought和Observation设置最大步数工具结果中加入“已提供”等完成标志或增加人工确认节点模型最终回答过于啰嗦提示词没有限定输出格式查看最终回答的结构在系统提示词中明确要求“用简洁要点回答先给结论再给理由”上下文越来越长导致报错多轮工具调用的历史消息持续累积查看请求的Token数是否接近模型上限增加消息压缩或摘要机制历史过久的信息转为摘要本地部署模型不支持Function Calling部分小参数量模型工具调用能力弱查看模型文档或做一次工具调用测试更换支持工具调用的模型或将工具调用拆为单独的提示词模板生产环境偶发返回不稳定模型输出的JSON格式偶发错误记录原始响应增加容错解析解析失败时重试一次或回退到默认策略8. 最佳实践与工程建议Agent从demo到生产中间隔着一整套工程化约束。这里给出几条实际项目中最值得落实的建议。8.1 模型选型按任务复杂度分层不要只用一个大模型。把任务按复杂度分层简单分类、信息抽取用小参数模型或API的低档位成本更低。需要逻辑推理、多步工具调用用更强的大模型。涉及敏感数据用本地私有化部署的开源模型。这种分层路由在业务量大后能显著降低推理成本。这也是“大模型还用得起吗”这个问题最务实的答案不是所有请求都要走最贵的模型。8.2 工具设计一次只做一件事工具描述和函数设计是Agent效果的上限。工具应当是“单一职责”的一个函数只获取天气、一个函数只查询订单、一个函数只发起退款。不要写一个“万能函数”否则模型很容易传错参数。工具描述里最好包含“什么场景使用”和“什么场景不要使用”。例如查询天气时请调用get_weather不要根据模型记忆猜测天气。8.3 安全与权限Agent的权力边界要收敛在真实业务中Agent会调用企业内部的订单系统、CRM、数据库。这时必须遵守最小权限原则Agent 调用的API只拥有完成任务所需的最小权限。高风险操作退款、发消息、删数据必须有二次确认环节。所有Agent的工具调用都要有日志便于追责和回溯。涉及数据库操作时哪怕模型具备很大的能力工程上也要让Agent只能访问预设的只读视角或者通过中间层完成权限控制。生产环境绝不能让Agent直接拼接任意SQL。8.4 可观测性记录每一轮决策Agent的非确定性给排障带来很大困难。建议从一开始就记录完整决策链路用户输入、模型每一轮的Thought、Action、Observation、工具返回结果、最终输出。这些日志是排查问题的第一手资料。可以考虑在日志中加入request_id把一次Agent请求的全链路串起来方便回放。8.5 降级与回滚模型不是永远可靠Agent系统必须设计降级路径。比如模型服务超时退回规则引擎工具调用连续失败三次转人工。不要把系统的稳定性完全寄托在大模型的输出上。9. 从家族办公室版图到个人技术路线下一步怎么学把视线从“家族办公室押注了什么”拉回到“开发者能做什么”这个层面上整条线索就清晰了大模型基础设施的成熟正在把AI的竞争焦点从“模型能力”推向“应用工程能力”。而AI Agent就是这种应用工程能力的集中体现。如果接下来想深入学习AI Agent建议按这个顺序推进先用本地模型跑通Ollama理解推理部署的基本流程。模型不需要很大7B到14B的中小模型足以做练习。掌握Function Calling。用一个小例子让模型调用真实函数这是Agent的地基。自己手写一遍ReAct循环不要一开始就依赖LangChain等框架。只有明白循环内部发生了什么后续才能更好地排查问题。再尝试引入LangChain等框架对比框架封装和自己的实现有什么不同。最后考虑记忆、多Agent协作、评测体系、成本优化这些生产级议题。从资本视角看王慧文家族办公室的AI版图是一张更大的棋盘。但对普通开发者来说真正值得投入的不是复刻某条投资路线而是拿稳Agent开发这套技能组合。当模型能力继续迭代应用层的工程能力会变得越来越值钱。你现在花时间搞懂的一行工具调用、一次Agent循环、一份评测用例很可能就是未来AI业务系统里最基础也最关键的技术积累。这篇内容可以作为一份基础地图保存之后每次要搭Agent相关项目时回来对照概念部分和排查表。技术演进不会停下但“模型负责决策、工程负责兜底”的思路在很长一段时间内都不会过时。
返回列表