Qt桌面应用集成DeepSeek AI:异步通信与上下文管理实战
1. 先搞清楚这个项目到底要解决什么问题看到“Qt硬核项目DeepSeek AI Assistant 客户端知识问答”这个标题很多人的第一反应可能是这不就是用一个Qt界面去调用DeepSeek的API吗如果这么想你可能就错过了这个项目里真正值得投入时间的地方。这个项目的核心不是简单地做一个API调用器。它要解决的是一个更具体、也更实际的问题如何将一个在线的大语言模型LLM能力稳定、高效、可交互地集成到一个本地的桌面应用中并围绕“知识问答”这个场景构建一套完整的客户端体验。这包括了从网络请求、数据处理、界面响应到对话管理、上下文维护、错误处理等一系列工程问题。为什么说它“硬核”因为但凡涉及到桌面客户端与AI服务的集成你至少需要处理好以下几件事异步与响应式网络请求是耗时的你不能让界面卡死。Qt的信号槽机制在这里是核心但如何设计一个清晰、不阻塞的异步流程是第一个坎。上下文管理知识问答往往不是单轮对话。客户端需要有能力维护一个会话历史并在每次请求时智能地携带相关上下文。这涉及到数据的存储、裁剪和组装逻辑。错误处理与用户体验网络会波动API会限流返回结果可能不符合预期。客户端不能一崩了之需要有清晰的错误提示、重试机制和降级处理比如提示用户“网络不佳请重试”。本地化与扩展性所有配置如API密钥、模型选择、代理设置最好能本地保存。同时代码结构应该足够清晰便于未来扩展新的功能比如文件上传解析、历史记录搜索等。所以这个项目适合两类人一是想通过一个完整项目深入学习Qt现代开发尤其是网络、异步、数据绑定的开发者二是希望将DeepSeek等AI能力产品化嵌入到自己工作流或工具中的实践者。它更像一个技术实现的样板间展示了如何用Qt这座“老牌豪宅”来优雅地容纳AI这个“新潮住户”。2. 动手之前环境、依赖与项目结构规划在开始写第一行代码之前把环境理顺能避免后面80%的“玄学”报错。这个项目对环境的依赖比较明确。2.1 核心环境准备Qt版本建议使用Qt 5.15或Qt 6.2及以上版本。这两个是LTS长期支持版本社区资料多稳定性好。别用太老的版本对C17/20标准和新的网络模块支持可能不全。如果你遇到This application failed to start because no Qt platform plugin could be initialized这类错误99%是环境变量没配好或者运行时库缺失和项目代码本身关系不大。编译器Windows上可以用MSVC或MinGWLinux/macOS上用GCC或Clang都可以。确保你的编译器支持C17标准因为我们会用到std::optional、std::variant或Qt的替代品以及结构化绑定等特性这些能让代码更简洁安全。DeepSeek API你需要一个DeepSeek的API密钥。去DeepSeek官网注册账号并在控制台创建API Key。切记这个Key要保存在本地不要硬编码在源码里提交到Git。我们后续会设计一个配置文件。2.2 项目依赖梳理除了Qt核心模块Core,Gui,Widgets,Network外我们主要依赖Qt的网络模块进行HTTP通信以及JSON模块来解析API返回的数据。// 在你的项目文件(.pro)中确保包含以下模块 QT core gui widgets network对于HTTP请求我们将使用Qt的QNetworkAccessManager。它本身是异步的配合信号槽非常适合处理AI API这种高延迟的请求。不需要额外引入像cURL这样的第三方库。JSON处理使用QJsonDocument,QJsonObject,QJsonArray这一套Qt自带的工具链完全够用。2.3 项目目录结构设计一个清晰的结构是项目可维护性的基础。建议在编码前就规划好DeepSeekAssistant/ ├── src/ │ ├── core/ # 核心业务逻辑 │ │ ├── ApiClient.cpp/.h # 封装DeepSeek API请求 │ │ ├── ChatSession.cpp/.h # 管理对话上下文和历史 │ │ └── ConfigManager.cpp/.h # 管理配置API Key, 代理等 │ ├── ui/ # 界面相关类 │ │ ├── MainWindow.cpp/.h │ │ ├── ChatWidget.cpp/.h │ │ └── SettingsDialog.cpp/.h │ └── main.cpp ├── resources/ # 资源文件图标样式表 ├── config/ # 配置文件如config.ini.gitignore忽略 └── DeepSeekAssistant.pro这样的结构将网络逻辑、业务逻辑和界面逻辑分离。ApiClient只负责发送请求和接收原始数据ChatSession负责组织对话消息MainWindow和ChatWidget负责显示和用户交互。任何一部分需要修改或替换都不会牵一发而动全身。3. 核心实现从API封装到界面联动接下来我们进入核心环节。我会按照“先打通链路再完善体验”的顺序来拆解。3.1 封装网络请求层ApiClient这是所有功能的基石。目标创建一个类能够异步调用DeepSeek API并妥善处理成功、失败、超时等各种情况。// ApiClient.h 关键部分 #ifndef APICLIENT_H #define APICLIENT_H #include QObject #include QNetworkAccessManager #include QNetworkReply #include QJsonObject class ApiClient : public QObject { Q_OBJECT public: explicit ApiClient(QObject *parent nullptr); void setApiKey(const QString key); void setBaseUrl(const QString url); // 可配置便于切换或本地代理 public slots: void sendMessage(const QString userMessage, const QJsonArray history QJsonArray()); signals: void responseReceived(const QString replyText); // 成功收到回复 void errorOccurred(const QString errorMessage); // 发生错误 void requestFinished(); // 请求结束无论成功失败 private slots: void onReplyFinished(QNetworkReply *reply); private: QNetworkAccessManager *m_networkManager; QString m_apiKey; QString m_baseUrl; }; #endif // APICLIENT_H实现要点异步设计sendMessage函数触发请求后立即返回不阻塞。结果通过信号responseReceived或errorOccurred传递。请求构造在sendMessage实现中需要按照DeepSeek API文档构造HTTP POST请求。设置正确的Content-Type: application/json头部并在Body中组装包含model,messages(历史新问题),stream(我们这里用false先实现非流式) 等字段的JSON。API Key安全通过Authorization: Bearer your_api_key头部传递。确保Key是从安全的地方如配置文件读取而非硬编码。错误处理在onReplyFinished槽函数中检查QNetworkReply::error()。如果是网络错误超时、连接拒绝发出errorOccurred。如果HTTP状态码是200则解析返回的JSON提取出AI回复的文本内容如果是4xx/5xx如额度不足、参数错误则从JSON中解析错误信息并发出信号。资源管理QNetworkReply对象需要在槽函数中通过reply-deleteLater()妥善删除防止内存泄漏。3.2 实现对话会话管理ChatSessionApiClient只处理单次请求。ChatSession则负责维护一个连贯的对话。// ChatSession.h 关键部分 class ChatSession : public QObject { Q_OBJECT public: struct Message { QString role; // user 或 assistant QString content; QDateTime time; }; explicit ChatSession(QObject *parent nullptr); void setApiClient(ApiClient *client); void sendUserMessage(const QString text); void clearHistory(); const QVectorMessage messageHistory() const; signals: void newMessageAppended(const Message msg); void aiResponseReceived(const QString text); private slots: void onApiResponse(const QString replyText); void onApiError(const QString error); private: ApiClient *m_apiClient; QVectorMessage m_history; // 关键将历史消息转换为API需要的QJsonArray格式 QJsonArray buildMessagesForApi() const; };实现要点上下文组装buildMessagesForApi函数负责将m_history中的Message对象数组转换成API需要的[{role:user, content:...}, {role:assistant, content:...}]格式。这是实现多轮对话的关键。历史长度限制大模型API通常有Token长度限制。一个生产级的ChatSession需要实现历史消息的裁剪策略比如只保留最近N轮对话或者当总Token数预估超过阈值时丢弃最早的几轮。在初期Demo中可以简单限制一个固定的对话轮数如10轮。状态管理在sendUserMessage中先将用户消息加入m_history并触发newMessageAppended信号用于更新UI。然后调用m_apiClient-sendMessage(text, buildMessagesForApi())。在收到AI回复后再将AI消息加入历史。与ApiClient解耦ChatSession通过指针持有ApiClient并通过信号槽与之通信。这样未来如果需要更换AI服务提供商只需替换或适配ApiClientChatSession的逻辑大部分可以保持不变。3.3 构建用户界面MainWindow ChatWidgetUI部分使用Qt Designer设计界面再用代码将逻辑绑定上去是最快最稳的方式。界面元素一个QTextEdit或QPlainTextEdit用于显示对话历史。这里建议用QTextEdit因为它支持富文本可以方便地用不同颜色区分用户和AI的消息。一个QLineEdit或QTextEdit用于输入新消息。一个QPushButton作为发送按钮。一个状态栏或标签用于显示连接状态、加载中等信息。菜单或按钮用于打开设置窗口配置API Key、清空历史等。核心绑定逻辑在MainWindow或ChatWidget的构造函数中创建ChatSession和ApiClient实例并连接信号槽。m_apiClient new ApiClient(this); m_chatSession new ChatSession(this); m_chatSession-setApiClient(m_apiClient); // 连接会话信号到UI更新 connect(m_chatSession, ChatSession::newMessageAppended, this, ChatWidget::appendMessageToView); connect(m_chatSession, ChatSession::aiResponseReceived, this, ChatWidget::appendAiMessageToView); // 连接错误信号 connect(m_apiClient, ApiClient::errorOccurred, this, ChatWidget::showError);当用户点击发送按钮时从输入框获取文本调用m_chatSession-sendUserMessage(text)然后清空输入框。appendMessageToView函数负责将消息对象格式化成HTML或纯文本添加到显示区域。可以给用户消息和AI消息设置不同的样式如背景色、对齐方式。用户体验细节禁用发送按钮在请求发出后、收到回复前禁用发送按钮和输入框防止用户连续发送。显示加载指示器可以在状态栏显示“思考中...”或者使用一个动画图标。错误提示使用QMessageBox::warning或在界面固定位置显示错误标签告知用户具体原因如“网络错误”、“API密钥无效”。4. 进阶优化与生产级考量当基础的通话功能跑通后接下来要考虑的是如何让它更健壮、更好用。这才是区分“玩具”和“工具”的关键。4.1 配置的持久化管理绝不能每次启动都让用户重新输入API Key。使用Qt的QSettings类读写INI文件或注册表或自己解析JSON/XML文件来保存配置。// ConfigManager 示例 void ConfigManager::saveSettings(const AppSettings settings) { QSettings s(MyCompany, DeepSeekAssistant); s.beginGroup(Api); s.setValue(apiKey, settings.apiKey); s.setValue(model, settings.model); s.setValue(baseUrl, settings.baseUrl); s.endGroup(); s.beginGroup(Window); s.setValue(geometry, settings.windowGeometry); s.endGroup(); }需要保存的配置项API Key (加密存储是更优选择)选择的模型 (如 deepseek-chat, deepseek-coder)API 基础URL方便切换官方地址或代理地址代理设置如果需要窗口位置和大小历史消息的保存策略是否保存、保存路径4.2 实现流式响应StreamingDeepSeek API支持流式输出stream: true。这对于提升用户体验至关重要用户可以看到AI一个字一个字“思考”出来的过程而不是长时间等待。实现思路在ApiClient的请求中设置stream: true。连接QNetworkReply::readyRead信号。每次有数据到达时读取并解析。流式响应是Server-Sent Events (SSE)格式数据块以data:开头。解析每个数据块中的JSON提取delta.content字段如果存在。将每次收到的delta.content通过信号实时发送出去。在UI层将这个信号连接到一个槽函数该函数将新内容追加到当前AI消息的显示中而不是等全部完成再替换。挑战流式响应需要更精细的缓冲区和状态管理因为数据是分块到达的。同时UI更新要频繁需注意性能。4.3 更健壮的错误处理与重试网络请求充满不确定性。超时处理给QNetworkRequest设置超时时间并处理QNetworkReply::TimeoutError。指数退避重试对于网络错误或5xx服务器错误可以实现一个简单的重试逻辑每次重试前等待时间加倍。友好的错误映射将API返回的错误码如insufficient_quota转换为用户能看懂的中文提示如“API额度不足请检查账户余额”。请求队列如果用户快速连续发送消息简单的做法是禁用按钮。更复杂的做法是实现一个请求队列保证同一时间只有一个请求在进行后续请求排队。4.4 扩展功能设想一个基本的问答客户端成型后你可以考虑添加以下功能让项目更具价值历史会话管理支持创建多个独立的对话会话并保存到本地数据库如SQLite支持按标题搜索。Markdown渲染AI回复经常包含Markdown格式的代码块、列表等。集成一个轻量级的Markdown渲染组件如QMarkdownTextEdit能极大提升阅读体验。文件上传与上下文理解实现文件选择对话框读取文本文件如PDF、Word需先解析内容并将其作为上下文的一部分发送给AI实现基于文档的问答。代码高亮如果对话涉及编程对AI返回的代码块进行语法高亮。系统托盘与通知让应用最小化到系统托盘并在收到长任务完成时通知用户。5. 常见问题排查与调试心得在开发过程中你几乎一定会遇到下面这些问题。这里提供一个排查顺序能帮你节省大量时间。5.1 网络请求相关问题点击发送后无任何反应也没有错误提示。第一步检查信号槽连接。确认send按钮的clicked()信号是否正确连接到你的发送槽函数。用qDebug()在槽函数开头打印日志。第二步检查API Key和URL。确认ApiClient中的m_apiKey和m_baseUrl已正确设置。建议在发送请求前将组装好的请求URL和Header隐藏Key打印出来看看。第三步使用工具验证。将打印出的请求信息URL、Header、Body复制到curl命令或 Postman 中手动发送一次看API是否正常返回。这能快速定位是代码问题还是配置问题。问题收到错误信号提示“Network Error”或“Host not found”。检查网络连接。检查m_baseUrl是否正确是否包含https://。如果你在公司网络或使用了代理需要在QNetworkAccessManager上设置代理。QNetworkProxy::setApplicationProxy(...)。问题收到HTTP 401或403错误。几乎可以肯定是API Key 错误或未正确传递。检查Authorization头的格式是否为Bearer your_key且Key本身有效、未过期。问题收到HTTP 429错误Too Many Requests。API调用频率超限。需要在代码中实现请求频率控制或者提示用户稍后再试。5.2 界面与数据流相关问题UI在请求时卡住直到回复后才更新。你没有真正实现异步。确认你的ApiClient::sendMessage函数是否立即返回而不是等待网络请求完成。确保耗时操作网络请求在单独的线程或由QNetworkAccessManager异步处理并通过信号槽通知主线程。问题AI的回复内容显示为乱码或包含大量转义字符。API返回的是JSON其中的文本字段可能包含换行符\n或特殊字符。在将JSON字符串显示到UI前可能需要用QString::fromUtf8确保编码正确或者处理一下转义字符。对于HTML显示要注意对,等字符进行转义防止注入。问题多轮对话后AI似乎“忘记”了之前的对话。检查ChatSession::buildMessagesForApi()函数。确保它正确地将m_history中的所有消息包括用户和AI的都按顺序组装到了API请求的messages数组中。检查API的Token限制。如果历史对话太长超过了模型上下文长度你需要实现历史裁剪逻辑。最简单的办法是只保留最近N条消息。5.3 项目构建与部署问题在别人的电脑上运行编译好的程序提示缺少Qt DLL。这是Qt程序部署的经典问题。你需要使用windeployqt(Windows) 或类似工具将程序依赖的Qt库一起打包。或者静态编译Qt库更复杂。问题调试时qDebug()输出看不到。在Qt Creator中确保在“应用程序输出”窗格中查看。如果是命令行启动确保控制台环境正确。关于“硬核”的最终理解这个项目的“硬核”之处不在于使用了多高深的算法而在于它要求开发者具备系统工程思维。你需要考虑模块划分、数据流动、异步处理、错误边界、用户交互、持久化存储等一系列问题并将它们用Qt这套框架有机地组合起来。最终完成的项目是一个结构清晰、运行稳定、体验良好的桌面应用这才是真正有价值的学习成果和开发实践。

相关新闻

2026年AI程序员招聘趋势与核心技术解析

2026年AI程序员招聘趋势与核心技术解析

1. 2026年程序员招聘趋势全景分析2026年的技术招聘市场正在经历一场由AI驱动的结构性变革。根据最新行业调研数据显示,掌握AI核心技术的程序员薪资溢价已达到传统开发岗位的2-3倍,这种差距在自然语言处理、计算机视觉和推荐系统领域尤为显著。市场对AI工…

2026/8/21 4:03:30 阅读更多 →
Sketchfab下载器入门:一个Firefox用户脚本,让3D模型下载从25分钟缩到90秒

Sketchfab下载器入门:一个Firefox用户脚本,让3D模型下载从25分钟缩到90秒

Sketchfab下载器入门:一个Firefox用户脚本,让3D模型下载从25分钟缩到90秒 【免费下载链接】sketchfab sketchfab download userscipt for Tampermonkey by firefox only 项目地址: https://gitcode.com/gh_mirrors/sk/sketchfab 你在Sketchfab上翻…

2026/8/21 4:02:30 阅读更多 →
多智能体协同设计:AI如何重构低保真原型工作流

多智能体协同设计:AI如何重构低保真原型工作流

1. 项目概述:当多智能体遇上低保真原型设计如果你也和我一样,在团队协作设计产品原型时,常常被来回拉扯的沟通成本、难以对齐的设计意图和低效的评审流程搞得焦头烂额,那么“SoftBoard”这个概念的出现,可能会让你眼前…

2026/8/21 4:02:30 阅读更多 →

最新新闻

AI编程助手实战:从环境部署到IDE集成的全流程指南

AI编程助手实战:从环境部署到IDE集成的全流程指南

在实际的软件开发、数据分析、自动化脚本编写等场景中,AI辅助编程工具正逐渐成为提升效率的关键。对于开发者而言,如何快速上手一款强大的AI编程助手,并将其无缝集成到自己的日常工作流中,是当前面临的一个实际问题。本文将以一个…

2026/8/21 5:38:00 阅读更多 →
上海嘉定区认定专精特新中小企业流程是怎样的

上海嘉定区认定专精特新中小企业流程是怎样的

上海市嘉定区专精特新中小企业认定并非独立进行,上海嘉定区专精特新中小企业认定流程主要分为“前置自评”、“线上申报”、“纸质材料报送”和“审核推荐”四个阶段。具体流程及要求如下:一、前置准备:创新型中小企业自评(必备环…

2026/8/21 5:38:00 阅读更多 →
BFS算法解析:解决数字操作类面试题的通用方法

BFS算法解析:解决数字操作类面试题的通用方法

1. 题目背景与需求分析2026年拼多多春招开发岗的第三道编程题"聪明的辰辰"是一道典型的算法设计题目。这类题目在互联网大厂的校招笔试中非常常见,主要考察候选人的算法设计能力、代码实现功底和问题分析能力。题目描述(根据标题推测&#xff…

2026/8/21 5:38:00 阅读更多 →
管网透明化加漏损攻坚,供水监测系统平台如何用数据重塑决策

管网透明化加漏损攻坚,供水监测系统平台如何用数据重塑决策

城市供水系统是维系城市正常运转的“生命线”。在城镇化快速推进的背景下,管网老化、漏损偏高、应急响应滞后等结构性矛盾不断积聚,传统依赖人工经验与分散系统的管理模式日渐吃力。以物联网、大数据、云计算为代表的新一代信息技术,为供水系…

2026/8/21 5:38:00 阅读更多 →
零基础抖音直播间数据抓取指南:3步搭好你的实时弹幕监控工具

零基础抖音直播间数据抓取指南:3步搭好你的实时弹幕监控工具

零基础抖音直播间数据抓取指南:3步搭好你的实时弹幕监控工具 【免费下载链接】DouyinLiveWebFetcher 抖音直播间网页版的弹幕数据抓取(2025最新版本) 项目地址: https://gitcode.com/gh_mirrors/do/DouyinLiveWebFetcher 周五晚上十一…

2026/8/21 5:38:00 阅读更多 →
SDI编码器:专业视频信号到IP流的一站式推流解决方案

SDI编码器:专业视频信号到IP流的一站式推流解决方案

你有没有遇到过这样的场景:一场重要的线上会议、一次大型活动直播,或者一个需要多路信号同时分发的监控中心,手头有来自摄像机、电脑、播放器等多种设备的信号,格式五花八门——HDMI、SDI、网络流……你需要把它们统一编码&#x…

2026/8/21 5:37:00 阅读更多 →

日新闻

机场边检旅客定位系统国产化白皮书:算法、硬件、底座平台全程自主

机场边检旅客定位系统国产化白皮书:算法、硬件、底座平台全程自主

前言随着国家数字基础设施信创替代、关键技术自主可控战略持续深化,口岸智慧安防、边检智能管控领域正全面进入国产化、自主化、安全可控升级周期。当前国内机场边检旅客识别与定位体系长期依赖国外商用视觉算法、进口成像硬件、闭源通用计算平台,存在核…

2026/8/21 0:00:42 阅读更多 →
别再把“数字孪生”当空间智能了!镜像视界揭开四维时空的真正面纱

别再把“数字孪生”当空间智能了!镜像视界揭开四维时空的真正面纱

别再把“数字孪生”当空间智能了!镜像视界揭开四维时空的真正面纱当下数字化建设浪潮中,很多项目将三维可视化、视频贴图叠加的数字孪生等同于空间智能。传统数字孪生更多停留在三维场景复刻,擅长把物理世界“画出来、展示出来”,…

2026/8/21 0:00:42 阅读更多 →
105、车载温度范围-40°C到85°C的影像质量一致性——ISP参数温漂补偿与产线标定策略

105、车载温度范围-40°C到85°C的影像质量一致性——ISP参数温漂补偿与产线标定策略

105、车载温度范围-40C到85C的影像质量一致性——ISP参数温漂补偿与产线标定策略 去年冬天在北方某车厂做A样评审,凌晨四点的黑河试验场,零下三十三度。客户拿了一台冷启动的车,中控屏上倒车影像全是雪花噪点,暗部细节直接糊成一片。我第一反应是sensor温度没上来,暗电流…

2026/8/21 0:00:42 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/21 3:21:33 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/21 0:02:09 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/19 11:55:16 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/20 6:11:08 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/20 21:46:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/21 0:14:22 阅读更多 →