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

基于 Vue3 + TypeScript + Element Plus 建立 DeepSeek AI 对话界面(流式输出)

前言

最近在开发一个后台管理系统时,需要集成 AI 对话功能。经过调研,选择了 DeepSeek API 作为后端服务,使用 Vue3 + TypeScript + Element Plus 实现了一个功能完善的对话界面。本文将详细介绍实现过程,包括流式输出、思考模式、对话历史管理等核心功能。

项目概述

本项目实现了一个完整的 DeepSeek AI 对话界面,支持:

️ 技术栈

  • 前端框架: Vue 3.5.13 (Composition API)
  • 类型系统: TypeScript 5.8.3
  • UI 组件库: Element Plus 2.11.9
  • HTTP 客户端: Axios 1.13.2
  • AI SDK: OpenAI SDK 6.10.0 (兼容 DeepSeek API)
  • 构建工具: Vite 6.3.5
  • 样式预处理: Less 4.3.0

项目结构

src/views/index/
├── index.vue      # 主组件(UI 界面)
├── index.ts       # 业务逻辑(API 调用、对话管理)
└── index.scss     # 样式文件

核心功能实现

1. 流式回答实现

流式回答是核心功能之一,让 AI 的回答能够逐字显示,提升用户体验。

1.1 API 调用层(index.ts)
// 聊天 - 支持流式和思考模式
export async function main(
userMessage?: string,
model: string = "deepseek-chat",
options?: {

stream?: boolean;           // 是否流式输出
thinkingMode?: boolean;     // 是否思考模式
onStreamChunk?: (chunk: string) => void;  // 流式数据回调
}
) {

try {

// 如果提供了用户消息,添加到历史
if (userMessage) {

addMessageToHistory({
 role: "user", content: userMessage });
}
// 构建消息数组,包含系统提示和对话历史
const conversation = conversations.find((c) => c.id === currentConversationId);
const historyMessages = conversation?.messages || [];
const messages: Message[] = [
{
 role: "system", content: "You are a helpful assistant." },
...historyMessages,
];
// 流式模式
if (options?.stream) {

const stream = await openai.chat.completions.create({

messages: messages as any,
model: model,
stream: true,
});
let fullContent = "";
for await (const chunk of stream) {

const content = chunk.choices[0]?.delta?.content || "";
if (content
http://www.jsqmd.com/news/293095/

相关文章:

  • VMware ESXi 9.0.2.0 macOS Unlocker OEM BIOS 2.7 Realtek 网卡驱动定制版
  • Z-Image-Turbo日志查看技巧,快速定位运行问题
  • MinerU电商应用场景:商品说明书结构化提取案例
  • 基于MATLAB的三维装箱程序实现(遗传算法+模拟退火优化)
  • 在 IDEA 中,GIT 合并分支时选择远程的 dev 分支和本地的 dev 分支,有区别吗
  • MinerU vs PDF-Extract-Kit实战对比:多模态提取谁更准?详细步骤
  • 电商设计必备!Qwen-Image-Layered轻松替换商品背景和文字
  • 颠覆性系统优化工具:Windows Cleaner终极解决方案
  • PyTorch轻量化模型在树莓派5人脸追踪中的应用指南
  • 做二手物品估价小程序,输入物品品类,使用时长,新旧程度,参考同平台二手成交数据,自动给出合理报价区间,标注定价技巧。
  • 3步精通专业级游戏存档编辑:从原理到实践的完整指南
  • 全面解析SEO从零起步的实用技巧与策略
  • Qwen vs Llama3轻量模型对比:谁更适合低成本AI对话?实战评测
  • 自媒体配图神器!Z-Image-Turbo一键生成吸睛封面
  • Scilab介绍,和Octave,Matlab比较
  • 系统清理工具全攻略:从磁盘告急到电脑重生的完整指南
  • AAAI 2026 最佳论文公布!华人占3篇!图灵奖得主Bengio斩获大奖!
  • 边缘设备部署BERT:树莓派上运行中文语义填空系统实测
  • 传统vsAI:矩阵求逆效率对比实验报告
  • IQuest-Coder-V1-40B-Instruct环境部署:Conda配置详细步骤
  • 探索文化符号字体库:解锁开源字体工具的四大维度
  • 传统计算vs2828理论估:效率提升对比分析
  • 破解数字枷锁:解锁音频自由的三大秘密武器
  • Gitee vs GitHub:国内开发者的效率对比
  • 演讲回顾|Apache Pulsar x AI Agent:智能系统消息基础架构
  • MinerU快速入门指南:test.pdf示例运行全流程详解
  • C盘又满了?这款清理工具让空间翻倍
  • 解读机制论视角下的机理、机制与工业时序模型的关系
  • Qwen3-Embedding-4B省钱部署:云实例选型优化实战
  • 开发者入门必看:5个高效部署Qwen儿童图像模型的实用技巧