当前位置: 首页 > news >正文

第 5 周——诗词创作模块后端接口对接

前言

本周承接上周前端基础建设,主要开展诗词创作模块后端接口对接与基础功能联调工作。基于给定的接口规范,完成了智能评分、AI 改写、多轮对话等核心功能的前后端数据打通,实现了三栏联动的基础数据同步。目前核心流程可正常运行,但界面样式较为基础,部分交互细节有待打磨,为下周创作模块界面专项优化做好了准备。

一、本周核心任务

  • 对接创作模块 5 个核心后端接口,替换全部前端模拟数据
  • 实现诗词提交评析、AI 改写、专属对话基础功能
  • 完成历史记录加载、查看与前端删除功能
  • 实现三栏联动数据同步与全局导航跳转
  • 修复联调过程中出现的数据解析、状态同步问题

二、核心功能实现

2.1 统一请求工具与 API 封装

基于 Axios 封装统一请求工具,集成 token 自动携带与基础错误处理;按照后端接口规范,封装创作模块所需的全部 API 函数。

// src/utils/request.js import axios from 'axios' import { ElMessage } from 'element-plus' import router from '@/router' const service = axios.create({ baseURL: import.meta.env.VITE_API_BASE_URL + '/api/poem/learn', timeout: 30000 // AI接口延长超时至30秒 }) // 请求拦截:自动携带token service.interceptors.request.use(config => { const token = localStorage.getItem('token') if (token) config.headers.Authorization = `Bearer ${token}` return config }) // 响应拦截:统一处理错误 service.interceptors.response.use( response => response.data, error => { if (error.response?.status === 401) { ElMessage.error('登录已过期') localStorage.clear() router.push('/login') } else { ElMessage.error(error.response?.data?.message || '请求失败') } return Promise.reject(error) } ) export default service
// src/api/index.js import request from '@/utils/request' // 提交诗词进行智能评价 export const submitPoemForEvaluation = (data) => request({ url: '/create', method: 'post', data }) // AI改写诗词 export const rewritePoem = (data) => request({ url: '/rewrite', method: 'post', data }) // 获取用户会话列表 export const getConversations = (userId) => request({ url: '/conversations', method: 'get', params: { userId } }) // 获取单个会话详情 export const getConversationDetail = (conId) => request({ url: `/conversation/${conId}`, method: 'get' }) // 发送对话消息 export const conversation = (data) => request({ url: '/conversation', method: 'post', data })

2.2 三栏联动核心逻辑

通过计算属性绑定当前选中的历史记录,实现左中右三栏数据的自动同步,这是整个创作页面的核心机制。

<script setup> import { ref, computed, nextTick, onMounted } from 'vue' import { useRouter } from 'vue-router' import { ElMessage } from 'element-plus' import { submitPoemForEvaluation, rewritePoem, getConversations, getConversationDetail, conversation } from '@/api/index' const router = useRouter() const userInfo = JSON.parse(localStorage.getItem('userInfo') || '{}') // 核心状态 const loading = ref(false) const rewriting = ref(false) const currentPoemTitle = ref('') const currentPoem = ref('') const currentActiveId = ref(null) const inputMessage = ref('') const chatScrollRef = ref(null) const historyList = ref([]) // 【核心】三栏联动计算属性 const currentHistory = computed(() => { return historyList.value.find(item => item.id === currentActiveId.value) || null }) // 选择历史记录,同步更新中栏和右栏 const selectHistory = (item) => { currentActiveId.value = item.id currentPoemTitle.value = item.title currentPoem.value = item.poemText nextTick(() => { chatScrollRef.value?.setScrollTop(99999) }) } // 页面加载时获取历史记录 onMounted(() => { loadHistory() }) </script>

2.3 核心功能实现

完成了诗词提交评析、AI 改写、多轮对话三大核心功能的前后端联调。

// 提交诗词进行智能评析 const handleAnalyze = async () => { if (!currentPoemTitle.value.trim()) return ElMessage.warning('请输入诗词标题') if (!currentPoem.value.trim()) return ElMessage.warning('请先输入诗词内容') loading.value = true try { const response = await submitPoemForEvaluation({ userId: userInfo.userId || 1, title: currentPoemTitle.value, content: currentPoem.value }) if (response.code === 200) { const newPoem = response.data // 添加到历史记录 historyList.value.unshift({ id: newPoem.poemId, title: newPoem.title, createTime: new Date().toLocaleDateString(), poemText: newPoem.content, evaluation: newPoem.evaluation, score: newPoem.score, aiContent: newPoem.aiContent, aiExplain: newPoem.aiExplain, chatList: [{ role: 'ai', content: `已完成《${newPoem.title}》的智能评析,评分${newPoem.score}分,有任何问题都可以问我~` }], conId: newPoem.conId }) currentActiveId.value = newPoem.poemId ElMessage.success('智能评析完成') // 清空输入框 currentPoemTitle.value = '' currentPoem.value = '' } } finally { loading.value = false } } // AI改写当前诗词 const handleRewrite = async () => { if (!currentHistory.value) return rewriting.value = true try { const response = await rewritePoem({ poemId: currentHistory.value.id, userId: userInfo.userId || 1 }) if (response.code === 200) { currentHistory.value.aiContent = response.data.aiContent currentHistory.value.aiExplain = response.data.aiExplain ElMessage.success('AI改写完成') } } finally { rewriting.value = false } } // 发送对话消息 const sendChat = async () => { if (!inputMessage.value.trim() || !currentHistory.value) return const userContent = inputMessage.value.trim() inputMessage.value = '' // 先添加用户消息 currentHistory.value.chatList.push({ role: 'user', content: userContent }) nextTick(() => chatScrollRef.value?.setScrollTop(99999)) try { const response = await conversation({ userId: userInfo.userId || 1, poemId: currentHistory.value.id, conId: currentHistory.value.conId, message: { content: userContent, role: 'user' } }) if (response.code === 200) { currentHistory.value.chatList.push({ role: 'ai', content: response.data.latestMessage.content }) } } catch { currentHistory.value.chatList.push({ role: 'ai', content: '网络连接出现问题,请检查网络后重试。' }) } finally { nextTick(() => chatScrollRef.value?.setScrollTop(99999)) } }

三、主要问题与解决

  1. 会话与诗词数据分离存储:后端将会话和诗词数据分开存储,需要先获取会话列表再逐个查询详情。通过循环异步请求并转换为前端统一的数据结构,解决了历史记录加载问题。
  2. AI 接口响应时间过长:大模型接口平均响应时间 5-8 秒,通过添加按钮加载状态、延长接口超时时间至 30 秒,缓解了用户等待体验。
  3. 数据格式不统一:部分返回字段与前端预期不一致,在数据处理阶段做了统一转换,保证页面正常渲染。

四、本周完成情况

  • 基本完成创作模块 5 个核心后端接口对接,主要功能可正常使用
  • 三栏联动布局与数据同步基本实现,点击历史记录可正确加载对应内容
  • 左上角 "首页 + 切换" 导航功能正常,支持模块间快速跳转
  • 修复了 8 个主要的功能性 BUG
  • 存在问题:界面样式较为基础,部分交互反馈不够明显

五、反思与不足

  • 前期与后端沟通不够充分,导致数据转换工作量较大
  • 历史记录逐个加载的方式效率不高,记录较多时可能影响加载速度
  • 对界面细节关注不足,整体视觉效果比较粗糙,缺乏设计感

六、下周计划

  • 针对古诗词创作模块进行界面优化
  • 美化 AI 改写区域,优化改写说明的排版与视觉层次
  • 调整对话界面的气泡样式、间距与字体大小,提升阅读体验
  • 统一按钮、卡片、输入框等基础组件的样式与 hover / 点击反馈
  • 修复测试中发现的小问题,提升页面整体质感
http://www.jsqmd.com/news/927269/

相关文章:

  • 2026年比较好的梁山水处理乳品设备/梁山乳品设备/离心机乳品设备/均质机乳品设备精选推荐公司 - 行业平台推荐
  • AI时代密码安全新策略:从随机密码到密码管理器的全面防御
  • 2026年质量好的共挤膜气泡膜卷/彩色气泡膜卷可靠供应商推荐 - 行业平台推荐
  • 在WSL2的Ubuntu 22.04上,用Intel OneAPI 2024编译VASP 6.3.2的保姆级教程
  • 别再只用Aircrack了!横向评测Kismet与airodump-ng:无线网络扫描工具到底怎么选?
  • 2026年知名的水表箱/SMC水表箱/防冻水表箱优质厂家汇总推荐 - 行业平台推荐
  • 用STM32F103和继电器DIY智能家居:低成本改造台灯与风扇的保姆级教程
  • 从开源哲学到AI伦理:模块化、透明性与协作如何重塑技术未来
  • 2026年义乌本地快递气泡袋/气泡袋/气泡袋定制长期合作厂家推荐 - 行业平台推荐
  • Go 并发模式深度解析:Fan-out/Fan-in 高效处理大规模数据流
  • GD32F470驱动WS2812B灯带:用SPI+DMA实现“零”CPU占用的呼吸灯效果(附完整代码)
  • 无人机避障规划实战:如何用ESDF地图让Fast-Planner飞得更安全?
  • 2026年比较好的三角梅苗木基地/三角梅养殖基地/三角梅种植基地诚信商家榜 - 品牌宣传支持者
  • 2026年评价高的高温衬氟磁力泵/磁力泵品牌厂家推荐 - 品牌宣传支持者
  • mbedtls AES加密的PKCS#7填充详解:为什么你的解密结果总差几个字节?
  • 构建个人增强系统:从可穿戴设备到生物反馈的实践指南
  • [开源] DRG边界病例错分识别与病案首页整改建议系统:面向医院信息科、医保办与病案室的自动化质控工具
  • CRAFT框架:大模型驱动的多机器人协同训练技术解析
  • 2026年江浙沪气泡膜卷/共挤膜气泡膜卷/彩色气泡膜卷/黑色气泡膜卷可靠供应商推荐 - 行业平台推荐
  • 2026年热门的苏州AI算力机房/弱电算力机房热选公司推荐 - 品牌宣传支持者
  • 保姆级教程:用YOLOv8n和BotSORT搞定足球比赛视频的球员与足球追踪(附完整Python源码)
  • 爆火的三个GitHub项目,真香~
  • 2026年知名的浙江机房建设方案/机房建设施工方案榜单优选公司 - 行业平台推荐
  • AI编码时代:如何审查与理解AI生成代码,夺回代码所有权
  • 驾驭AI:从理解大语言模型到构建人机协作工作流
  • 【Gemini安全红皮书首发】:基于MITRE ATTCK框架的5类攻击面测绘+自动化检测脚本(限前500名开发者领取)
  • 别再只用散点图了!用Seaborn的pairplot函数5分钟搞定多变量关系探索(附国赛数据集实战)
  • 告别蓝图依赖:用C++重构你的UE项目核心框架(GameMode篇)
  • 2026年口碑好的挂布台车/多功能台车/浙江隧道台车高口碑品牌推荐 - 品牌宣传支持者
  • 深度解析SingularityNET:去中心化AI市场的技术架构与经济模型挑战