我先解释一下标题里的“千问”——这是我给那类通用对话大模型起的代称,不特指任何一家具体产品。你用云端API、开源权重、或者本地部署的模型都行,核心争论点只有一个:AI不再满足于跟你聊天,而是真的能替你把事情办了。
过去一年,大家已经习惯了跟AI对话:写文案、解数学题、翻译外文、头脑风暴。但这些事的本质都是“输出文字”,再精彩也改变不了现实世界。而“干活”意味着AI要拿着你的任务,自己去调用工具、操作软件、查数据库、填表格、发消息——就像你雇了一位远程实习生,你只交代目标,他负责跑腿。这件事的想象空间完全不同。
为什么说“机会才真正到来”?因为对话AI的价值天花板是“知识问答”,而干活AI的价值是“生产力替代”。知识问答是免费的,生产力替代是有人愿意付费的。从搜索引擎到办公软件,历史上每一轮信息化浪潮,都是因为工具把重复劳动接了过去。当千问们开始“干活”,我们正站在下一轮浪潮的起点上。这篇文章我会从技术拆解、实操案例、踩坑排查三个角度,把这件“AI干活”的事讲透,最后再聊聊到底哪些人能吃到这波红利。
1. “能聊”和“会干活”是两代AI
1.1 对话是入口,行动才是价值
传统对话模型的核心工作机制,是“预测下一个词”。你给一句问题,它根据海量训练数据猜出最可能的后文,然后一段段地吐出来。不管这个回答多流畅、多深刻,它本质上都是一个文本生成器。它知道“下雨天要带伞”,但它从来不会真的帮你看看窗外,更不会替你叫一辆车。
行动型AI(业界常叫Agent,智能体)多了一个关键能力:工具调用。它不仅能说,还能输出结构化的调用指令,让外部系统去执行。你可以把它理解成两个系统的配合:模型负责“想”,工具负责“做”。
拿导航来类比最清楚。老式对话模型就像一个指路员,你问“从A到B怎么走”,它能给你画出路线图,但路还得你自己走。而干活型AI是一个司机,你说“我要去B”,它自己规划路线、启动引擎、在路口转弯,最后把你送到目的地。这个过程中,AI需要实时读取路况、判断信号灯、处理突发状况——每一步都是一次工具调用。
所以“能聊”和“会干活”的差别,夸张点说是“地月距离”。“能聊”只改变了信息获取方式,“会干活”改变了任务完成方式。信息获取可以免费,任务完成却对应真金白银的效能量。
1.2 为什么“干活”让机会真正放大
对话AI的价值,体现在“降低获取答案的成本”。过去查资料要翻书、问人、搜网页,现在直接问AI。但这个价值是趋近于零的,因为答案本身不值钱,AI让答案变得普及。你不可能因为“AI回答了我的问题”就付费——那是搜索引擎已经做过的事。
干活AI的价值则完全不同。它能完成“从目标到结果”的闭环。一个AI告诉你“这个月销售额下降了5%”,这只是信息;如果它能自动拉取销售数据、定位下降最明显的区域、生成原因分析报告、把异常订单截图整理好,再以邮件附件形式发给运营团队——这才叫干活。后者是有人愿意按月付费的。
机会放大体现在三个层面:
第一,效率提升。重复性的数字劳动,比如整理Excel、填写表单、格式化文档、群发通知,原本需要人花半小时,现在AI几分钟内搞定,且可以全天候跑。
第二,成本重构。很多企业的客服、运营、数据录入岗位,大量工作是“读系统、做判断、点按钮”。这些动作一旦能由AI代理完成,人力成本结构就会变化。
第三,新业态诞生。以前做不了的事,现在可以做。比如让AI帮你盯股票价格,跌到某个位置自动提醒;让AI帮你监控竞争对手网站,有变化自动生成简报。这些“超个体能力”会催生新的服务模式。
所以,当“千问”这种通用大模型开始具备“干活”能力,真正的机会不是模型本身,而是围绕“干活”衍生出来的工具、场景、交付和运营体系。
2. 让AI“干活”的四层技术拆解
如果你想让一个AI真正“干活”,不能只靠聊天框。你需要四层能力协同工作:工具调用、任务规划、记忆管理和安全护栏。下面我逐一拆开讲。
2.1 工具调用:AI的“手脚”
工具调用是Agent体系的地基。现在主流大模型都在支持函数调用(Function Calling),意思是你先给模型一份“工具清单”,清单里写明每个工具叫什么、能干什么、需要哪些参数。当用户提出需求时,模型会从清单里选一个合适的工具,并返回结构化调用指令,比如{"name": "get_weather", "arguments": {"city": "上海"}}。
这个机制相当于给AI装上了“手脚”。没有工具调用,AI只能纸上谈兵;有了工具调用,AI可以影响外部世界。
工具定义的质量直接决定干活效果。我见过太多失败案例,都是因为工具描述写得模糊。比如定义“查询信息”这种工具,模型不知道到底该传什么参数。好的工具描述应该像说明书:目标明确、参数清晰、返回值稳定。
这里给一个简化示例。假设你要做一个天气助手,工具定义大致长这样:
{ "name": "get_weather", "description": "查询指定城市未来3天的天气情况,返回天气现象、温度、降水概率", "parameters": { "type": "object", "properties": { "city": { "type": "string", "description": "城市中文名,比如:北京、上海、广州" } }, "required": ["city"] } }模型看到这份定义,就会知道“用户问上海天气”时,应该调用get_weather并传入city="上海"。这里的核心技巧是:参数描述里要写清楚“支持什么格式”,否则模型可能传成拼音、英文甚至城市代码。我后来在参数描述里直接加了一句话:“城市名必须是中文全称,如果用户没有指定城市,先向用户询问。”这样错误率大幅下降。
2.2 任务规划:AI的“大脑”
有了工具,AI还需要知道“先用哪个、后用哪个”。这就是任务规划。
简单任务只有一步:用户说“查天气”,AI调一个工具就完事。但真实世界的任务往往是多步骤的。比如“每天早上8点查看天气,如果降水概率超过50%,给老板发一条提醒消息”。这个任务至少需要三步:定时触发、查天气、判断条件、发消息。
AI怎么完成多步规划?主流的思路是ReAct模式,即“思考-行动-观察”循环。模型先分析当前状态,决定下一步执行什么工具;工具返回结果后,模型观察结果,再决定下一步操作。这个过程不断重复,直到任务完成。
ReAct模式可以用生活类比来理解:你炒一盘番茄鸡蛋,不是一口气把所有动作都做完,而是先洗番茄、切番茄、打鸡蛋、热锅、炒蛋、加番茄、调味。每一步做完都要看一眼现状,再决定下一步怎么做。
实操中,任务规划最大的坑是“过度规划”。模型会把简单任务拆成无数个小步骤,一遍遍调用工具,浪费时间和金钱。所以我通常在系统提示词里加一条约束:“尽可能用最少的工具调用完成用户的请求,如果一步能做完,不要拆成两步。”
另一个坑是“规划脱缰”。模型在一开始把整个计划列得很漂亮,但执行到一半发现某一步失败,它不知道如何调整,只能硬着头皮继续,或者干脆报错。比较好的做法是让模型“边想边做”,每一步根据最新结果重新评估,而不是一次性写好长串计划。
2.3 记忆与上下文:AI的“工作台”
AI“干活”跟人一样,需要记住过程中的信息。这个信息分为两类:短期记忆和长期记忆。
短期记忆就是对话历史。用户说了什么、工具返回了什么、模型输出过什么,都在这个上下文里。干活型AI必须把工具返回的结果纳入上下文,才能进行下一步判断。比如调用天气接口后,模型要能看到“上海,小雨,20度”这个返回值,才能给出“建议带伞”的结论。
长期记忆则是跨会话的信息。比如用户的常驻城市、常用联系方式、偏好语气等。这些原来需要靠向量数据库或外部存储来维护。实操中,你可以把长期记忆设计成一批“记忆读写工具”:当用户提到新的偏好时,调用工具存下来;当需要个性化回答时,调用工具查出来。
上下文管理是干活过程中最容易出问题的环节。现在的模型窗口虽然越来越大,但也不是无限的。多轮工具调用会把上下文撑得很长,而且早期信息可能被挤掉。你可以用这几种策略:
- 做摘要:每一轮结束,把关键信息压缩成一段话,下一轮带着摘要走。
- 滑动窗口:只保留最近N轮对话,更早的丢弃。
- 向量检索:把历史信息存进索引,需要时只取出与当前任务相关的片段。
用“工作台”来比喻很恰当:AI面前有张桌子,桌子上只能放有限的文件。你要教它哪些文件留在桌上、哪些放进抽屉、抽屉里怎么分类。如果桌面上乱糟糟,干活效率必然低下。
2.4 安全护栏:AI的“刹车”
给AI“干活”的机会,也意味着给AI“犯错”的权利。而且AI犯错不像人犯错那样容易控制——它可能以一个很笃定的语气说出完全错误的信息,或者按照你的授权做出一系列不可逆操作。
安全护栏不是可选项,是必需品。我推荐至少做三层控制。
第一层:最小权限。给AI的工具权限,只覆盖任务需要的范围。比如做“查天气发提醒”的Agent,就不应该给它“读取通讯录所有联系人”的权限,更不该给它支付权限。宁可让用户手动授权,也不能让AI自由发挥。
第二层:人工审批。对高风险操作,设置“用户确认”节点。AI生成操作请求后,先停下来问用户“是否执行”,确认后再执行。这种模式在金融、办公自动化领域尤其重要。有个很经典的例子:AI帮你写好了邮件,但它不会直接发出去,而是先给你预览,你点了“发送”它才发。很多真实项目都是这样设计的。
第三层:沙箱环境。如果AI需要执行代码、操作文件,应该先在隔离环境中运行,限制它对生产系统的访问。就像给实习生一台测试机,而不是直接把生产服务器密码给他。很多“AI乱改数据”的事故,根源都是缺了沙箱。
安全护栏要付出一定体验代价,但长期来看是值得的。因为一次失控的代价,往往会抵消掉无数次高效带来的收益。
3. 实操案例:做一个能查天气、发提醒的“千问”
理论讲完了,我带你完整走一遍实操。我选一个最简单的“Agent”场景:用户说“每天上午9点帮我查上海天气,如果下雨就提醒我出门带伞”。下面是我们需要做的全部工作。
3.1 场景定义与工具设计
这个任务表面上简单,实际涉及三个工具:定时触发(得有个定时机制)、天气查询、消息发送。为了让案例易于理解,我简化掉定时机制,只做一个“用户问天气,AI决定是否提醒”的交互式Agent。用户直接说“查一下上海天气并提醒我”,AI调用天气工具,然后根据结果决定是否发提醒。
我们定义两个工具:
{ "name": "get_weather", "description": "查询指定城市当天是否下雨,返回天气现象和是否建议带伞", "parameters": { "type": "object", "properties": { "city": { "type": "string", "description": "城市中文名,例如:上海" } }, "required": ["city"] } }{ "name": "send_reminder", "description": "向用户发送一条提醒消息,用于在天气异常时提醒用户带伞、加衣等", "parameters": { "type": "object", "properties": { "content": { "type": "string", "description": "提醒的具体内容,必须包含天气信息和建议" } }, "required": ["content"] } }注意,第二个工具我没有加“接收人”参数,因为这里是单用户场景,系统默认发给当前用户。实际项目里你可能会加一个user_id字段。工具定义一定要跟真实环境对齐,否则AI调用时容易传错参数。
3.2 从提示词到执行链路
接下来是系统提示词。这个提示词的作用是把AI的“行为规范”定下来。我通常这样写:
你是一个智能日程助手。当用户让你查询天气并判断是否需要提醒时,你按以下流程执行: 1. 调用工具get_weather查询指定城市的天气。 2. 根据天气结果判断: - 如果降水概率超过50%或天气现象含雨、雪,调用send_reminder发送带伞提醒。 - 否则直接回复用户“天气不错,不需要特殊提醒”。 3. 所有工具调用完成后,用自然语言把结果告诉用户。 注意:发送提醒前必须确认用户已经请求过提醒,不要擅自发送。这里的“注意”非常重要。如果不加上限,模型可能在用户没要求的情况下也主动发提醒,那就变成了骚扰。
执行一次对话的过程如下:
用户输入:请查一下上海天气,有雨的话提醒我带伞。
模型的第一步输出(这是函数调用指令,不是自然语言):
{ "role": "assistant", "tool_calls": [ { "name": "get_weather", "arguments": {"city": "上海"} } ] }系统收到这个指令后,执行get_weather,拿到返回值,比如:
{ "weather": "小雨", "temperature": 18, "precipitation_probability": 75 }系统把这个返回值以“工具消息”的形式传给模型,模型看到后,决定是否调用第二个工具:
{ "role": "assistant", "tool_calls": [ { "name": "send_reminder", "arguments": {"content": "上海今天小雨,降水概率75%,出门记得带伞,温度18度,注意适当添衣。"} } ] }系统执行发送,返回一个“发送成功”的消息。最后,模型把整个流程总结成自然语言回复用户:“已查过上海天气,有小雨,我已发送提醒:出门记得带伞。”
这就是一次典型的Agent执行链路:用户输入 → 模型规划 → 调用工具 → 工具返回 → 模型判断 → 再次调用 → 执行 → 汇总输出。你仔细观察会发现,模型的每一次输出都出现在“决策点”上,而真正的动作是由外部系统完成的。
3.3 实测效果与调优记录
我在本地模拟环境里跑过这个场景,第一次就翻车了。翻车点有两个。
第一个翻车点是城市名。用户输入“上海”,模型调用get_weather时传给的是"上海",这个没问题。但后来我换了一个用户输入“上海明天天气怎么样”,模型自作主张把参数传成了"上海市",而我的模拟天气接口只认“上海”两个字,结果返回“城市不存在”。模型拿到错误结果后没有质疑,而是直接告诉用户“查不到上海天气”。
这就是典型的“工具返回值没被正确消化”问题。解决办法有两步:一是把工具参数描述写得更严格,明确写“必须是标准城市名,不含'市'字;若用户输入含'市',先去掉再传参”;二是在系统提示词里加一条“如果工具返回错误或异常结果,如实告知用户,不要编造”。后来我两边都改了,问题没有再出现。
第二个翻车点是“擅自提醒”。用户只是说“查一下上海天气”,没有说“提醒我”。但在一次测试中,模型看到有雨,直接调用了send_reminder,向用户发了一条带伞提醒。这不符合预期。原因是模型对“提醒”的理解过于主动。我在提示词里又加了一句“只有用户明确要求发送提醒时,你才能调用send_reminder;否则只回复文字建议”。加了这条之后,行为就稳定了。
实测下来,这个简单Agent的完成率从最初的60%提高到了95%以上。剩余5%的失败通常是用户输入包含模糊信息,比如“查一下那边天气”,模型不知道“那边”是哪里,只能追问。让AI学会“在信息不明时追问”,是像样的Agent和玩具Agent的分水岭。
4. 常见问题与排查技巧实录
这一节是我最想写的部分。因为这些坑,我在不同项目里反复踩过。把它们总结成速查表,能帮你少走很多弯路。
4.1 AI反复调用同一个工具,停不下来
现象:Agent进入死循环,比如不停地查询天气,哪怕已经拿到了结果,还继续调用。看了日志发现,模型每轮都在想“我是不是还应该再查一次确认一下”。
原因大多是任务目标不清晰,或者模型误以为每次调用都能让结果更准确。也可能是你给的系统提示词里写了“要确保信息可靠”,模型就机械地重复查证。
解决思路:
- 给Agent设定最大迭代次数,比如10次,超出就强制终止并回到用户。
- 在提示词里明确写“工具调用次数尽量少,拿到结果后立即总结”。
- 检查工具返回结果里是否缺少让模型“放心煞车”的信息。比如把
weather字段的值写得更直接,让模型一眼就能做出结论。
我自己的习惯是给每次工具调用加一个编号,并在系统里记录调用链。检查死循环时,一眼就能看到它卡在哪个节点。
4.2 工具返回的数据读不懂,瞎编结果
现象:工具的返回值是一段JSON,模型没能正确解析,于是凭空生成一个看起来很合理但实际错误的结果。比如天气接口返回{"code": 200, "data": null},模型不看data为null,照样说“天气晴,气温25度”。
这属于上下文里“工具返回信息被忽略”的经典问题。很多模型的提示输入里都包含工具返回,但因为格式混乱或字段语义不明确,模型没有真正“看到”关键字段。
解决思路:
- 工具返回内容尽量结构化,并且用模型容易理解的自然语言包一层。比如我经常把返回包装成
{"result": "上海今天小雨,气温18度,降水概率75%"},而不是裸返回JSON。 - 在系统提示词里要求:“工具返回值中的所有字段,都要作为事实依据使用,不得编造任何未出现的值。”
- 如果工具可能返回空值,要在描述里写明:“如果data为null,代表查询失败,你必须告诉用户查询失败,并询问是否重试。”
这个方法见效极快。把工具返回包成“人话”之后,模型的错误判断率会显著下降。
4.3 上下文太长,任务做到一半“失忆”
现象:Agent执行第8个步骤时,忘了第2步的结论,导致后来重复调用工具或做出矛盾判断。比如先查了天气A城市,后面突然用B城市的结果来提醒用户。
原因是上下文窗口被大量工具返回和中间推理占满,早期关键信息被截断或稀释。尤其在你开了长对话或让Agent处理多文件时非常常见。
解决思路:
- 给Agent配一个“工作记忆区”,也就是一片专门的上下文片段,每轮只把最关键的事实写入,比如“user_city=上海”、“weather_result=小雨”。后续生成时,模型永远能看到这块精简记忆。
- 用摘要代替完整历史。每执行完3到5步,用另一个模型调用把这5步的结论压缩成两三句话,塞回上下文。
- 如果真的需要跨会话保持长期记忆,用向量数据库存历史,按需读取。我不建议把长期记忆全部塞进上下文,那是给后续步骤埋雷。
我习惯的做法是:在代码里维护一个“memory”字段,每次工具返回后,把关键信息用一行文本写进memory,同时让系统提示词告诉模型“所有任务相关事实请先查看memory”。这样相当于给Agent发了一个随时可翻的小本子。
4.4 权限给太大,AI不小心干了“坏事”
现象:Agent拥有删除文件、发送邮件、购买商品的权限,某次对话中模型错误地执行了不可逆操作。比如用户说“把刚才那个文档删掉”,模型却删了另一个同名文档。
这种情况最严重,一旦发生,轻则数据丢失,重则影响业务。根源在于你的工具设计“过度授权”。AI不是一个有完全判断力的人,你在设计工具时,应该假设它会犯错。
解决思路:
- 高风险工具单独设置
needs_confirmation: true,当模型调用这类工具时,系统先拦截下来,把操作预览发给用户,用户确认后才真正执行。 - 工具参数里加“风险等级”字段,模型在调用前必须判断这个操作的破坏性,并选择对应处理方式。
- 最重要的是:权限范围尽量窄。能只读就只读,能单条操作就别给批量操作。把“批量删除”和“单个删除”拆成两个工具,模型更不容易误操作。
我见过不少团队为了让Agent“更像人”,给它开了一堆高权限工具,结果在演示时当众翻车。记住:AI越能干,护栏越要结实。否则能力越大,破坏越大。
5. 机会在哪里:三类人能吃到这波红利
前面讲的是技术怎么落地。但技术之外,更值得想清楚的是“谁赚钱”。当千问们开始“干活”,我看好三类人。
5.1 做工具的人:把API变成“积木”
现在市面上有大量API:天气、地图、支付、短信、邮件、ERP、CRM……但它们都是给程序员用的,接口文档复杂、参数格式各异。Agent要“干活”,第一步就是把这些API包装成模型能理解和调用的工具。这个“包装”本身就是巨大的机会。
举个例子,很多中小企业有微信通知、钉钉通知、短信通知的API,但统一封装成“发送消息”工具的很少。你要是能做一个统一的工具市场,让Agent像装App一样安装工具,等于掌握了开发者生态的入口。第一批做“Agent插件商店”的人,会像当年做手机应用商店的人一样,站在生态位的高点。
我自己在搭建Agent时,最大的时间消耗就是“适配工具”。每个API的参数规则、鉴权方式、返回格式都不一样,封装一个好用且稳定的工具,比你想象中费事。这也是为什么工具封装会成为专业服务——它需要领域知识、工程经验和模型调优技巧三者的结合。
5.2 做场景的人:把流程变成“Agent”
工具是积木,但最终用户要的是“完成生活或工作中的一件事”。比如“每周生成销售周报并发送给经理”“收到新客户线索后自动录入CRM并发送欢迎邮件”“每天监控竞品价格变动”。这些场景,现在大部分还靠人肉完成,而且流程高度相似。
做场景的人,不需要发明技术,只需要把某个行业里重复度高的流程,拆解成Agent的步骤,然后用现有工具链串起来。这个工作很像咨询公司做的事:访谈、梳理流程、设计自动化方案、交付给客户。
这类机会的核心壁垒不是模型能力,而是你对某个具体业务的理解深度。你比客户更懂“这个流程哪一步能自动化,哪一步不能”,你就值钱。初期不用求大,从一个细分场景切入,比如“跨境电商客服自动化”或者“律所案件进度整理”,跑通一个闭环,再横向复制。
5.3 做交付的人:帮企业把AI“用起来”
很多企业买了大模型API,买了办公软件,但还是不知道怎么让它们协同工作。因为“用起来”涉及系统对接、权限管理、数据安全、员工培训,这些杂活不是买一个模型就能解决的。
做交付的人,本质上做的是“集成商+教练”的活。你要负责把Agent嵌入到企业现有的业务流程里,设定权限边界,制定使用规范,甚至教员工怎么跟Agent配合。这个市场非常大,因为每家企业都需要“干活AI”,但大部分企业没有内部团队能完成这套工程。
交付的核心是信任。企业最担心的不是AI不够聪明,而是AI捣乱。所以你在交付时,一定要把安全护栏、审计日志、人工确认机制做到位。你自己先想清楚“AI搞砸了怎么办”,客户才会放心地把业务交给AI。
这三类机会不是互斥的。你可以同时做工具和场景,也可以做场景和交付。但建议先聚焦一个点,把一套复用的方法论打磨出来,再横向铺开。
6. 写在最后:我的一点体会
做一个能让AI“干活”的项目,跟单纯调一个聊天机器人是完全不同的体验。聊天机器人出错了,大家哈哈一笑;干活AI出错了,可能直接造成损失。所以我对想入这个方向的朋友有一个建议:先从小权限、低风险的任务开始,比如信息查询、摘要整理、日程辅助,跑通一整套流程之后,再逐步放大范围和自由度。
最后分享一个小技巧,也是我在实际项目里踩过坑之后总结出来的:在任何Agent的系统提示词里,都加一句“当你不确定是否应该执行某个操作时,停止并询问用户”。这句话看起来简单,但能避免掉绝大多数吓人的事故。
AI从“对话”走向“干活”,本质上是把语言模型从“顾问席”拉到了“执行席”。这个转变,让技术的价值从“提供建议”变成了“交付结果”。所以,当千问们开始干活,机会确实才刚刚开始。真正有准备的人,不会只坐在旁边看热闹,而是自己动手,把一个小而可靠的Agent跑起来。我希望这篇文章能帮你迈出这一步。