我最近和几个做企业软件的朋友聊天,几乎每个人都在问同一个问题:AI 到底会不会把我们的饭碗端了?这个问题放在两年前,听起来像科幻片。但放在现在,任何写代码、卖软件、做 SaaS 的人都能感受到那种压力——不是来自某一家公司,而是来自整个技术范式的切换。
我的判断很直接:传统软件公司不会一夜之间消失,但一定会经历一次大规模的价值重估。过去二十年,软件行业的核心逻辑是“把业务逻辑变成代码,然后按 License 或订阅收费”。AI 正在打破这个逻辑。当模型可以直接理解需求、生成代码、调用工具、自动执行流程的时候,“软件公司”这个存在了几十年的商业形态,必须回答一个问题:如果 AI 什么功能都能做,那我们还卖什么?
这篇文章我不想写成那种贩卖焦虑的行业评论。我想从技术视角把这件事拆开:AI 究竟改变了软件行业的哪些环节,传统软件公司有哪些可行的转型路径,作为开发者,你又该怎么在这轮变化里找到自己的位置。文章里会给出完整可行的架构示例和代码片段,让你不仅能看懂趋势,还能在项目里开始动手验证。
1. AI 冲击软件行业的三个层面:交互、逻辑、价值
想要理解软件公司为什么会感到恐慌,不能只看“AI 能写代码”这一层。我的理解是,AI 对软件行业的冲击发生在三个不同层面,每一层都动摇了传统软件公司的某个核心资产。
第一个层面是交互层。过去,用户使用软件必须通过学习界面来完成操作。企业软件尤其明显,一套 CRM 系统、一套 ERP 系统,光培训就要花几周。AI 改变了这一切:用户不再需要通过菜单、按钮、表单来告诉系统自己要干什么,而是直接用自然语言描述目标。这带来的直接后果是,软件的表层功能变得“透明化”——用户不在乎系统里有多少个功能模块,只在乎能不能用一句话解决自己的问题。
第二个层面是逻辑层。过去的软件逻辑是硬编码的:开发人员分析需求、设计流程、编写代码、发布版本,业务逻辑被固化成确定的代码路径。AI 的出现让一部分逻辑从“明确的规则”变成了“模型的判断”。比如客户分群、异常检测、智能客服,这些过去需要人工梳理规则的功能,现在可以用大模型加少量业务约束来实现。这意味着,软件公司引以为傲的“业务流程沉淀”不再是不可替代的资产。
第三个层面是价值层。这一点最致命。传统软件的定价逻辑是基于“功能数量”和“使用人数”的。AI 的定价逻辑则是基于“智能产出”和“业务效果”的。当软件从“工具”变成“数字员工”,客户会重新评估:我付的钱到底买的是功能,还是买的结果?如果 AI 能直接帮我完成工作,我为什么还要买一套需要人去操作的系统?
这三层变化叠加在一起,构成了所谓的“AI 末日”焦虑。但注意,焦虑的对象并不是 AI 本身,而是“传统软件价值交付模式”的整体失效。理解了这一点,我们才能继续讨论:什么样的软件公司会被淘汰,什么样的会活得更好。
2. 软件公司的护城河,正在被重新洗牌
传统观点认为,软件公司的护城河包括:代码资产、客户关系、行业知识、品牌和渠道。AI 时代,这些护城河的含金量正在发生剧烈变化。
先说代码资产。过去,一个软件公司积累了几十万行业务代码,这是巨大的壁垒。但现在的现实是,大模型生成代码的能力越来越强,很多通用逻辑已经被模型“学会”了。如果你的代码资产只是“实现了常见的增删改查和业务表单”,那它确实很难构成壁垒。但如果你的代码资产里包含极其复杂的领域规则——比如金融风控模型、医疗合规流程、供应链优化算法——那模型很难直接复现,这依然是护城河。
再说行业知识。这一点是目前很多传统软件公司最大的机会。大模型虽然通晓人类常识,但它对某个具体企业的内部流程、历史数据、组织关系是不知道的,更无法直接访问企业内部的私有系统。谁能把模型和企业业务深度结合,谁就能掌握这个“最后一公里”的价值。
我用一个简单的表格来对比不同资产在 AI 时代的变化:
| 资产类型 | 传统价值 | AI 时代的价值变化 | 说明 |
|---|---|---|---|
| 通用代码库 | 高 | 快速贬值 | 模型已学会大部分通用逻辑 |
| 领域规则/算法 | 高 | 依然高 | 模型难以复现复杂约束 |
| 客户关系与渠道 | 高 | 中高 | 重要,但可被 AI 原生渠道绕过 |
| 私有业务数据 | 中 | 大幅升值 | 模型能力再强,也没有你的数据 |
| 工作流与集成生态 | 中 | 高 | Agent 时代需要可被调用的服务能力 |
| 品牌与信任 | 中 | 中 | 2B 场景仍重要,但不再是唯一 |
这个表格想表达的核心是:如果一家软件公司只拥有第一行(通用代码库)的资产,那它确实很危险。如果它拥有后面几行的资产,AI 反而会放大它的价值。所以,与其说软件公司面对的是“末日”,不如说是“优劣势重新洗牌”——关键在于你手里到底有什么牌。
3. 三种转型路径,对应不同的技术选型
从技术角度,我看到目前传统软件公司的 AI 转型大致可以分成三条路径。这三条路径之间不是互斥的,很多公司会同时走两条甚至三条,但每条路径的技术选型和投入重点完全不同。
3.1 路径一:AI 增强嵌入(Copilot 模式)
这条路径是最常见、最稳妥的做法。它不改变原有系统的核心架构,而是在现有软件里嵌入 AI 能力,让用户在使用过程中得到智能辅助。
典型场景包括:在 CRM 系统里加入“自动生成客户跟进摘要”,在代码开发平台里加入“代码自动补全”,在数据分析工具里加入“自然语言查询报表”。这些功能的共同点是:核心业务流程不变,AI 只是作为增强模块出现。
技术选型上,走这条路需要关注三点:第一,模型接入层,通常是调用大模型 API 或部署私有模型;第二,上下文工程,也就是如何把系统里的数据安全地构造成模型的提示词;第三,AI 功能的评估和反馈机制,不能只上线不管效果。这条路径的优点是风险低、落地快,缺点是护城河提升有限,因为你的竞争对手也能很快接入同样的模型能力。
3.2 路径二:Agent 优先重写(AI 原生模式)
这条路线的野心更大。它不是“在旧软件上加 AI”,而是把产品重新设计成“Agent 优先”的形态。
什么意思?传统软件是“用户操作,电脑执行”。Agent 优先的软件是“用户表达目标,Agent 自主规划并执行”。比如一个报销系统,传统的做法是用户填写表单、上传发票、走审批流。Agent 优先的做法是:用户直接说“帮我报销昨天出差的酒店费用”,Agent 自己去查发票、填表单、发起审批,遇到问题再回头问用户。
这条路径的技术挑战明显更大。你需要设计 Agent 的工作流、规划能力、工具调用能力、异常处理机制,以及最关键的安全边界——Agent 能访问哪些系统、能执行哪些操作,必须有严格限制。技术选型上通常会用到 Agent 框架、流程编排引擎、模型路由和 MCP 这类工具调用协议。
从产品角度看,这不是简单的功能升级,而是产品形态的重构。它需要产品经理和技术团队对“哪些环节适合 Agent 接管、哪些环节必须保留人工确认”有清晰的判断。步子迈得太大容易翻车,走得太小又无法形成代差。
3.3 路径三:平台化开放(MCP / Function Calling 模式)
这条路径可能最容易被忽略,但从长期看可能是最具战略价值的。它的核心是:不把所有智能都放在自己产品里,而是把自己的业务能力封装成“工具”,让外部 Agent 可以调用。
我们可以这样理解:过去软件公司提供 API,是为了让开发者集成。AI 时代,软件公司需要提供“AI 可调用的工具接口”,让大模型可以把你的系统当作“手脚”来使用。这就是 MCP(Model Context Protocol)和 Function Calling 正在做的事情。
比如你是一家物流公司,你的核心能力是运输调度。传统方式是提供一个查询运单、创建订单的 REST API。Agent 时代,你需要进一步把这些 API 描述成模型能理解的工具:什么参数、什么用途、什么时候调用、返回什么。这样,一个外部 AI Agent 就能像人类一样使用你的物流服务,把你融入到更大的智能体生态里。
这条路径的回报周期更长,但战略意义很大。一旦大量 Agent 依赖你的服务来完成具体任务,你就从“卖软件”变成了“AI 经济的基础服务提供商”。
4. 从代码看转型:传统 API 怎么变成 Agent 能力
讲了这么多概念,现在进入实操。我选一个典型的业务场景来说明:把一套已有的工单查询服务改造成 AI Agent 可以调用的能力。
假设我们有一个传统的工单系统,它对外提供了一个 REST API 来查询工单状态。传统调用方式是客户端发 HTTP 请求,拿到 JSON 数据。现在我们想让它被 AI Agent 调用,需要做的不只是写一个 API,而是让模型知道“这个 API 是干什么的、什么时候用、要怎么传参”。
4.1 示例一:把工单查询服务包装成 Tool
以下是一个基于 Python 和 FastAPI 的简化示例。这个示例的核心思路是,定义一个函数,并附上清晰的描述和参数说明,让大模型能根据用户问题自动决定是否调用它。
# 文件路径:ticket_service/tools.py # 核心思路:把传统 API 的逻辑封装为 Agent 可调用的 Tool # 这里使用类似 Function Calling 的结构,具体框架以你项目为准 def get_ticket_status(ticket_id: str) -> dict: """ 根据工单 ID 查询工单当前状态。 参数: ticket_id: 工单编号,格式如 TK-2025-0001 返回: 工单的状态信息,包括当前节点、处理人、最近更新时间等。 """ # 传统业务逻辑:查询数据库或调用已有内部服务 # 这里用字典模拟返回结果,实际项目中替换为真实服务调用 result = { "ticket_id": ticket_id, "status": "审批中", "current_node": "部门经理审批", "owner": "张三", "updated_at": "2025-06-18 10:30:00", "history": [ {"node": "申请人提交", "time": "2025-06-18 09:00:00"}, {"node": "部门经理审批", "time": "2025-06-18 10:30:00"} ] } return result # 这是给模型看的工具定义。 # 在 Function Calling 场景中,这个描述决定了模型是否会调用该工具。 TOOL_DEFINITIONS = [ { "type": "function", "function": { "name": "get_ticket_status", "description": "查询工单的当前处理状态和处理历史。当用户询问工单进展时使用。", "parameters": { "type": "object", "properties": { "ticket_id": { "type": "string", "description": "工单编号,格式如 TK-2025-0001" } }, "required": ["ticket_id"] } } } ]这段代码的关键点其实不在查询逻辑,而在于TOOL_DEFINITIONS里的描述。你可以看到,面向 Agent 的工具暴露不是把 API 文档丢给模型,而是要用模型能理解的自然语言重新描述函数的用途、参数和返回结果。
这里有个容易踩坑的地方:很多人在做 Function Calling 时,函数描述写得特别笼统,比如“查询工单”。模型虽然能猜到,但不够精准。更好的做法是写清楚“什么时候会用到这个函数”。比如上面写的“当用户询问工单进展时使用”,模型就能在用户问“我的报销到哪一步了”时,准确联想到这个工具。
4.2 示例二:MCP Server 配置示例
MCP(Model Context Protocol)是 Anthropic 推出的开放协议,现在已经被大量 Agent 框架支持。你可以简单理解成:它给 AI 应用提供了一套统一访问外部工具和数据源的标准接口。如果你的软件要融入 Agent 生态,MCP 是当前最值得关注的协议之一。
下面是一个 MCP Server 的配置示例。这里我用的是标准 JSON 格式,远程服务地址等字段要根据实际环境修改。需要特别说明的是,MCP 的配置结构还在快速演进,具体字段以你使用的 SDK 版本为准。本文的核心是展示“一个 AI 可以访问的工具资源”的长相。
{ "mcpServers": { "ticket-service": { "command": "npx", "args": [ "-y", "@your-company/mcp-ticket-server" ], "env": { "TICKET_SERVICE_BASE_URL": "http://internal.example.com/ticket", "TICKET_SERVICE_API_KEY": "${TICKET_SERVICE_API_KEY}" } }, "internal-docs": { "command": "npx", "args": [ "-y", "@your-company/mcp-docs-server" ], "env": { "DOCS_INDEX_PATH": "/data/knowledge_base" } } } }配置的意思很直白:本地运行一个 MCP Server(通过 npx 启动),然后在环境变量里告诉它内部服务的地址和密钥。这个 Server 会把内部系统的能力暴露给大模型客户端(比如 Claude Desktop、Cursor、自研 Agent 平台等)。
这里要提醒一句:MCP 配置中经常出现 API Key 等敏感信息。生产环境不要直接硬编码在 JSON 文件里,更不要提交到 Git 仓库。建议使用环境变量注入或密钥管理服务。这也是从代码层面保证 AI 应用安全的重要习惯。
4.3 示例三:Agent 编排一次完整任务
最后一个例子,是用伪代码展示一个 Agent 如何调用多个软件能力来完成一次完整任务。这里我用一个“客户投诉全流程处理”的场景。
用户说了一句话:“我的订单延迟发货了,帮我查一下原因,然后发一封致歉邮件给客户。”
# 文件路径:agent_workflow/run.py # 伪代码示例:演示 Agent 如何编排多个工具完成任务 # 实际开发中,你可以用 LangChain、Spring AI 等框架实现 async def handle_customer_complaint(user_input: str): # Step 1: 从用户输入中提取订单号 order_id = extract_entity(user_input, "order_id") customer_email = extract_entity(user_input, "customer_email") # Step 2: 调用订单查询工具,确认订单状态 order_info = await call_tool("get_order_status", {"order_id": order_id}) if order_info["status"] == "DELAYED": # Step 3: 调用延迟原因分析工具(可能是另一个系统) delay_reason = await call_tool("analyze_delay_reason", { "order_id": order_id }) # Step 4: 让模型根据原因生成致歉邮件草稿 draft_email = await llm_generate_email( customer_email=customer_email, order_id=order_id, delay_reason=delay_reason, tone="professional" ) # Step 5: 调用邮件发送工具,人工确认后发送 approval_result = await ask_human_approval(draft_email) if approval_result.approved: await call_tool("send_email", { "to": customer_email, "subject": f"订单 {order_id} 延迟说明", "content": draft_email.content }) return "已发送致歉邮件" else: return "用户取消发送,已保留邮件草稿" else: return "订单暂无异常,无需处理"这个例子的核心不是代码本身,而是里面的“编排”思想。你会发现,Agent 不是只调用一个大模型,而是把多个传统软件能力组合起来,在合适的时间、用合适的工具、执行合适的动作。这就是我们前面说的“软件公司转型为智能体生态服务商”的技术雏形。
注意第 5 步,我特意加了一个ask_human_approval步骤。在涉及给客户发邮件、删除数据、修改订单等敏感操作时,绝对不能交给 Agent 自动执行。这是 AI 工程落地时的安全底线原则:高风险动作必须有人工确认环节。
5. 开发者个体:这轮转型中的技能变化
聊完公司层面,我们说点跟我们每个人直接相关的:开发者的技能要求发生了什么变化。
我先说结论:在 AI 时代,写代码的能力仍然是基础,但已经不是最重要的竞争力。更重要的是三件事:接口设计能力、提示词工程能力、评估与测试能力。
接口设计能力,不是说你会写 REST API,而是你能设计“模型容易理解的接口”。你写的工具描述、参数限制、返回值结构,直接决定了 AI Agent 能不能正确使用你开发的功能。这跟过去写 API 文档完全是两种思维:过去是给人看的,现在是给模型看的。
提示词工程能力,也不是很多人以为的“写几句好话让模型干活”。在业务系统里,提示词工程的核心是上下文构建——你要决定把哪些业务数据放到提示词里、如何防止模型输出不实信息、如何设计 few-shot 示例来引导模型按公司规范回答。
评估与测试能力,这个话题现在尤其重要。传统软件测试有明确的预期结果,但 AI 应用的输出是概率性的,同一个问题可能每次回答都不一样。所以你需要建立一套评测集,用人工和自动化的方式持续评估模型输出的质量。我在跟几个做 AI 应用开发的团队交流时,大家公认最大的坑就是“模型上线前感觉很强,上线后各种边界问题暴露”。原因就是缺少系统化的评测流程。
除此之外,API 安全、数据隔离、权限模型在设计 Agent 系统时也变得更加关键。过去你的 API 只给人调用,可以通过 IP 限制、频控来防护。现在 Agent 会按模型的理解去调用你的 API,你需要考虑更细粒度的权限控制,比如每个 Agent 只能访问自己业务范围内的数据。
6. 软件产品 AI 化的常见误区与判断清单
最后,我整理了一份判断清单,供你在做技术选型和产品规划时参考。
| 误区 | 具体表现 | 正确的做法 |
|---|---|---|
| 把大模型接入就当作 AI 转型 | 买了个模型 API,加了个聊天框,就宣称产品已 AI 化 | 从真实用户场景出发,找到 AI 能显著提升效率的环节 |
| 忽视私有数据的作用 | 直接让模型回答,不用企业内部数据 | 建立 RAG 流程,让模型基于企业数据回答,并注明信息来源 |
| 不给 Agent 设置安全边界 | Agent 可以无限制地访问内部系统和执行敏感操作 | 最小权限原则,高风险操作强制人工确认 |
| 忽略评测环节 | 模型上线前只凭感觉看效果 | 建立评测集,定义判定标准,持续回归 |
| 想一步到位重构产品 | 直接推翻现有系统,全面拥抱 Agent | 选择 1-2 个高价值场景试点,验证后再扩展 |
| 过度依赖单一大模型 | 绑定某家模型供应商,换模型成本极高 | 抽象模型接入层,支持多家模型切换 |
这里我想特别强调一下“信息幻觉”这个问题。企业软件最怕的就是输出结果不可靠。AI 应用如果直接面向客户输出,一旦模型编造了不存在的订单或政策,会造成严重的信任危机。所以,凡是给客户看的内容,都必须能找到来源;凡是涉及关键数据的输出,都要经过校验。
另一个值得关注的工程细节是落地成本。很多团队在 PoC 阶段觉得模型效果很好,但到了线上,发现响应速度不够、token 费用过高、并发不达标。建议在技术选型时,提前用小流量评测的方式评估成本和性能,不要等到全部研发完成了再发现模型撑不住。
7. 结语:软件价值的迁移
回到开头那个问题:传统软件公司会不会被 AI 干掉?
我的看法是,会有一批公司被淘汰,但淘汰它们的不是 AI,而是它们自己“只会交付功能”的商业模式。AI 确实让通用功能变得廉价,但它同时让数据、领域知识、集成能力和用户体验变得更有价值。软件公司真正需要面对的问题,不是“要不要用 AI”,而是“我的价值到底是封装功能,还是交付结果”。
对开发者来说,这轮变化的本质也不是“程序员会不会失业”,而是“程序员的工作方式发生位移”。未来的软件工程师可能更像“AI 系统的架构师”——设计模型怎么决策、Agent 怎么行动、数据怎么闭环、效果怎么评估。这些能力,现在就可以开始培养。
如果你所在的公司正在讨论 AI 转型,我建议从一个小场景开始。选一个高频、低风险、数据完整的业务环节,用本文示例的路子把它改造成 Agent 可调用的工具。跑通之后,你就会对整个体系有了真实的体感,而不是停留在概念层面的讨论。AI 对软件行业的重塑已经开始了,与其被动等它改变你,不如现在就开始做那个改变的参与者。