华为云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_key
        self.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.content
        except 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.20230731
 
class ZhipuAIUtil:
    def __init__(self, api_key):
        self.api_key = api_key
        self.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.content
        except 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 datetime
 
class LoggerClass:
    def __init__(self, log_file='my_log.log'):
        # 创建一个logger
        self.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添加handler
        self.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 = lens
        self.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_oppo
        self.question = question
        self.cycle = n
        self.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 = 0
        lastMsg5 = self.msg5
        while 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.msg5
                self.print_last_messages()
                i += 1
                if 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 在情感交互领域的应用前景充满期待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值