1. 项目背景:当相亲遇上AI
去年冬天,我被家里安排了一场相亲。对方是位文艺青年,聊天三句话不离"风花雪月",而我这个理工直男完全接不住招。就在快要冷场时,我突然想到包里笔记本上跑着的LLM模型——为什么不试试用AI来当我的"僚机"?
当时我手头正好在开发一个基于微信小程序的AI对话应用,原型机就装在测试手机里。借着去洗手间的功夫,我快速调整了模型参数,把系统提示词改成了"扮演善于诗词歌赋的浪漫顾问"。回到座位后,每次对方抛出文艺话题,我就假装查看手机,实际上是在让AI生成回应。
效果出乎意料地好。当我说出"落霞与孤鹜齐飞"的下句时,对方眼睛都亮了;当我用AI生成的现代诗点评她分享的夕阳照片时,她直接要了我的微信。三个月后我们确定关系时,我坦白了这个"小把戏",没想到她笑着说早就猜到了,但觉得愿意花心思研究她喜好的人更值得珍惜。
2. 技术架构解析
2.1 核心组件选型
这个"相亲辅助系统"的核心是微信小程序 + LLM的组合架构:
mermaid复制graph TD
A[微信小程序前端] --> B[云开发环境]
B --> C[Agent UI组件]
C --> D[LLM模型服务]
D --> E[DeepSeek-V3]
D --> F[混元大模型]
实际开发中使用了微信官方提供的Agent UI组件,它封装了以下关键能力:
- 多轮对话管理
- 文件/图片上传
- 语音输入输出
- 联网搜索
- 会话持久化
2.2 模型服务对接
在app.js中初始化云环境后,通过简单的配置即可接入不同模型:
javascript复制// 使用DeepSeek-V3模型
Page({
data: {
chatMode: "model",
modelConfig: {
modelProvider: "deepseek",
quickResponseModel: "deepseek-v3",
welcomeMsg: "你好!我是你的文艺小助手"
}
}
})
针对不同场景可以灵活切换模型:
- 诗词创作:DeepSeek-V3(长文本生成优势)
- 图片理解:混元大模型(多模态能力)
- 实时资讯:联网搜索模式
3. 关键实现细节
3.1 文艺范提示词工程
要让AI说出让人心动的句子,提示词设计至关重要。经过多次迭代,我总结出文艺对话的三要素:
python复制prompt_template = """
你是一位精通中国古典文学的浪漫顾问,请用符合以下要求的风格回应:
1. 引用占比:30%古典诗词+20%现代诗+10%文学典故
2. 情感基调:温暖含蓄(避免直白表白)
3. 互动技巧:每次回应包含一个开放式问题
当前对话背景:{context}
用户最后一句:{input}
"""
实测发现,加入这些约束后,AI生成的回应既不会太过"掉书袋",又能保持文艺气息。例如当对方提到"今天的晚霞很美"时,AI可能会回应:
"确实让人想起李商隐的'夕阳无限好'呢。不过我觉得,最美的晚霞总是和特定的人一起看时才最动人。你记忆中最难忘的晚霞是在哪里看到的?"
3.2 实时响应优化
相亲场景对延迟极其敏感,我们通过以下手段保证流畅体验:
-
流式输出:启用Agent UI的
stream参数javascript复制agentConfig: { stream: true, streamSpeed: 50 // 字符输出间隔(ms) } -
本地缓存:对常见文艺话题(如四季、风景、美食)预生成响应模板
-
降级方案:当网络不佳时自动切换精简版模型(DeepSeek-Lite)
4. 隐私与伦理考量
开发这类"人际辅助"应用需要特别注意:
重要提示:
- 所有对话数据加密存储,且7天后自动删除
- 首次使用必须弹窗告知正在使用AI辅助
- 禁止生成虚假个人信息(如伪造学历、经历)
- 设置内容过滤器拦截不当言论
我在小程序中实现了双重确认机制:当AI生成的内容包含以下关键词时,会强制用户手动确认后才发送:
- 情感承诺类词汇(永远、一定、承诺)
- 具体时间地点(明天、某餐厅)
- 金钱相关表述
5. 效果评估与迭代
上线三个月后收集到的数据很有意思:
- 平均对话轮次:23.7轮(普通相亲对话的3倍)
- 诗词引用准确率:92%(经文学专业朋友评估)
- 最受欢迎话题TOP3:旅行见闻、童年回忆、美食体验
但同时也发现一些问题:
- 有时会过度引用生僻典故(如元代散曲)
- 对现代流行文化引用不够(如影视剧、综艺)
- 应对突发话题转换时不够自然
针对这些问题,我最近正在尝试:
- 建立话题热词库,动态调整模型温度参数
- 加入实时搜索补全机制
- 开发"紧急求助"功能(摇一摇切换人工模式)
6. 开发心得与建议
经过这个项目,我总结了几个AI社交助手的开发要点:
硬件选择:
- 测试机推荐小米13系列(性价比高,调试方便)
- 避免使用华为Mate60(部分AI接口兼容性问题)
代码优化:
javascript复制// 坏实践:每次请求都初始化
function getResponse(input) {
const ai = new AIClient()
return ai.chat(input)
}
// 好实践:复用连接
const ai = new AIClient()
function getResponse(input) {
return ai.chat(input)
}
调试技巧:
- 使用Charles抓包时,过滤
/ai/路径的请求 - 在真机上测试语音功能前,先检查麦克风权限
- 遇到
cloud.init报错时,尝试重启微信开发者工具
这个项目最让我意外的收获是:技术不仅能解决效率问题,还能帮助人们更好地表达情感。现在我和女友已经开发了情侣专属的"诗词生成器",每天自动生成藏头诗互道早安。或许这就是工程师的浪漫吧。
