
毕业时很多人都有一些没来得及说出口的话或是给某个人的信或是给自己的寄语。这些情感碎片往往随着时间流逝而消散。但现在借助AI我们可以用一种全新的方式将它们“复活”——不是简单地存储而是让AI理解其中的情感并为你生成一段独特的、带有个人印记的回应或延续。这听起来像是一个创意项目但其背后是AI情感理解、内容生成与小程序轻量化开发的深度结合。它解决的不是一个宏大的技术难题而是一个具体、普遍且充满人情味的痛点如何将私人的、非结构化的情感文本转化为可交互、有温度的数字化体验。本文将从一个具体的参赛项目——“毕业时没寄出的信”小程序出发为你完整拆解其从创意到落地的全流程。你将不仅看到一个小程序的代码更能掌握如何利用现有AI能力如大语言模型为你的应用注入“灵魂”并规避从开发到上线过程中的各种“坑”。无论你是想学习小程序开发、探索AI应用落地还是单纯想做一个有意义的个人项目这篇文章都将提供一条清晰的路径。1. 这个项目真正解决了什么问题在开始写代码之前我们必须想清楚用户为什么需要这个小程序它提供了什么传统方式无法替代的价值很多人会将此归类为“又一个AI生成内容的应用”。但它的核心差异在于输入与输出的强情感关联性。用户输入的不是一个冷冰冰的指令如“写一首关于春天的诗”而是一段承载真实记忆和情感的私人文本。AI的任务不是天马行空地创作而是基于这段文本的语境、情绪和未尽之言进行“共情式”的补全或回应。这带来了几个关键挑战和对应的价值点情感理解的准确性AI能否正确解读文本中的喜悦、遗憾、怀念或祝福这直接决定了生成内容的质量。生成的个性化与安全性输出必须与输入高度相关避免生成通用、空洞的“鸡汤文”。同时必须过滤不当内容因为输入可能涉及复杂的人际关系。体验的轻量与沉浸感用户希望快速进入状态完成“输入-生成-感受”的闭环无需复杂的操作。小程序的“即用即走”特性完美契合。因此本项目要解决的核心问题是如何构建一个技术栈简单、但体验闭环完整的系统让用户的一段私密文字能通过AI的“理解”与“再创作”产生新的情感价值。2. 技术架构与核心组件拆解要实现上述目标我们需要一个前后端分离的典型架构并重点关注AI模块的集成。用户端 (微信小程序) ↓ HTTPS API ↓ 后端服务器 (Node.js/Python/Java等) ↓ 业务逻辑 安全过滤 ↓ AI服务接口 (如 OpenAI API, 国内大模型API) ↓ 生成结果 格式化 ↓ 返回2.1 前端微信小程序功能提供信件输入框、情感标签选择可选、生成按钮、结果展示区、历史记录查看。关键点用户体验界面简洁引导清晰。输入框可支持长文本。安全规范严格遵守微信小程序隐私规范在需要收集用户输入时必须有明确的《用户隐私保护指引》。这是上架审核的硬性要求也是本文开头热词中提到的核心合规点。性能生成过程需要等待必须设计良好的加载状态提示如骨架屏、加载动画。2.2 后端业务逻辑与桥梁功能接收小程序请求预处理用户输入调用AI API处理返回结果管理数据可选。技术选型Node.js (Express/Koa)、Python (Flask/FastAPI)、Java (Spring Boot) 均可。考虑到快速原型和与AI库的良好集成Python是热门选择。核心职责输入清洗与安全过滤检查用户输入是否包含违规、敏感内容。这是保护你的应用和AI服务商的关键步骤。Prompt工程这是项目的灵魂。后端需要将用户输入和可能的选项构造成一个能引导AI生成“情感回应”的优质提示词Prompt。调用AI服务封装对大模型API的调用处理网络异常、超时、额度不足等情况。输出后处理对AI返回的文本进行格式化比如添加落款、调整排版或进行二次安全过滤。2.3 AI服务模型的选择与调教选择OpenAI的GPT系列、国内如百度文心一言、阿里通义千问、智谱AI等均提供API。选择时需考虑成本、响应速度、对中文的理解生成能力、以及是否支持长文本。Prompt工程示例 这是决定生成内容是否“走心”的关键。一个糟糕的Prompt会让AI生成官样文章一个好的Prompt则能引导AI扮演“知心朋友”或“未来的自己”。3. 环境准备与项目初始化我们以“Python Flask后端 微信小程序”的技术栈为例进行演示。你可以根据自身技术背景调整。3.1 后端开发环境准备安装Python确保版本在3.8以上。创建项目目录并初始化虚拟环境mkdir unsent-letter-backend cd unsent-letter-backend python -m venv venv # 激活虚拟环境 # Windows: venv\Scripts\activate # Mac/Linux: source venv/bin/activate安装核心依赖pip install flask flask-cors requestsflask: 轻量级Web框架。flask-cors: 处理跨域请求小程序开发必备。requests: 用于调用外部AI API。3.2 微信小程序环境准备下载并安装 微信开发者工具 。注册微信小程序账号获取AppID。在开发者工具中新建项目选择不使用云开发本文先介绍传统后端模式。3.3 AI服务准备以使用智谱AIGLM的开放API为例因其对中文支持好有免费额度前往 智谱AI开放平台 注册账号。在控制台创建API Key并记录备用。4. 后端核心代码实现4.1 项目结构unsent-letter-backend/ ├── app.py # Flask主应用文件 ├── config.py # 配置文件存放API Key等敏感信息 ├── ai_service.py # AI服务封装模块 ├── requirements.txt # 依赖列表 └── .gitignore # 忽略文件4.2 配置文件config.py重要切勿将API Key等敏感信息提交到代码仓库# config.py class Config: # 从环境变量读取或直接写在这里仅用于测试生产环境务必用环境变量 ZHIPU_API_KEY your_zhipu_api_key_here # 替换为你的真实Key # 可以添加其他配置如模型选择、生成参数等 MODEL glm-4 # 使用的模型名称 MAX_TOKENS 500 # 生成文本的最大长度4.3 AI服务封装ai_service.py这个模块负责与智谱AI API进行通信。# ai_service.py import requests import json from config import Config class ZhiPuAI: def __init__(self, api_keyNone): self.api_key api_key or Config.ZHIPU_API_KEY self.api_url https://open.bigmodel.cn/api/paas/v4/chat/completions self.headers { Authorization: fBearer {self.api_key}, Content-Type: application/json } def generate_response(self, user_input, emotion_toneneutral): 根据用户输入和情感基调生成回复。 :param user_input: 用户输入的信件内容 :param emotion_tone: 情感基调如 nostalgic, encouraging, regretful 等 :return: AI生成的文本 # 核心构建Prompt。这是项目的灵魂所在。 system_prompt 你是一位善于倾听和共情的朋友。用户会给你一段他/她毕业时未曾寄出的信。 请你仔细阅读体会其中的情感可能是遗憾、感谢、祝福或怀念然后以收信人或未来的用户自己的口吻写一封简短而真诚的回信或回应。 回信要贴合原信的情感语言自然、口语化避免说教和空洞的安慰。如果原信是给特定人的回信就以“亲爱的[原信称呼]”开头。 如果原信是写给自己的回信就以“致毕业时的我”开头。字数在200字左右。 user_prompt f原信情感基调{emotion_tone}\n原信内容{user_input} payload { model: Config.MODEL, messages: [ {role: system, content: system_prompt}, {role: user, content: user_prompt} ], max_tokens: Config.MAX_TOKENS, temperature: 0.8, # 控制创造性0.7-0.9之间通常效果较好 } try: response requests.post(self.api_url, headersself.headers, jsonpayload, timeout30) response.raise_for_status() # 检查HTTP错误 result response.json() # 解析返回内容不同API返回结构可能不同 ai_text result[choices][0][message][content].strip() return ai_text except requests.exceptions.RequestException as e: print(fAPI请求失败: {e}) return None except (KeyError, IndexError) as e: print(f解析API响应失败: {e}, 响应内容: {result}) return None # 创建一个全局实例方便调用 zhipu_ai ZhiPuAI()4.4 Flask主应用app.py# app.py from flask import Flask, request, jsonify from flask_cors import CORS from ai_service import zhipu_ai import re app Flask(__name__) # 配置CORS允许微信小程序域名访问。生产环境应指定具体域名。 CORS(app, resources{r/api/*: {origins: *}}) # 开发阶段可用*上线前务必修改 def simple_content_filter(text): 简单的内容安全过滤示例。生产环境应使用更专业的服务或更复杂的规则。 forbidden_patterns [r暴力, r色情, r政治敏感词示例] # 此处仅为示例需完善 for pattern in forbidden_patterns: if re.search(pattern, text): return False return True app.route(/api/generate, methods[POST]) def generate_letter(): 处理生成请求的核心接口 data request.get_json() if not data: return jsonify({code: 400, msg: 请求数据格式错误}) user_text data.get(content, ).strip() emotion data.get(emotion, nostalgic) # 前端传递的情感标签 # 1. 输入校验 if not user_text: return jsonify({code: 400, msg: 信件内容不能为空}) if len(user_text) 1000: # 限制输入长度 return jsonify({code: 400, msg: 信件内容过长}) # 2. 安全过滤 if not simple_content_filter(user_text): return jsonify({code: 403, msg: 内容包含不当信息请修改后重试}) # 3. 调用AI服务 ai_response zhipu_ai.generate_response(user_text, emotion) # 4. 处理结果 if ai_response: # 可选对AI生成的内容也做一次安全过滤 if not simple_content_filter(ai_response): ai_response AI生成了不符合规范的内容请尝试调整原信表述。 return jsonify({ code: 200, msg: success, data: { original: user_text, generated: ai_response } }) else: return jsonify({code: 500, msg: AI服务暂时不可用请稍后重试}) app.route(/api/health, methods[GET]) def health_check(): 健康检查接口用于部署验证 return jsonify({status: ok}) if __name__ __main__: # 生产环境应使用Gunicorn等WSGI服务器而非直接运行 app.run(host0.0.0.0, port5000, debugTrue)5. 微信小程序前端核心实现5.1 项目结构小程序标准结构我们关注以下几个文件pages/ ├── index/ // 首页信件输入与生成页 │ ├── index.js │ ├── index.json │ ├── index.wxml │ └── index.wxss └── history/ // 历史记录页可选 └── ... app.js app.json app.wxss5.2 首页pages/index/index.wxml!-- pages/index/index.wxml -- view classcontainer view classheader text classtitle毕业时没寄出的信/text text classsubtitle让AI替你写下那时的回音/text /view view classinput-section textarea classletter-input placeholder在这里写下你毕业时未曾寄出的信...最多1000字 maxlength1000 value{{inputText}} bindinputonInput auto-height / text classword-count{{inputText.length}}/1000/text /view view classemotion-section text classsection-title选择这封信的主要情感/text view classemotion-tags block wx:for{{emotionTags}} wx:keyvalue view classtag {{selectedEmotion item.value ? tag-active : }} bindtapselectEmotion >// pages/index/index.js Page({ data: { inputText: , emotionTags: [ { label: 怀念, value: nostalgic }, { label: 遗憾, value: regretful }, { label: 感谢, value: grateful }, { label: 祝福, value: blessing }, { label: 鼓励, value: encouraging } ], selectedEmotion: nostalgic, isGenerating: false, showResult: false, generatedText: }, onInput(e) { this.setData({ inputText: e.detail.value }); }, selectEmotion(e) { const value e.currentTarget.dataset.value; this.setData({ selectedEmotion: value }); }, generateLetter() { const that this; const content this.data.inputText.trim(); if (!content) { wx.showToast({ title: 请先写下你的信, icon: none }); return; } this.setData({ isGenerating: true }); // 调用后端API wx.request({ url: https://your-backend-domain.com/api/generate, // 替换为你的后端部署地址 method: POST, data: { content: content, emotion: this.data.selectedEmotion }, header: { content-type: application/json }, success(res) { if (res.statusCode 200 res.data.code 200) { that.setData({ generatedText: res.data.data.generated, showResult: true, isGenerating: false }); // 滚动到结果区域 wx.pageScrollTo({ selector: .result-section, duration: 300 }); } else { wx.showToast({ title: res.data.msg || 生成失败, icon: error }); that.setData({ isGenerating: false }); } }, fail(err) { console.error(请求失败:, err); wx.showToast({ title: 网络请求失败请检查网络, icon: error }); that.setData({ isGenerating: false }); } }); }, saveLetter() { // 这里实现保存到本地缓存或云数据库的逻辑 const letters wx.getStorageSync(unsentLetters) || []; letters.unshift({ original: this.data.inputText, generated: this.data.generatedText, emotion: this.data.selectedEmotion, time: new Date().toLocaleString() }); wx.setStorageSync(unsentLetters, letters); wx.showToast({ title: 保存成功, icon: success }); }, shareLetter() { // 实现分享功能可以生成图片或分享文本 wx.showShareMenu({ withShareTicket: true }); // 更多自定义分享逻辑... }, resetAll() { this.setData({ inputText: , selectedEmotion: nostalgic, showResult: false, generatedText: }); } })5.4 应用配置文件app.json{ pages: [ pages/index/index, pages/history/history ], window: { navigationBarTitleText: 未寄出的信, navigationBarBackgroundColor: #f8f9fa, navigationBarTextStyle: black }, style: v2, sitemapLocation: sitemap.json, requiredPrivateInfos: [ chooseImage ], permission: { scope.userLocation: { desc: 你的位置信息将用于小程序体验 } } }6. 本地运行与联调测试6.1 启动后端服务在unsent-letter-backend目录下# 确保虚拟环境已激活 python app.py看到输出* Running on http://0.0.0.0:5000/ (Press CTRLC to quit)表示启动成功。6.2 配置小程序端API地址由于微信小程序要求使用HTTPS域名本地开发时需要开启不校验合法域名选项。在微信开发者工具中点击右上角「详情」-「本地设置」。勾选「不校验合法域名、web-view业务域名、TLS 版本以及 HTTPS 证书」。将pages/index/index.js中的url暂时改为你的本地后端地址如http://localhost:5000/api/generate进行测试。6.3 功能测试流程在小程序界面输入一段毕业信。选择一种情感标签。点击生成按钮观察网络请求和响应。查看生成的AI回信是否贴合输入的情感和内容。测试保存、分享、重置功能。7. 部署上线与核心注意事项7.1 后端部署服务器购买一台云服务器如腾讯云、阿里云轻量应用服务器。环境在服务器上安装Python、Nginx。进程管理使用Gunicorn或uWSGI来运行Flask应用而不是直接python app.py。反向代理配置Nginx将域名请求转发到Gunicorn服务并配置SSL证书实现HTTPS。环境变量将ZHIPU_API_KEY等敏感信息设置为服务器的环境变量而不是写在代码里。7.2 小程序部署上传代码在开发者工具中点击“上传”。提交审核在微信公众平台提交版本审核。这是最容易卡住的环节。审核要点隐私协议只要小程序涉及收集用户输入如信件内容就必须在《用户隐私保护指引》中明确说明收集、使用和存储信息的目的、方式和范围。这是开头热词中提到的核心合规项必须完善否则会被驳回。类目选择选择“工具-日记/笔记”或“教育-在线教育”等合适类目。内容安全确保你的AI生成内容过滤机制健全避免产生违规内容。服务稳定性确保后端API稳定可访问HTTPS。8. 常见问题与排查思路问题现象可能原因排查方式解决方案小程序无法连接到后端API1. 后端服务未启动或崩溃。2. 网络问题或防火墙限制。3. 小程序未配置合法域名。1. 在服务器上检查后端进程状态 (ps aux | grep python)。2. 使用curl命令测试API接口。3. 检查微信开发者工具控制台Network面板。1. 重启后端服务。2. 检查服务器安全组/防火墙规则开放对应端口。3. 在小程序管理后台将后端域名加入「request合法域名」列表。AI生成的内容质量差、不相关1. Prompt设计不佳。2. 输入文本太短或信息量不足。3. 所选模型不适合该任务。1. 分析AI返回的原始内容看是否理解了指令。2. 尝试不同的情感标签和输入样例。3. 查看AI服务商后台的调用日志和响应。1. 迭代优化system_prompt使其指令更清晰具体。2. 在前端引导用户输入更丰富的细节。3. 尝试更换模型或调整temperature等参数。小程序审核被驳回提示“涉及收集用户信息”未正确配置或说明隐私协议。仔细阅读审核反馈。1. 在小程序管理后台完善《用户隐私保护指引》。2. 在代码中首次需要收集信息时如点击生成按钮前调用wx.requirePrivacyAuthorize接口显式征求用户同意。生成请求超时或失败1. AI API响应慢或不可用。2. 后端到AI服务的网络不稳定。3. 用户输入过长导致AI处理时间久。1. 在后端增加请求超时时间和重试机制。2. 监控AI服务商的状态页。3. 查看后端日志中的错误信息。1. 在前端设置合理的超时提示和加载动画。2. 在后端实现异步任务队列将生成任务放入队列通过WebSocket或轮询通知小程序结果。3. 限制前端输入文本长度。生成的内容偶尔出现不合规语句AI模型本身存在不可控性。定期抽样检查生成内容。1. 在后端simple_content_filter函数中加强过滤规则或接入专业的内容安全API。2. 在Prompt中明确加入限制如“请确保回信内容积极健康符合道德规范”。9. 项目优化与进阶方向一个可用的Demo只是起点要让项目更有价值和竞争力可以考虑以下方向Prompt工程优化这是成本最低、效果最显著的优化点。可以针对不同情感标签设计不同的System Prompt甚至让用户自定义“回信人”角色如“朋友”、“老师”、“未来的自己”。多模态体验除了文字是否可以生成一张符合信件意境的AI图片作为信纸背景或者将最终的回信用TTS文本转语音读出来历史与社交功能完善历史记录页面允许用户对生成的回信进行“再编辑”或“重新生成”。增加简单的社交分享生成精美的海报图片。模型微调Fine-tuning如果拥有大量高质量的“信件-回信”配对数据可以考虑对开源模型进行微调让生成风格更稳定、更个性化。性能与成本优化缓存对相似的输入可以缓存AI的返回结果减少API调用和成本。模型选择根据场景选择性价比更高的模型例如简单的感谢信可以用轻量模型复杂的情感倾诉再用大模型。异步处理如前所述将耗时的AI调用改为异步任务提升用户体验。数据安全与隐私明确告知用户数据如何处理是否存储、存储多久提供数据导出和删除功能。对于特别敏感的内容甚至可以探索端侧小模型或本地计算的可能性。通过这个项目你实践的不只是小程序开发或API调用而是一个完整的“AI赋能轻应用”的产品思维与技术闭环。从洞察用户情感需求到设计技术方案再到处理部署、合规、优化等各种现实问题每一步都是宝贵的全栈成长经验。