121 lines
4.3 KiB
Markdown
121 lines
4.3 KiB
Markdown
|
|
一、 后端设计:多模式分流架构
|
|||
|
|
核心逻辑是根据前端传来的 mode,动态拼接不同的 System Prompt。
|
|||
|
|
|
|||
|
|
1. API 接口定义
|
|||
|
|
Endpoint: /api/names/generate
|
|||
|
|
|
|||
|
|
Method: POST
|
|||
|
|
|
|||
|
|
Params:
|
|||
|
|
|
|||
|
|
keyword: 用户输入的意象(如:清冷、自由)。
|
|||
|
|
|
|||
|
|
mode: 模式枚举 (baby | persona | classic)。
|
|||
|
|
|
|||
|
|
surname: 可选,用户姓氏(用于声韵分析)。
|
|||
|
|
|
|||
|
|
2. 核心 Prompt 引擎逻辑
|
|||
|
|
在后端代码中通过一个 switch 或 Map 来管理 Prompt 模版:
|
|||
|
|
|
|||
|
|
JavaScript
|
|||
|
|
const prompts = {
|
|||
|
|
baby: "你现在是【见素·婴儿起名】导师。风格:端庄、温润。避开所有网红叠字。要求名字具备经得起时间考验的厚重感。",
|
|||
|
|
persona: "你现在是【见素·人设起名】导师。风格:冷冽、张力、赛博。意象可以偏向孤傲、破败或极致的浪漫。",
|
|||
|
|
classic: "你现在是【见素·诗词拾遗】导师。风格:考古学美感。专门寻找《全唐诗》中极少被现代人使用的冷门生僻字词。"
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// 拼接最终发送给 minimax 的消息
|
|||
|
|
const finalPrompt = `${prompts[mode]} \n
|
|||
|
|
当前关键词:${keyword}。${surname ? '姓氏:' + surname : ''} \n
|
|||
|
|
输出格式:严格 JSON 数组...`;
|
|||
|
|
二、 小程序页面设计:从“输入”到“感悟”
|
|||
|
|
我们要把传统的“表单填写”变成一种**“交互仪式”**。
|
|||
|
|
|
|||
|
|
1. 首页 (Input Page):极简选择
|
|||
|
|
视觉: 全白背景,中心是一个极细的输入框。
|
|||
|
|
|
|||
|
|
模式切换: 底部放置三个极简的标签(Tag),选中的标签下方有一个小黑点。
|
|||
|
|
|
|||
|
|
[ 宝宝 ] [ 人设 ] [ 拾遗 ]
|
|||
|
|
|
|||
|
|
交互: * 用户输入关键词后,点击下方的“求名”按钮。
|
|||
|
|
|
|||
|
|
按钮点击后,文字变为“见素感悟中...”,并触发一个类似墨水滴入水中慢慢晕开的动画(CSS 实现)。
|
|||
|
|
|
|||
|
|
2. 卡片页 (Swipe Page):氛围渲染
|
|||
|
|
头部: 展示当前的模式和关键词(如:见素 · 宝宝 · 清冷)。
|
|||
|
|
|
|||
|
|
卡片: * 正面: 巨大的宋体名字,垂直居中。右下方有一个淡淡的灰色印章。
|
|||
|
|
|
|||
|
|
反面: 解读文字不再是段落,而是散文诗般的排版(增加行间距)。
|
|||
|
|
|
|||
|
|
操作栏: 底部只有两个圆圈按钮(× 和 ♥),以及一个“返回”小图标。
|
|||
|
|
|
|||
|
|
三、 前端页面完整代码建议 (index.wxml 增强版)
|
|||
|
|
在你的基础上,增加了模式选择和视觉氛围感。
|
|||
|
|
|
|||
|
|
XML
|
|||
|
|
<wxs module="handler" src="./handler.wxs"></wxs>
|
|||
|
|
|
|||
|
|
<view class="container">
|
|||
|
|
<view class="mode-selector" wx:if="{{!isSwiping}}">
|
|||
|
|
<view
|
|||
|
|
wx:for="{{modes}}"
|
|||
|
|
wx:key="id"
|
|||
|
|
class="mode-item {{activeMode === item.id ? 'active' : ''}}"
|
|||
|
|
bindtap="selectMode"
|
|||
|
|
data-id="{{item.id}}"
|
|||
|
|
>{{item.name}}</view>
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
<view class="input-section" wx:if="{{!isSwiping}}">
|
|||
|
|
<input
|
|||
|
|
class="main-input"
|
|||
|
|
placeholder="输入意象,如:孤鸿、冷月"
|
|||
|
|
bindinput="onInput"
|
|||
|
|
placeholder-style="color: #ccc;"
|
|||
|
|
/>
|
|||
|
|
<button class="submit-btn" bindtap="startGenerate">求名</button>
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
<view class="card-stack" wx:if="{{isSwiping && nameList.length > 0}}">
|
|||
|
|
<view
|
|||
|
|
class="card {{draggingClass}} {{isFlipped ? 'flipped' : ''}}"
|
|||
|
|
wx:key="{{cardKey}}"
|
|||
|
|
bindtap="onFlip"
|
|||
|
|
bindtouchstart="{{handler.touchstart}}"
|
|||
|
|
bindtouchmove="{{handler.touchmove}}"
|
|||
|
|
bindtouchend="{{handler.touchend}}"
|
|||
|
|
>
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
<view class="hint">左滑无感 · 右滑收录</view>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
四、 关键 CSS 变量 (app.wxss)
|
|||
|
|
为了保证“见素”的 Vibe,建议在全局定义这些变量:
|
|||
|
|
|
|||
|
|
CSS
|
|||
|
|
page {
|
|||
|
|
--jiansu-bg: #ffffff;
|
|||
|
|
--jiansu-text: #2c2c2c;
|
|||
|
|
--jiansu-accent: #8e8e8e;
|
|||
|
|
--jiansu-font: "Noto Serif SC", serif; /* 记得引入思源宋体 */
|
|||
|
|
background-color: var(--jiansu-bg);
|
|||
|
|
color: var(--jiansu-text);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.submit-btn {
|
|||
|
|
background: var(--jiansu-text);
|
|||
|
|
color: #fff;
|
|||
|
|
border-radius: 0; /* 极致方正 */
|
|||
|
|
font-weight: 300;
|
|||
|
|
letter-spacing: 4rpx;
|
|||
|
|
margin-top: 60rpx;
|
|||
|
|
}
|
|||
|
|
五、 后期优化的建议
|
|||
|
|
后端缓存: 同一个模式+同一能个关键词,缓存 24 小时。因为 Gemini API 出来的结果会有随机性,但好的意象是有限的。
|
|||
|
|
|
|||
|
|
姓氏平仄: 如果是“宝宝起名”模式,一定要让用户填姓氏。然后在后端加入逻辑:“如果姓氏是平声,第一个名优先选仄声”。
|
|||
|
|
|
|||
|
|
分享海报: 名字一定要足够大,背景一定要留/白。这是「见素」的核心竞争力。
|