华为云Flexus+DeepSeek征文 | 华为云 ModelArts Studio 赋能高情商AI聊天助手:用技术构建有温度的智能对话体验

前言

华为云 ModelArts Studio 是基于 ModelArts 构建的一站式大模型即服务平台(MaaS),可通过与开源 Agent 框架 Dify.AI 结合来开发对接 AI 聊天助手。

在打造 “高情商” 特性的过程中,华为云ModelArts Studio 的自定义提示词和上下文管理功能堪称点睛之笔。通过预设不同情绪场景的对话模板,结合用户输入的语义分析,AI 能够灵活调整回复的语气与内容。例如,当用户倾诉烦恼时,聊天助手会以温柔共情的语言回应,而在用户咨询信息时,则切换为简洁专业的风格。这种情感化交互的实现,离不开平台强大的算力支持与模型优化能力,在训练过程中,能明显感受到数据处理和模型迭代的高效性。​

具体操作步骤如下:

1、准备工作:

注册登录:前往华为云官网(https://www.huaweicloud.com/),注册并登录账号。

在这里插入图片描述

开通服务:在华为云服务列表中,找到并开通 ModelArts Studio 服务。

在这里插入图片描述

部署平台:推荐用华为云 Flexus X 实例,一键部署 Dify 平台,注意计算规格不要低于 C7.xlarge.2。

在这里插入图片描述

2、使用 ModelArts Studio 部署大语言模型:

2.1 选择定制:登录 ModelArts Studio 平台(目前仅华东二区域支持),在模型推理选择想要使用的大语言模型,如 “DeepSeek-V3-32K”,并点击 “微调” 进行定制。

在这里插入图片描述

在这里插入图片描述

2.2 创建模型:点击左上角 “创建模型”,自定义模型名称,并选择使用推荐权重文件,配置好后点击 “创建”。

2.3 部署模型:点击右上角的 “部署” 按钮,在部署页面中配置服务名称、资源规格和 QPS,配置好后点击 “提交”。当服务状态变为 “运行中” 时,模型部署完成。

DeepSeek-V3-32K

2.4 获取 API 信息:创建 API Key 并保存密钥。(后面需要将python代码中的API进行替换)

在这里插入图片描述

在这里插入图片描述

3、使用 DIFY 编排工具构建 AI 智能体:

3.1 配置模型供应商:点击 Dify 右上角 “设置”,进入模型供应商页签。选择 “OpenAI-API-compatible” 供应商,并填入 ModelArts Studio 中获取的模型名称、API Key 和 API 地址(注意删除最后面的 “chat/completions” 部分)。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2 创建并编排 AI 智能体:点击 “工作室”,选择 “从空白创建”。选择应用类型为 “聊天助手”,并给应用起名字、选择图标和描述。创建完毕后,进入编排界面,填写提示词,可使用内置的提示生成器,并插入自定义变量,还可添加开场白和上下文,必要时可在 “上下文” 内引用知识库。

在这里插入图片描述

3.3 测试并发布 AI 智能体:编排完成后,通过右侧的对话框进行测试。若效果符合预期,选择 “发布” 保存所有编排,即可得到一个完整的 AI 智能体应用。

在这里插入图片描述

4. 项目需要的开发环境

Python:3.8
IDE:Pycharm或vscode
第三方库:① wxauto Version: 3.9.11.17.4 ② zhipuai Version: 2.1.4.20250325

pip install wxauto==3.9.11.17.4 zhipuai -i https://pypi.tuna.tsinghua.edu.cn/simple

在这里插入图片描述

打开您自己的微信
登录微信客户端,选择一个联系人或群聊,默认监听当前窗口

5、高情商AI聊天助手核心代码

from zhipuai import ZhipuAI class ZhipuAIUtil:def __init__(self, api_key):self.api_key = api_keyself.client = ZhipuAI(api_key=self.api_key)def get_answer(self, question):try:response = self.client.chat.completions.create(model="glm-4",messages=[{"role": "user", "content": question},],)return response.choices[0].message.contentexcept Exception as e:error_message = str(e)if "系统检测到输入或生成内容可能包含不安全或敏感内容" in error_message:return "系统检测到输入或生成内容可能包含不安全或敏感内容,请您避免输入易产生敏感内容的提示语,感谢您的配合。"else:return error_message# 使用示例
from zhipuai import ZhipuAI  # zhipuai Version: 2.1.4.20230731class ZhipuAIUtil:def __init__(self, api_key):self.api_key = api_keyself.client = ZhipuAI(api_key=self.api_key)def get_answer(self, question):try:response = self.client.chat.completions.create(model="glm-4",messages=[{"role": "user", "content": question},],)return response.choices[0].message.contentexcept Exception as e:error_message = str(e)if "系统检测到输入或生成内容可能包含不安全或敏感内容" in error_message:return "系统检测到输入或生成内容可能包含不安全或敏感内容,请您避免输入易产生敏感内容的提示语,感谢您的配合。"else:return error_message# 使用示例
if __name__ == '__main__':api_key = "55f67457af44ddaf5f53ab6dcd50b89d.KRnAjz8uOMaiJPbL"zhipu_ai = ZhipuAIUtil(api_key=api_key)while True:question = input("请输入要提问的问题:\n")print(zhipu_ai.get_answer(question if len(question) > 0 else '你好,请你直接写出冒泡排序算法,回答得简短一些'))print()

6、聊天记录日志类Logger.py

import logging
from datetime import datetimeclass LoggerClass:def __init__(self, log_file='my_log.log'):# 创建一个loggerself.logger = logging.getLogger('my_logger')self.logger.setLevel(logging.DEBUG)  # 设置日志级别# 创建一个handler,用于写入日志文件,模式为'a'表示追加self.file_handler = logging.FileHandler(log_file, mode='a')# 创建一个formatter,设置日志格式self.formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s:\n%(message)s\n')self.file_handler.setFormatter(self.formatter)# 给logger添加handlerself.logger.addHandler(self.file_handler)def log_message(self, message, level=logging.INFO):# 记录日志消息if level == logging.DEBUG:self.logger.debug(message)elif level == logging.INFO:self.logger.info(message)elif level == logging.WARNING:self.logger.warning(message)elif level == logging.ERROR:self.logger.error(message)elif level == logging.CRITICAL:self.logger.critical(message)else:self.logger.error(f"Invalid logging level: {level}")def close(self):# 关闭文件处理器self.file_handler.close()# 使用示例
if __name__ == '__main__':# 获取今天的日期today = datetime.now().date()formatted_today = today.strftime('%Y-%m-%d') + ".log"logger_class = LoggerClass(log_file=formatted_today)logger_class.log_message('This is a log message at INFO level.')

7、WeChatListener.py 微信监听类

微信监听类,打开微信客户端后,pycharm中点击运行该文件即可执行程序
自动监听并用AI分析两人的对话

import time
from wxauto import WeChat  # wxauto Version: 3.9.11.17.4
from AIUtil import ZhipuAIUtil
from Logger import LoggerClass
from datetime import datetime"""
自动监听并用AI分析两人的对话
"""class WeChatWindow:def __init__(self, n=1, lens=5, api_key="55f67457af44ddaf5f53ab6dcd50b89d.KRnAjz8uOMaiJPbL", question="",wait_for_oppo=1):self.lens = lensself.wx = WeChat()self.currentWindow = []self.msg5 = []self.loggerClass = LoggerClass(datetime.now().date().strftime('%Y-%m-%d') + ".log")self.aiUtil = ZhipuAIUtil(api_key=api_key)self.wait_for_oppo = wait_for_oppoself.question = questionself.cycle = nself.update_current_window()  # 启动时获取当前聊天记录def update_current_window(self):# 获取当前聊天窗口消息msgs = self.wx.GetAllMessage(savevoice=True)self.currentWindow = []for msg in msgs:if msg.type == 'friend' or msg.type == 'self':self.currentWindow.append(msg.sender + ": " + msg.content)self.msg5 = self.currentWindow[-self.lens:]self.log(".\n".join(self.currentWindow))# def chat_with(self, who): #默认监听当前窗口,不指定对象#     self.wx.ChatWith(who)#     self.update_current_window()def print_last_messages(self):print("=" * 100)print("捕捉到当前5条消息: ")for i in self.msg5:print(i.encode('gbk', 'ignore').decode('gbk'))print()def print_AI_messages(self):strs = ' '.join(self.msg5)ans = self.aiUtil.get_answer(strs + self.question)print("智谱AI:")print(ans.encode('gbk', 'ignore').decode('gbk'))def listen_for_new_messages(self):i = 0lastMsg5 = self.msg5while True:# 获取下一条新消息msgs = self.wx.GetNextNewMessage(savevoice=True)for msgList in msgs.values():for item in msgList:# if item[0] != 'SYS':if item[0] != 'SYS' and item[1] != '[动画表情]' and item[1] != '[图片]':  # 不计入表情包和图片self.currentWindow.append(item[0] + ": " + item[1])self.msg5 = self.currentWindow[-self.lens:]if self.msg5 != lastMsg5:self.log(self.currentWindow[-1])lastMsg5 = self.msg5self.print_last_messages()i += 1if i % self.cycle == 0:  # 每隔cycle个消息AI分析一次if self.wait_for_oppo == 1:if not self.currentWindow[-1].startswith('Self'):  # 只要最后一条消息不是自己的(是别人的),就调用AI回答self.print_AI_messages()else:self.print_AI_messages()time.sleep(0.5)def log(self, msg):self.loggerClass.log_message(msg.encode('gbk', 'ignore').decode('gbk'))if __name__ == '__main__':chat_window = WeChatWindow(n=1,  # 每发1次监听一次lens=5,  # 监听最近5个对话api_key="55f67457af44ddaf5f53ab6dcd50b89d.KRnAjz8uOMaiJPbL",  # 连接国内大模型智谱清言密钥question="以上是一段对话,请你站在Self的角度并且模仿Self的语气(Self是年轻人),替他回复,给出一个参考回答就可以了,请你反驳对面",wait_for_oppo=1)chat_window.print_last_messages()chat_window.print_AI_messages()chat_window.listen_for_new_messages()

8、项目程序启动测试

方法一:pycharm或vscode中运行WeChatListener.py

方法二:或在命令行中输入以下代码

python WeChatListener.py

在这里插入图片描述
在这里插入图片描述

2025-06-08 15:58:47,504 - my_logger - INFO:
Self: 可以.
xxx: 两点半怎么样.
xxx: 我开车载你.
Self: 可以.
Self: 你打个电话给我

总结

最终生成的聊天助手,不仅具备精准的问答能力,更展现出了 “有温度” 的智能交互体验。无论是日常闲聊还是深度对话,它都能敏锐捕捉用户情绪,给出恰到好处的回应。华为云 ModelArts Studio 真正让技术不再冰冷,而是成为连接人与智能情感沟通的桥梁,这次开发经历也让我对 AI 在情感交互领域的应用前景充满期待。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/86884.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/86884.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot属性配置方式

一、Spring Boot属性配置方式。 在编写完成后端程序之前,可以通过yml配置文件键值对的方式修改配置环境,一旦打包完成,再次修改yml配置文件较为麻烦,此时,可以使用以下配置方式: 1.命令行参数方式 …

Webpack原理剖析与实现

1. 整体架构设计 Webpack 5 的整体架构设计包括以下几个核心模块: Compiler:负责整个编译过程,从读取配置、解析模块、生成依赖图,到输出最终的打包结果,主要文件是 lib/Compiler.js 。 Compilation:代表一次编译过程,包括所有模块、依赖关系和编译结果,主要文件是 li…

【Python使用】嘿马python运维开发全体系教程第2篇:日志管理,Linux概述【附代码文档】

教程总体简介:网络设定 学习目标 1、手动设定 2、DHCP自动获取 系统基本优化 一、永久关闭SELinux 1. 永久关闭 二、关闭防火墙 2. 临时启动关闭防火墙 三、设定运行级别为3(命令行模式) 四、修改ssh端口号 ssh服务 一、ssh介绍 二、客户端远…

Hibernate报No Dialect mapping for JDBC type 1111(APP)

文章目录 环境症状问题原因解决方案报错编码 环境 系统平台:Linux x86-64 Red Hat Enterprise Linux 7 版本:4.5 症状 客户应用中报错No Dialect mapping for JDBC type 1111。 问题原因 客户使用Hibernate,实体类的中设置的数据类型与数…

【数据分析】环境数据降维与聚类分析教程:从PCA到可视化

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍教程内容数据预处理主成分分析(PCA)聚类分析可视化分析结果提取簇特征教程目的加载R包数据下载导入数据数据预处理主成分分析(PCA)计算相关矩阵绘制相关矩阵热图执行PCA可视化…

mac 安装python,切换python版本

一、安装多版本的PYTHON 在macOS上,你可以通过Homebrew包管理器安装多个版本的Python 安装Homebrew 首先,如果你的macOS上没有安装Homebrew,需要先进行安装。打开终端(Terminal)并输入以下命令: /bin/b…

AMD图形和计算架构:RNDA

AMD图形和计算架构:RNDA AMD RDNA 是 AMD 为显卡(GPU)设计的 图形和计算架构,专为高性能游戏、实时渲染和并行计算优化。目前已经迭代到 RDNA 3(如 RX 7000 系列显卡),与 NVIDIA 的 RTX 系列和…

ubuntu20.04配置go环境

下载go语言安装包 下载地址: All releases - The Go Programming Language 解压安装包 tar xfz go1.17.linux-amd64.tar.gz -C /usr/local 配置环境变量 编辑配置文件 vim ~/.bashrc # go env export GOROOT/usr/local/go export GOPATH$HOME/software/go ex…

Monorepo+Pnpm+Turborepo

以下是关于 Monorepo pnpm Workspace Turborepo 的详细解析,涵盖核心概念、技术优势、配置实践及协作机制,结合行业最佳实践总结。 一、Monorepo 的核心价值 Monorepo(单一仓库)指多个项目/模块共享同一代码库的管理模式&#…

【Springai】 2指定模型的三种方式(Ollama)

Springai 指定模型的三种方式(Ollama) 在实际开发中,Ollama 支持三种常用的模型指定方式: 1. 从 yml 配置读取默认模型 注意: 这是最基础、最推荐的方式,必须先配置好才能用自动注入的 OllamaChatModel。…

python | numpy小记(四):理解 NumPy 中的 `np.round`:银行家舍入策略

python | numpy小记(四):理解 NumPy 中的 np.round:银行家舍入策略 一、函数签名与参数说明二、“银行家舍入”策略三、基础示例四、与 Python 内建 round 的异同五、使用注意事项六、扩展用法:自定义舍入策略七、总结…

shell脚本定时执行收集Oracle大表的日分区及创建分区本地索引

近期业务上了一张大表,每日新增分区,每日分区数据量为3千万行。根据每日分区创建分区本地索引。同事添加定时收集前一日每日分区统计信息。 1、创建分区本地索引 (分区索引数量需要和分区name数量一致) create index nmld.add_event_occur_time on nmld.esa_event (occur…

使用 Spread.net将 Excel 中的文本拆分为多段

引言: 在 .NET 应用程序中处理 Excel 数据时,常常会碰到需要把文本拆分成多段的情况。例如在数据清洗、数据分析等场景下,将长文本按照特定规则拆分为多段能让数据更便于处理和分析。Spread.NET作为一款强大的 .NET 电子表格组件&#xff0c…

QT实现一个三轴位移台的控制界面

文章目录 0 引入1、圆形转盘2、其他3、引用 0 引入 本来想做一个酷炫的3D位移台控制程序,要有一个类似遥控器手柄那种界面,在网上找了半天也没有,想要有那种效果还要用异性按钮做,迫在眉睫的情况下,使用了自己的方法&…

Java 案例 6 - 数组篇(基础)

数组的平均值、最大(小)值。数组的反转 需求:开发一个程序。假设班级有8名学生,用户可以录入8名学生的Java成绩,成绩类型是小数,并输出平均分,最高分和最低分。 import java.util.Scanner; …

Java外观模式实现方式与测试方法

一、外观模式的实现方式 外观模式的核心是通过封装复杂子系统的调用逻辑,为客户端提供一个统一的简单接口。以下是实现步骤及示例: 定义子系统类 子系统类负责实现具体功能,与外观类解耦。例如,家庭影院系统中的投影仪、音响等组…

《解锁AudioSet:开启音频分析的无限可能》

音频新时代的 “密钥”:AudioSet 登场 在科技飞速发展的今天,音频作为信息传播与交互的关键媒介,早已渗透到现代科技的各个角落。从智能手机中的语音助手,让我们通过简单的语音指令就能查询信息、发送消息,到智能家居系…

50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | ThemeClock(主题时钟)

&#x1f4c5; 我们继续 50 个小项目挑战&#xff01;—— ThemeClock组件 仓库地址&#xff1a;https://github.com/SunACong/50-vue-projects 项目预览地址&#xff1a;https://50-vue-projects.vercel.app/ 使用 Vue 3 的 Composition API 和 <script setup> 语法结…

直播预告丨聊聊Milvus 2.6新功能及背后的开发故事

7 月 1 日晚上 20:00-21:00&#xff0c;Zilliz 视频号直播间&#xff0c;Zilliz 合伙人和研发VP 栾小凡将带来《一步到位&#xff0c;详解 Milvus 2.6 新功能》的分享&#xff0c;带你拆解 Milvus 2.6 四大突破&#xff1a; 降本增效的底层架构开发者生产力拉满的新功能性能不打…

pyenv-win 配置指南​

在 Python 开发过程中&#xff0c;经常会遇到需要使用不同版本 Python 的情况。比如&#xff0c;旧项目依赖某个特定的 Python 版本&#xff0c;而新项目则要求使用更新的版本。这时&#xff0c;版本管理工具就显得尤为重要。pyenv-win就是一款专门为 Windows 系统设计的 Pytho…