“黑马点评”项目AI化改造:集成SmallThinker-3B-Preview实现智能客服与推荐
本文介绍了如何利用星图GPU平台,自动化部署SmallThinker-3B-Preview镜像,为“黑马点评”类项目注入AI能力。该方案能快速构建智能客服系统,实现7x24小时自动回复用户关于商户的咨询,有效提升服务响应速度与用户体验。
“黑马点评”项目AI化改造:集成SmallThinker-3B-Preview实现智能客服与推荐
1. 项目背景与痛点
如果你做过类似“黑马点评”这样的本地生活项目,肯定遇到过这样的场景:用户半夜发消息问“附近哪家烧烤店还开着?”,客服早就下班了,只能第二天回复,用户体验大打折扣。或者,用户浏览了十几家火锅店,最后还是因为选择困难而离开。再比如,商家上传的店铺描述干巴巴的,就一句“本店经营川菜”,根本吸引不了人。
这些问题,说到底就是缺了点“智能”。传统的点评平台,客服是人力密集型,推荐是规则驱动型,内容创作更是依赖商家自己。成本高、效率低、体验还不好。最近我正好在琢磨怎么给这类项目加点“AI料”,试了试SmallThinker-3B-Preview这个模型,发现它挺适合干这几件事:自动回答用户问题、生成个性化的推荐理由、帮商家润色店铺描述。今天就来聊聊,怎么把这个模型集成到你的“黑马点评”里,让项目变得更聪明。
2. 为什么选择SmallThinker-3B-Preview?
市面上模型那么多,为什么挑这个?主要看中它三点:够用、好部署、成本可控。
SmallThinker-3B-Preview是一个30亿参数的中等规模模型,别看参数不算顶级,但在我们这种具体业务场景里,表现很扎实。它理解用户关于商户的提问,比如“有包间吗?”、“人均消费多少?”,能结合你数据库里的商户信息,给出准确的回答。让它根据用户的历史行为生成推荐理由,比如“您常看川菜馆,这家‘蜀香门第’的毛血旺是招牌”,它也能说得有模有样。给商家写描述文案就更不在话下了。
最关键的是,它部署起来相对简单,对硬件要求没那么夸张,用消费级的显卡甚至一些云服务的基础实例就能跑起来,非常适合我们这种追求性价比的工程落地。推理速度也够快,能满足实时交互的需求。说白了,就是花小钱,办大事。
3. 核心功能场景与解决方案设计
我们的目标很明确,就是用AI解决三个具体问题。下面这张表概括了我们要做的事:
| 功能场景 | 用户/商家痛点 | AI解决方案核心 | 预期价值 |
|---|---|---|---|
| 智能客服自动回复 | 咨询响应慢,非工作时间无人应答,重复问题多。 | 模型实时读取商户DB信息,自动生成精准回复。 | 7x24小时在线,秒级响应,释放人力处理复杂问题。 |
| 个性化推荐理由生成 | 推荐列表千篇一律,用户不知为何推荐,转化率低。 | 分析用户历史评论与浏览数据,生成“量身定制”的推荐话术。 | 提升推荐说服力与点击率,增强用户粘性。 |
| 商户特色描述文案生成 | 商家不善文案,店铺描述简陋,缺乏吸引力。 | 基于商户基本信息(品类、招牌菜等),自动生成生动、诱人的描述。 | 提升店铺页面吸引力,辅助商家运营,统一内容质量。 |
整个方案的架构思路也很清晰。我们不会动原有的用户、商户、订单这些核心数据库,而是在旁边新增一个“AI服务层”。这个服务层通过API接收前端的请求,比如用户的提问、需要生成推荐理由的用户ID、需要润色的商户信息,然后调用部署好的SmallThinker模型进行处理,最后把生成的文本结果返回给前端展示。模型本身可以部署在一台独立的服务器上,通过局域网或内部网络与你的主应用通信,保证安全和效率。
4. 分步集成与实践
理论说完了,咱们来点实际的。假设你的“黑马点评”后端是用Spring Boot写的,下面我带你一步步把AI能力接进去。
4.1 环境准备与模型部署
首先,你得有地方跑模型。SmallThinker-3B-Preview可以从主流的模型社区下载。部署方式,我推荐用Ollama,它特别适合我们这种快速集成和测试的场景。
在你的模型服务器上(比如一台有NVIDIA显卡的Linux机器),安装Ollama后,一行命令就能把模型拉下来跑起来:
# 拉取并运行SmallThinker-3B-Preview模型
ollama run smallthinker:3b-preview
运行后,Ollama会在本地启动一个API服务(默认端口11434)。你可以用curl简单测试一下:
curl http://localhost:11434/api/generate -d '{
"model": "smallthinker:3b-preview",
"prompt": "你好,请介绍一下你自己。",
"stream": false
}'
看到返回的JSON里有生成的文本,说明模型服务已经就绪了。这一步的重点是让模型服务先跑起来,能通。
4.2 构建AI服务层
接下来,在你的Spring Boot项目里,新建一个模块或者几个Service类,专门负责和Ollama API打交道。这里的关键是设计好请求的“提示词”(Prompt),让模型明白你要它干什么。
我们先封装一个通用的AI调用客户端:
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Data;
@Component
public class OllamaAIClient {
private final RestTemplate restTemplate = new RestTemplate();
private final String OLLAMA_API_URL = "http://你的模型服务器IP:11434/api/generate";
private final ObjectMapper objectMapper = new ObjectMapper();
@Data
private static class GenerateRequest {
private String model = "smallthinker:3b-preview";
private String prompt;
private boolean stream = false;
}
@Data
private static class GenerateResponse {
private String response;
}
public String generateText(String prompt) {
GenerateRequest request = new GenerateRequest();
request.setPrompt(prompt);
try {
String requestBody = objectMapper.writeValueAsString(request);
String response = restTemplate.postForObject(OLLAMA_API_URL, requestBody, String.class);
GenerateResponse resp = objectMapper.readValue(response, GenerateResponse.class);
return resp.getResponse().trim();
} catch (Exception e) {
e.printStackTrace();
return "抱歉,AI服务暂时不可用。";
}
}
}
这个OllamaAIClient就是咱们和模型对话的桥梁。核心方法generateText接收一段提示词,发给Ollama,再把模型生成的文本拿回来。
4.3 实现智能客服回复
智能客服的核心是:根据用户问题,找到相关商户信息,然后让模型组织语言回复。假设你的商户信息存在Shop表里。
@Service
public class SmartCustomerService {
@Autowired
private ShopMapper shopMapper; // 假设的商户数据访问层
@Autowired
private OllamaAIClient aiClient;
public String autoReply(Long shopId, String userQuestion) {
// 1. 根据shopId查询商户详细信息
Shop shop = shopMapper.selectById(shopId);
if (shop == null) {
return "未找到相关商户信息。";
}
// 2. 构造包含商户信息和用户问题的提示词
String prompt = String.format(
"你是一个本地生活平台的智能客服。请根据以下商户信息,专业、友好地回答用户的问题。\n" +
"商户名称:%s\n" +
"商户品类:%s\n" +
"人均消费:%s元\n" +
"招牌菜:%s\n" +
"营业时间:%s\n" +
"地址:%s\n" +
"用户问题:%s\n" +
"请直接给出回答,不要提及上述信息格式。",
shop.getName(),
shop.getCategory(),
shop.getAvgPrice(),
shop.getSignatureDish(),
shop.getBusinessHours(),
shop.getAddress(),
userQuestion
);
// 3. 调用AI生成回复
return aiClient.generateText(prompt);
}
}
当用户在前端点击某个商户并提问“你们家人均多少?”时,后端调用autoReply(shopId, “你们家人均多少?”)。模型会看到完整的商户信息,然后生成类似“您好,本店人均消费大约在80元左右,具体取决于点餐选择哦。”这样的自然回复。
4.4 实现个性化推荐理由生成
这个功能更有意思,它需要结合用户的历史行为数据。假设我们能拿到用户最近浏览和评论过的店铺ID列表。
@Service
public class PersonalizedRecommendationService {
@Autowired
private UserBehaviorMapper userBehaviorMapper; // 用户行为数据访问
@Autowired
private ShopMapper shopMapper;
@Autowired
private OllamaAIClient aiClient;
public String generateRecommendationReason(Long userId, Long recommendedShopId) {
// 1. 获取用户历史行为(例如最近浏览/评论的5家店)
List<Long> userHistoryShopIds = userBehaviorMapper.selectRecentShopIds(userId, 5);
List<Shop> historyShops = shopMapper.selectBatchIds(userHistoryShopIds);
// 2. 获取被推荐的商户信息
Shop recommendedShop = shopMapper.selectById(recommendedShopId);
// 3. 构造提示词,让模型分析关联并生成理由
StringBuilder historyInfo = new StringBuilder();
for (Shop shop : historyShops) {
historyInfo.append(String.format("- %s (%s)\n", shop.getName(), shop.getCategory()));
}
String prompt = String.format(
"你是一个贴心的本地生活推荐助手。请分析一位用户的历史关注偏好,为他推荐一家新商户,并生成一段亲切、有说服力的推荐理由。\n" +
"用户历史关注过的商户:\n%s\n" +
"现在要推荐的商户信息:\n" +
"名称:%s\n品类:%s\n特色:%s\n人均:%s元\n" +
"请直接生成一段推荐理由(例如:考虑到您常关注X类店铺,这家店的Y特色您可能会喜欢...),语气亲切自然。",
historyInfo.toString(),
recommendedShop.getName(),
recommendedShop.getCategory(),
recommendedShop.getFeatures(), // 商户特色字段
recommendedShop.getAvgPrice()
);
// 4. 调用AI生成推荐理由
return aiClient.generateText(prompt);
}
}
这样,在推荐列表里,每个店铺旁边不再是冷冰冰的“猜你喜欢”,而是一句“看到您最近常看川菜馆,这家‘蜀香门第’的毛血旺堪称一绝,麻辣鲜香,评价很高,推荐您试试!” 转化效果立竿见影。
4.5 实现商户描述文案生成
对于商家端,我们可以提供一个“一键润色”按钮。商家填好基础信息后,点击按钮,AI就能帮忙生成更精彩的描述。
@Service
public class ShopDescriptionService {
@Autowired
private OllamaAIClient aiClient;
public String generateShopDescription(String shopName, String category, String signatureDish, String features) {
String prompt = String.format(
"你是一个资深美食文案写手。请根据以下信息,为一家本地生活商户撰写一段吸引人的、适合在点评APP上展示的特色描述文案。要求文案生动、诱人、突出特色,字数在100字左右。\n" +
"商户名称:%s\n" +
"主营品类:%s\n" +
"招牌菜:%s\n" +
"特色/亮点:%s\n" +
"请直接输出文案,不要有其他说明。",
shopName, category, signatureDish, features
);
String rawResult = aiClient.generateText(prompt);
// 简单清理,确保文案干净
return rawResult.replaceAll("^【.*?】|^文案:|^描述:", "").trim();
}
}
商家输入“老王家烧烤,烧烤,烤羊肉串,食材新鲜、炭火烤制”,AI就能生成:“【老王家烧烤】专注炭火烤制多年,羊肉串是当之无愧的招牌!精选新鲜羊肉,肥瘦相间,在炭火上滋滋作响,撒上秘制香料,外焦里嫩,满口留香。这里是朋友聚会、深夜食堂的绝佳选择,快来感受这份烟火气吧!” 商家可以直接采用或稍作修改,大大提升了运营效率。
5. 效果展示与优化建议
实际跑起来效果怎么样?我简单测试了一下。对于客服回复,模型能准确提取信息并组织成通顺的话,比如用户问“营业到几点?”,它能从“营业时间:10:00-22:00”里提取出“我们营业至晚上10点”。对于推荐理由,它能找到用户历史偏好(如多家日料店)和推荐商户(一家新日料店)的关联,生成“您似乎对日料情有独钟,这家新开的‘樱之味’刺身拼盘备受好评,值得一试。”这样的句子。
当然,一开始可能没那么完美。这里有几个优化的小建议:
提示词工程:这是效果好坏的关键。多调试你的提示词,比如在客服场景里强调“专业、友好”,在推荐场景里强调“亲切、有说服力”,在文案生成里强调“生动、诱人”。清晰的指令能让模型输出更符合你预期的内容。
结果后处理:AI生成的内容偶尔会有多余的引号或格式说明。像上面代码里做的那样,加一段简单的文本清理逻辑,能让最终展示的文案更干净。
服务降级与缓存:模型服务可能不稳定。一定要设置调用超时,失败时返回友好的默认话术,比如“客服正在查询,请稍后”。对于生成类的请求(如推荐理由),可以考虑对相同输入的结果做短期缓存,既能提升响应速度,也能节省算力。
数据质量:AI的发挥很依赖你喂给它的数据。确保商户信息(招牌菜、特色)是准确、丰富的,用户行为数据是真实的,这样生成的推荐和文案才会更精准、更打动人。
6. 总结
给“黑马点评”这类项目加上AI能力,听起来高大上,做起来其实有径可循。通过集成像SmallThinker-3B-Preview这样的轻量模型,我们完全可以用可接受的成本,实现智能客服、个性化推荐和内容生成这些实实在在能提升用户体验和运营效率的功能。
整个过程的核心思路就是“服务化集成”:把AI模型封装成一个独立的服务,通过清晰的API和精心设计的提示词,让它为你的核心业务赋能。代码层面并不复杂,难点更多在于对业务场景的理解和提示词的调优。从实际试用的感受来看,这种改造带来的体验升级是明显的,用户能感觉到平台更“懂我”,商家也觉得更“省事”。
如果你正在维护类似的本地生活或电商项目,不妨从一个小功能点开始尝试,比如先做智能客服的自动回复。跑通一个流程,看到效果,再逐步扩展到其他场景。技术最终要服务于业务,能解决实际痛点的AI集成,才是好的集成。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐


所有评论(0)