摘要:在AI深入前端的今天,智能输入框已成为提升用户体验和开发效率的关键。本文将以"豆包"等AI助手的输入框为灵感,从零到一,使用Vue 3实现一个能理解用户意图、提供动态模板推荐的智能输入组件。我们将涵盖核心的交互逻辑、Vue 3的组合式API实践,并探讨如何优雅地集成AI能力。
一、 引言:从"打字"到"表达"
你是否注意到,像"豆包"、ChatGPT这样的AI产品,其输入框早已超越简单的文本录入?当你输入"写一封"时,它可能立刻提示你"写一封邮件给客户 "、"写一封辞职信"等选项。
这种基于上下文的动态模板推荐,极大地缩短了用户的表达路径,将输入从"创造"变成了"选择"。这种智能交互模式,正在被广泛应用到各类工具类、客服类和内容生产类Web应用中。
今天,我们将利用Vue 3强大的响应式系统和组件化能力,打造一个属于我们自己的"智能模板输入框"。
二、 核心设计与技术选型
我们的目标是实现一个在用户输入过程中,能实时分析文本、匹配并推荐相关预制模板的输入框。其核心交互流程如下:
要实现这一流程,我们的技术方案如下:
- 框架 :Vue 3 - 使用
<script setup>语法和组合式API,让逻辑更清晰。 - 状态与UI :使用
ref、computed管理响应式数据;用v-model绑定输入框,v-for渲染列表。 - 核心逻辑 :关键在于模板匹配算法。我们将实现一个简单的关键词触发和模糊匹配机制。
三、 步步为营:实现智能输入框
第1步:构建基础组件与状态
我们首先创建一个基础的、支持双向绑定的文本输入区域,并定义管理模板推荐列表和显示状态的核心状态变量。
vue
<template>
<div class="smart-input-container">
<textarea
v-model="userInput"
@input="handleInput"
@keydown.down="selectNext"
@keydown.up="selectPrev"
@keydown.enter="applySelectedTemplate"
placeholder="试试输入 '写一个' 或 '总结一下'..."
class="smart-textarea"
></textarea>
<!-- 模板推荐下拉列表 -->
<div v-if="showSuggestions" class="suggestions-dropdown">
<div
v-for="(template, index) in filteredTemplates"
:key="template.id"
@click="applyTemplate(template)"
:class="{ 'active': index === selectedIndex }"
class="suggestion-item"
>
<div class="template-title">{{ template.title }}</div>
<div class="template-preview">{{ template.contentPreview }}</div>
</div>
</div>
</div>
</template>
<script setup>
import { ref, computed, watch } from 'vue';
// 核心响应式状态
const userInput = ref('');
const showSuggestions = ref(false);
const selectedIndex = ref(0);
// 模拟的模板数据库
const templateLibrary = ref([
{ id: 1, title: '写一封邮件', keywords: ['邮件', 'email'], content: '尊敬的[姓名]:\n\n您好!...\n\n此致\n敬礼!\n[你的名字]' },
{ id: 2, title: '写一份周报', keywords: ['周报', '总结'], content: '本周主要工作:\n1. ...\n2. ...\n下周计划:\n1. ...' },
{ id: 3, title: '生成一段JavaScript代码', keywords: ['代码', 'function', 'js'], content: 'function example() {\n // 在这里写下你的代码逻辑\n}' },
]);
</script>
第2步:实现输入分析与模板匹配逻辑
这是智能的核心。我们需要在用户输入时,分析内容并匹配模板。这里采用一个简单的关键词触发 和内容相关性排序策略。
javascript
// 在 <script setup> 中继续
const triggerKeywords = ['写', '生成', '做一个', '总结', '翻译']; // 触发词
// 计算属性:过滤和排序模板
const filteredTemplates = computed(() => {
if (!userInput.value.trim() || !showSuggestions.value) return [];
const input = userInput.value.toLowerCase();
// 检查是否包含触发词
const hasTrigger = triggerKeywords.some(keyword => input.includes(keyword));
if (!hasTrigger) return [];
// 为每个模板计算一个匹配分数
const scoredTemplates = templateLibrary.value.map(template => {
let score = 0;
// 关键词匹配
template.keywords.forEach(keyword => {
if (input.includes(keyword.toLowerCase())) score += 2;
});
// 标题模糊匹配(简单示例)
if (template.title.toLowerCase().includes(input)) score += 3;
return { ...template, score };
}).filter(item => item.score > 0) // 只保留有分数的
.sort((a, b) => b.score - a.score) // 按分数降序排序
.slice(0, 5); // 取前5个
return scoredTemplates;
});
// 输入处理函数
const handleInput = () => {
const hasContent = userInput.value.trim().length > 0;
const hasMatches = filteredTemplates.value.length > 0;
// 当有输入内容且匹配到模板时才显示推荐
showSuggestions.value = hasContent && hasMatches;
selectedIndex.value = 0; // 重置选择索引
};
第3步:完善键盘导航与模板应用
为了提供流畅的键盘操作体验(类似IDE的自动补全),我们需要处理上下键和回车键。
javascript
// 键盘导航
const selectNext = (e) => {
if (!showSuggestions.value) return;
e.preventDefault();
selectedIndex.value = (selectedIndex.value + 1) % filteredTemplates.value.length;
};
const selectPrev = (e) => {
if (!showSuggestions.value) return;
e.preventDefault();
selectedIndex.value = (selectedIndex.value - 1 + filteredTemplates.value.length) % filteredTemplates.value.length;
};
// 应用模板
const applyTemplate = (template) => {
userInput.value = template.content; // 或更智能的插入逻辑
showSuggestions.value = false;
// 这里可以触发一个事件,通知父组件内容已更新
// emit('template-applied', template);
};
const applySelectedTemplate = (e) => {
if (!showSuggestions.value || filteredTemplates.value.length === 0) return;
e.preventDefault();
applyTemplate(filteredTemplates.value[selectedIndex.value]);
};
四、 进阶思考:与AI能力结合
至此,一个本地的、基于规则的智能输入框已经完成。但真正的"智能"在于接入AI,使其能理解更复杂的意图甚至动态生成模板。
方案一:集成AI API进行意图识别 可以将用户输入的文本发送到云端AI服务(如大模型API),让AI判断用户的意图类别(如"创作邮件"、"生成代码"、"分析数据"),然后根据返回的意图标签从本地模板库中匹配更精准的模板。
方案二:AI实时生成建议 更进一步,可以直接将用户当前输入作为prompt,请求AI实时生成几个可能的续写选项或模板,作为推荐项展示。这实现了从"匹配"到"创造"的飞跃。
工程化提示:
- 防抖与节流 :在调用AI API前,务必对
handleInput函数进行防抖处理,避免频繁请求。 - 加载状态:请求AI时显示加载指示器,提升用户体验。
- 降级策略:当AI服务不可用时,应能无缝降级到本地的关键词匹配模式。
五、 总结
我们通过Vue 3实现了一个具备模板推荐、键盘导航、即时反馈的智能输入框原型。它演示了现代前端框架如何赋能交互创新。
这种模式的价值不仅在于其本身,更在于它代表了一种趋势:前端正在从静态交互走向动态、意图驱动的智能交互。作为开发者,掌握将AI能力无缝融入前端组件的方法,将是构建下一代用户体验的关键技能。
你可以在此基础上,探索更复杂的匹配算法、加入模板变量填充(如[姓名])、或与后端协同实现个人化的模板推荐,使其成为一个真正强大的生产力工具。
希望这篇文章能为你带来启发,欢迎在评论区分享你的实现想法或优化方案!