中小企业的 AI 落地——没有算力资源怎么用好 AI
中小企业的 AI 落地——没有算力资源怎么用好 AI
适读人群:中小企业的技术负责人、想在团队里推进 AI 的工程师
阅读时长:约 22 分钟
文章价值:中小企业 AI 策略 + 成本控制方案 + 真实案例 + 轻量化部署指南
一家没有 GPU 的公司怎么用 AI
前段时间,一个朋友找我聊,他在一家 50 人的制造业公司做技术负责人。
他说:「我们 CEO 看了很多关于 AI 的报道,要求我们也要'用起来 AI'。但是我们公司没有 GPU 服务器,没有数据科学家,就我一个人能看懂代码,你觉得我们能怎么做?」
这个问题,是我被问到最多的问题之一。
大多数关于 AI 的文章,默认读者有 GPU 集群、有算法团队、有大量标注数据。这些对大厂来说是常态,对大多数中小企业来说是奢望。
现实是:中国 5000 万家中小企业里,能自建 GPU 服务器的可能不到 1%。99% 的中小企业,要用 AI,只能走另一条路。
这篇文章,就是为那 99% 的公司写的。
先消除一个误区:用 AI 不等于买 GPU
很多人把「用 AI」和「有 GPU 服务器」画等号,这个认知是错的,而且这个错误认知让大量中小企业在 AI 时代原地踏步。
事实是:现在最强大的 AI 能力,大部分都可以通过 API 调用——你不需要知道底层模型跑在哪里,你只需要发一个 HTTP 请求,就能用到 GPT-4、Claude、Qwen 这些顶级模型的能力。
这和 2010 年代的云计算革命非常类似:以前建网站要买服务器,后来有了云服务,按需付费,中小企业也能用世界级的基础设施。
AI 正在经历同样的变革。只不过很多中小企业还没意识到这一点。
中小企业的 AI 战略选择
在没有自建算力的情况下,中小企业有三种主要策略:
策略一:云端 API,快速起步(适合大多数场景)
直接调用云端 LLM API,无需部署,按调用量付费。
适合场景:
- 文档处理(合同分析、报告生成、邮件自动化)
- 客服 AI(知识库问答)
- 内部工作效率工具
优点:入门成本极低,无需运维,能力强大 缺点:数据要走外网(有数据安全考量),成本随用量线性增长
对于大多数中小企业,这是最务实的起步路径。
策略二:轻量化本地模型(适合数据安全敏感场景)
用可以跑在普通服务器甚至 CPU 上的小型模型本地部署。
现在有一些 1-4B 参数的小模型,量化后在 CPU 上就能运行(慢一点,但能用),在一台 16GB 内存的普通服务器上可以部署。
适合场景:
- 数据不能出内网的场景
- 对响应延迟要求不高的批处理场景
- 量少但需要本地化的场景
策略三:混合策略(最终形态)
大多数场景用云端 API(便宜、强大),敏感数据用本地轻量模型。两者结合,既控制了成本,又处理了安全问题。
云端 API 的成本控制
用云端 API 最大的顾虑是成本。这个顾虑是合理的,但 API 成本完全可以管理,关键是选对策略。
成本的来源
LLM API 的计费通常按 Token 计算(Token 是文本的基本单位,大约一个中文字或半个英文单词)。成本 = 输入 Token 数 × 输入单价 + 输出 Token 数 × 输出单价。
不同模型的价格差异巨大:GPT-4o 的价格,是 GPT-4o-mini 的约 10-20 倍;Claude Haiku 是 Claude Sonnet 的约 1/10。
核心原则:用最便宜的能满足需求的模型。
分级模型策略
不是所有任务都需要最强的模型。一个合理的分级:
| 任务类型 | 建议模型 | 理由 |
|---|---|---|
| 简单意图识别、关键词提取 | 小模型(Haiku、mini 系列) | 任务简单,便宜就够 |
| 文档摘要、格式化处理 | 中等模型 | 需要一定理解能力 |
| 复杂分析、多步推理 | 大模型 | 需要最强能力 |
| 代码生成 | 专门代码模型 | 专业模型效果更好 |
实际项目中,大约 60-70% 的请求可以用便宜的小模型处理,只有 20-30% 需要大模型。这样整体成本可以降低 50-70%。
缓存策略
对于重复性高的查询,做查询缓存:
@Service
public class CachedLLMService {
private final ChatClient chatClient;
private final RedisTemplate<String, String> redisTemplate;
// 缓存时间:24小时(知识类内容变化不频繁)
private static final long CACHE_TTL_SECONDS = 24 * 60 * 60;
// 相似度阈值:用于语义缓存(相似问题复用缓存)
private final VectorStore cacheIndexStore;
/**
* 带缓存的LLM调用
* 精确缓存:完全相同的问题直接返回缓存
* 语义缓存:相似度足够高的问题复用缓存(可选)
*/
public String cachedCall(String prompt, String cacheKey) {
// 1. 精确缓存查找
String exactCacheKey = "llm:exact:" + DigestUtils.md5Hex(prompt);
String cachedResponse = redisTemplate.opsForValue().get(exactCacheKey);
if (cachedResponse != null) {
log.debug("Cache hit (exact) for key: {}", cacheKey);
return cachedResponse;
}
// 2. 语义缓存查找(相似度 > 0.95 才复用)
List<Document> semanticCacheHits = cacheIndexStore.similaritySearch(
SearchRequest.query(prompt)
.withTopK(1)
.withSimilarityThreshold(0.95)
);
if (!semanticCacheHits.isEmpty()) {
String semanticCachedResponse = semanticCacheHits.get(0)
.getMetadata().get("response").toString();
log.debug("Cache hit (semantic) for key: {}", cacheKey);
return semanticCachedResponse;
}
// 3. 缓存未命中:调用LLM
String response = chatClient.prompt()
.user(prompt)
.call()
.content();
// 4. 写入精确缓存
redisTemplate.opsForValue().set(exactCacheKey, response,
CACHE_TTL_SECONDS, TimeUnit.SECONDS);
// 5. 更新语义缓存索引
Document cacheDoc = new Document(prompt,
Map.of("response", response, "cache_key", cacheKey));
cacheIndexStore.add(List.of(cacheDoc));
return response;
}
/**
* 批量处理:多个文档合并成一次LLM调用
* 适合批量摘要、批量分类等场景
*/
public List<String> batchProcess(List<String> items, String instruction) {
// 把多个小任务合并成一次调用
// 适合 token 少的任务,能减少调用次数(降低成本)
if (items.size() <= 5) {
String batchPrompt = buildBatchPrompt(items, instruction);
String batchResponse = chatClient.prompt()
.user(batchPrompt)
.call()
.content();
return parseBatchResponse(batchResponse, items.size());
} else {
// 超过5个,分批处理
List<List<String>> batches = Lists.partition(items, 5);
return batches.stream()
.flatMap(batch -> batchProcess(batch, instruction).stream())
.collect(Collectors.toList());
}
}
private String buildBatchPrompt(List<String> items, String instruction) {
StringBuilder sb = new StringBuilder();
sb.append(instruction).append("\n\n");
sb.append("请按顺序处理以下").append(items.size()).append("条内容,");
sb.append("每条用「---」分隔:\n\n");
for (int i = 0; i < items.size(); i++) {
sb.append("【").append(i + 1).append("】\n");
sb.append(items.get(i)).append("\n---\n");
}
return sb.toString();
}
}缓存策略的效果:在知识库问答场景里,相同或相似的问题占总查询量的 30-40%,缓存后这部分成本降为零。整体成本通常可以降低 20-35%。
Prompt 优化降低 Token 消耗
系统提示词要精简:系统提示词每次调用都要计费,200 字和 2000 字,成本差 10 倍。把系统提示词压缩到最精简,删掉冗余说明。
上下文窗口控制:RAG 检索到的文档,不是越多越好,多了不仅成本高,反而可能降低质量(上下文太长,LLM 注意力分散)。控制在 4-8 个文档片段,而不是 15-20 个。
输出长度控制:明确告诉 LLM「输出不超过 200 字」,避免生成冗长的不必要内容。
什么场景适合轻量化本地模型
本地小模型有一个根本性的劣势:能力不如大模型。但有些场景,能力要求不高,本地模型完全够用:
适合本地小模型的场景
文本分类和意图识别:判断一段文本属于哪个类别(比如客服问题分类),对模型能力要求不高,1-3B 的小模型完全可以胜任。
简单信息提取:从非结构化文本中提取特定字段(日期、金额、地名),这类任务模式规律,小模型效果不错。
批量文本处理:大量文档的格式化、清洗、摘要,对单条质量要求不极端高,但量大,本地处理更经济。
敏感数据场景:涉及员工数据、客户隐私、商业机密的场景,不方便走外网,本地模型是唯一选项。
轻量化部署方案
不需要 GPU,一台配置较好的服务器(16-32GB 内存,多核 CPU)就可以跑小型量化模型:
Ollama:最简单的本地模型部署方案,安装后一条命令就能跑常见模型:
# 安装后直接拉取并运行
ollama pull qwen2.5:7b-instruct-q4_K_M
ollama serve量化模型:选择 Q4 量化版本,大幅减少内存需求。Qwen2.5-7B 原始版本需要 14GB 显存,Q4 量化后只需要约 5GB 内存,普通 CPU 服务器可以运行(慢一些,但能用)。
Spring AI 集成本地模型:
@Configuration
public class LocalModelConfig {
@Bean
public ChatClient localChatClient() {
// 连接本地 Ollama 服务
OllamaChatModel ollamaModel = OllamaChatModel.builder()
.baseUrl("http://localhost:11434")
.model("qwen2.5:7b-instruct-q4_K_M")
.options(OllamaOptions.builder()
.temperature(0.1) // 低温度,输出更稳定
.numCtx(4096) // 上下文窗口
.build())
.build();
return ChatClient.builder(ollamaModel).build();
}
}真实案例:一家 50 人制造业公司怎么用 AI
回到开头那个朋友的问题。我帮他们系统地梳理了一下,最终落地的方案是这样的。
公司基本情况:制造业,50人,主要业务是定制化工业零件,有销售、采购、生产、质检等部门。没有数据科学家,技术团队就两个人(我朋友 + 一个前端)。
第一步:找高价值、低风险的切入点
我们用了两周时间,访谈了所有部门的负责人,问两个问题:「你们现在哪个工作最费时间,但感觉不需要太多脑力?」「哪个地方信息查找最费劲?」
整理出了以下痛点:
- 销售报价:客户来了询价,销售要手动查历史报价记录,平均 30 分钟,每天几十次
- 采购询价对比:收到多家供应商报价单(格式各异),人工汇总比较很费时
- 质检记录查询:几年的质检记录在 Excel 里,查询某个供应商或产品的历史质检情况很慢
- 合同起草:每次起草合同要从模板开始,反复修改,销售对法律条款不熟悉
这四个痛点,每一个都是「大量重复性工作 + 对 AI 能力要求不极端高」的组合,非常适合 AI 介入。
第二步:用最小成本验证
我们选了最高频的「销售报价查询」先做 PoC。
技术方案极其简单:
- 把历史报价数据(Excel)导入向量数据库
- 用 Spring AI + 云端 API 做查询界面
- 整个 PoC 开发时间:三天
成本:向量数据库用的是 pgvector(PostgreSQL 插件,零额外成本),云端 API 用的是 Qwen 的 API(比 GPT 便宜很多),每月预估成本 200-400 元。
效果:销售报价查询时间从 30 分钟降到 3 分钟,销售部门非常满意,三天内全部切换到新系统。
三天开发,200 块月费,解决了高频痛点。这就是中小企业 AI 落地的正确打法。
第三步:逐步扩展
PoC 成功后,陆续做了另外三个场景:
采购报价对比:用 AI 读取不同格式的报价单(PDF 图片 + OCR),提取关键数字,自动生成汇总对比表。原来人工需要 2 小时,现在 5 分钟。
质检记录查询 RAG:把质检记录导入知识库,可以自然语言查询「XX 供应商近一年的不合格率是多少」「这批零件的历史质量趋势如何」。查询时间从一小时缩短到 30 秒。
合同辅助起草:给销售提供合同起草助手,基于合同模板库 + 客户信息,自动填充初稿,销售只需要确认和微调。起草时间从 2 小时降到 20 分钟。
运营数据(6 个月后)
- 月均 API 费用:约 800 元(随着使用量增加)
- 四个场景合计节省的人工时间:约 180 小时/月(相当于一个兼职员工)
- 员工满意度(问卷):87% 的用户认为 AI 工具提升了工作效率
- ROI(投入产出比):8 个月回本(包含开发成本)
这家 50 人公司没有 GPU,没有数据科学家,用了总计约 30 万的开发投入,加上每月约 800 元的运营成本,实现了真实的业务价值。
成本管控的几个关键决策点
中小企业用 AI,以下几个决策点最影响成本:
1. 模型选型不要追新
每隔几个月就有新模型发布,宣称「比上一代强 30%」。中小企业不需要追新,用一个稳定的中端模型(比如 GPT-4o-mini、Claude Haiku、Qwen-Plus),能满足需求就好。每次换模型都有集成成本和测试成本。
2. 数据在哪里处理
员工数据、财务数据、客户数据——这些数据要慎重考虑是否适合走云端 API。一般的工作效率场景(查找文件、生成报告),问题不大;涉及敏感信息,要么脱敏后调用,要么用本地模型。
3. 知识库的规模要匹配
很多中小企业一上来就想把所有文档都入库,几十 GB 的文件。这不是最佳策略:入库越多,检索精度越受影响,成本也越高。
正确做法:先只入库最高频使用的核心文档(通常是总文档量的 20%),上线后根据用户查询的反馈,逐步扩充。
4. 自研还是用现成 SaaS
对于通用场景(HR 问答助手、客服机器人等),现在有很多 SaaS 产品可以直接配置使用,比自研便宜很多,也更快。
自研的价值在于:高度定制化的场景、需要和现有系统深度集成的场景。如果不是这两种情况,优先考虑 SaaS。
中小企业 AI 落地路径
给中小企业技术负责人的几点建议
第一,不要被「算力」这个话题劝退。 真正的业务价值来自应用层,不是算力层。云端 API 已经很强大,中小企业完全够用。
第二,从员工最痛的点开始,不从最酷的点开始。 「AI 客服」「AI 营销」这些听起来很酷,但落地难度高、效果不确定。「帮销售查报价快 10 倍」这个不酷,但效果实在,容易落地,容易建立信任。
第三,成本要算清楚再扩展。 先跑一个月,看真实的 API 费用,确认在预算范围内,再扩展到更多场景。不要一开始就建大系统。
第四,把员工培训当成正式工作来做。 工具做好了,员工不会用也白搭。中小企业的员工平均技术素养不高,培训要花时间。
第五,找一个内部的 AI 推广大使。 在每个部门找到最热衷于新技术的人,让他们成为 AI 工具的内部推广者,比自上而下的推广效果好很多。
最后,如果你是那家 50 人公司的技术负责人,面对 CEO 的 AI 压力,我的建议是:先做一个小的,做成了,再说大的。
一个两周做成的小系统,给销售省了 80% 的查询时间,比一个做了六个月、功能很全但用的人少的系统,价值大得多。
