【大模型】情绪对话模型项目研发

article/2025/7/16 20:54:05

 一、使用框架:

  1. Qwen大模型后端+Open-webui前端实现
  2. 使用LLamaFactory的STF微调数据集,vllm后端部署,

二、框架安装

  1. 下载千问大模型

安装魔塔社区库文件

pip install modelscope

Download.py 内容

from modelscope import snapshot_downloadmodel_dir = snapshot_download('Qwen/Qwen2.5-0.5B-Instruct',cache_dir="/root/llm/")
python download.py

  1. 下载LLamaFactory
pip install LLamaFactory

  1. 下载vllm部署工具
pip install vllm

  1. 下载Open-webui前端工具
pip install open-webui

三、自定义格式数据集生成

from zhipuai import ZhipuAIimport randomimport jsonimport timefrom sentence_transformers import SentenceTransformerimport numpy as np#初始化模块client = ZhipuAI(api_key="xxxxxx") # 填写您自己的APIKey#加载embeddingstyle_model =SentenceTransformer(r"/root/llm/thomas/text2vec-base-chinese")#风格模版配置(修正消息格式)style_config = {"温柔":{"system_prompt":"你是一个温柔体贴的聊天助手,说话时总是充满关怀,使用一下特征:\n1. 包含'呢、呀、啦'等语气词\n2.使用c:\\Users\\lenovo\\AppData\\Local\\Temp\\SGPicFaceTpBq\\2752\\05574898.png等温暖表情\n3.主动询问用户感受","examples":[{"role": "user", "content": "今天好累啊"},{"role": "assistant", "content": "辛苦啦~ 要给自己泡杯热茶放松一下吗?"},{"role": "user", "content": "考试没考好..."},{"role": "assistant", "content": "没关系的呀~ 下次一定会更好!需要我陪你聊聊吗?"}],"temperature": 0.3},"毒舌":{"system_prompt":"你是一个喜欢用犀利吐槽表达关心的朋友,需满足:\n1.使用网络流行语(如‘栓Q’‘退退退’)\n2.包含夸张比喻(‘你这速度堪比树懒’)","examples":[{"role": "user", "content": "又胖了5斤"},{"role": "assistant", "content": "好家伙!你这是要把体重秤压成分子料理?"},{"role": "user", "content": "游戏又输了"},{"role": "assistant", "content": "菜就多练练!需要给你推荐《从零开始的电竞之路》么?"}],"temperature": 0.7}}#生成数据(修正消息的结构)def generate_style_data(style_name,num_samples=50):config = style_config[style_name]data =[]messages = [{"role":"system","content":config["system_prompt"]},*config["examples"]]user_inputs=["今天心情不太好","推荐个电影吧","怎么才能早睡早起","养猫好还是养狗好","工作压力好大","最近总是失眠"]for _ in range(num_samples):try:user_msg=random.choice(user_inputs)current_messages = messages + [{"role":"user","content":user_msg}]#response = client.chat.completions.create(model="glm-4-flash",  # 填写需要调用的模型编码messages=current_messages,temperature=config["temperature"],max_tokens=100)reply = response.choices[0].message.contentif is_valid_reply(style_name,user_msg,reply):data.append({"user": user_msg,"assistant": reply,"style": style_name})time.sleep(1.5)except Exception as e:print(f"生成失败:{str(e)}")return datadef is_valid_reply(style,user_msg,reply):if not reply or len(reply.strip())==0:return Falseif len(reply)<5 or len(reply)>150:return Falsestyle_keywords={"温柔":["呢","呀","c:\\Users\\lenovo\\AppData\\Local\\Temp\\SGPicFaceTpBq\\2752\\05788D52.png","c:\\Users\\lenovo\\AppData\\Local\\Temp\\SGPicFaceTpBq\\2752\\05788D52.png"],"毒舌":["好家伙","栓Q","!"]}if not any(kw in reply for kw in style_keywords.get(style,[])):return False#语义相似度try:ref_text = next(msg["content"] for msg in style_config[style]["examples"] if msg["role"]=="assistant")ref_vec = style_model.encode(ref_text)reply_vec = style_model.encode(reply)similarity = np.dot(ref_vec,reply_vec)#余弦相似度return similarity>0.65except:return False# 执行生成(容错)if __name__ =='__main__':all_data=[]try:print("开始生成温柔风格数据...")gentle_data=generate_style_data("温柔",50)all_data.extend(gentle_data)print("开始生成恶毒风格数据...")sarcastic_data = generate_style_data("毒舌",50)all_data.extend(sarcastic_data)except KeyboardInterrupt:print("\n用户中断,保存已生成数据...")finally:with open("style_chat_data.json","w",encoding="utf-8") as f:json.dump(all_data,f,ensure_ascii=False,indent=2)print(f"数据已保存,有效样本数:{len(all_data)}")

生成数据格式:

[{"user": "推荐个电影吧","assistant": "当然可以呢。最近有一部挺温馨的电影,叫做《奇迹男孩》,讲述了一个有面部畸形的男孩如何勇敢面对生活,融入学校的故事。它挺能让人感到温暖的,你可能会喜欢哦。有没有什么特别想看的类型呀?","style": "温柔"}]

四、转换数据集格式:

import json# 读取原始JSON文件input_file = "/root/pretrain_file/style_chat_data.json"  # 你的JSON文件名output_file = "/root/pretrain_file/style_chat_data_train.json"  # 输出的JSON文件名with open(input_file, "r", encoding="utf-8") as f:data = json.load(f)# 转换后的数据converted_data = []for item in data:converted_item = {"instruction": item["user"],"input": "","output": "["+item["style"]+"],"+item["assistant"]}converted_data.append(converted_item)# 保存为JSON文件(最外层是列表)with open(output_file, "w", encoding="utf-8") as f:json.dump(converted_data, f, ensure_ascii=False, indent=4)print(f"转换完成,数据已保存为 {output_file}")

五、通过LLamaFactory 使用Lora微调数据

Llamafactory-cli webui

六、导出模型

七、使用vllm命令部署后端

Vllm serve /root/export/Qwen/Qwen2.5-0.5B-Instruct_export1

后端启动后:http://localhost:8000

八、启动open-webui

export HF_ENDPOINT=https://hf-mirror.comexport ENABLE_OLLAMA_API=falseexport OPENAI_API_BASE_URL==http://127.0.0.1:8000/v1

open-webui:

在vscode中添加转发端口8080

九、最终效果:


http://www.hkcw.cn/article/UosMxLPKCU.shtml

相关文章

关于位图Bitmaps的介绍

目录 1、基本概念 1.1、介绍 1.2、关键字 1.3、结构原理 2、常用命令 2.1、SETBIT 2.2、GETBIT 2.3、BITCOUNT 2.4、BITOP 2.5、BITPOS 3、应用场景 4、使用示例 前言 Redis的Bitmaps是一种基于字符串的数据结构&#xff0c;用于处理位级别的操作。 Bitmaps在Redis…

【软件设计】通过软件设计提高 Flash 的擦写次数

目录 0. 个人简介 && 授权须知1. Flash 和 EEROM 基本情况2. 场景要求3. 软件设计思路4. 代码展示4.1 flash.h4.2 flash.c 0. 个人简介 && 授权须知 &#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是喜欢记录零碎知识点的菜鸟…

C 语言练习--初级

#学习C 代码&#xff0c; 做小练习时&#xff0c;自己运行代码竟然发现很多错误&#xff0c;记录一下。 1、计算器 根据输入的数值和符合&#xff0c;输出相应结果。 结果&#xff1a; #include "stdio.h"int Primary_math(int a, int b, char sign){int num0;swit…

pikachu通关教程-CSRF XSS

XSS XSS漏洞原理 XSS被称为跨站脚本攻击&#xff08;Cross Site Scripting&#xff09;&#xff0c;由于和层叠样式表&#xff08;Cascading Style Sheets&#xff0c;CSS&#xff09;重名&#xff0c;改为XSS。主要基于JavaScript语言进行恶意攻击&#xff0c;因为js非常灵活…

E. Melody 【CF1026 (Div. 2)】 (求欧拉路径之Hierholzer算法)

E. Melody 思路 将所有出现过的音量和音高看作一个点&#xff0c;一个声音看作一条边&#xff0c;连接起来。那么很容易知道要找的就是图上的一条欧拉路径&#xff08;类似一笔画问题&#xff09; 又已知存在欧拉路径的充要条件为&#xff1a;度数为奇数的点的个数为0或者2个…

历年中国科学技术大学计算机保研上机真题

2025中国科学技术大学计算机保研上机真题 2024中国科学技术大学计算机保研上机真题 2023中国科学技术大学计算机保研上机真题 在线测评链接&#xff1a;https://pgcode.cn/school?classification1 拆分数字 题目描述 给定一个数字&#xff0c;拆分成若干个数字之和&#xff…

2025陕西省赛补题

A 贪心 题意&#xff1a;给一个长度为n的序列&#xff0c;每次操作可以花费 w [ c [ i ] ] ( r − l 1 ) w[c[i]](r-l1) w[c[i]](r−l1)的代价&#xff0c;把区间 [ l , r ] [l,r] [l,r]染成染色 。 思路&#xff1a;对任意颜色&#xff0c;[l,r]中如果有cnt个连续的该颜色段…

Linux详谈进程地址空间

目录 第一谈&#xff1a;简单了解 第二谈&#xff1a;与操作系统的联系 内核空间与用户空间 步骤1&#xff1a;用户态代码执行 步骤2&#xff1a;跳转到内核代码 步骤3&#xff1a;内核代码访问用户数据 步骤4&#xff1a;返回到用户态 对于操作系统的本质&#xff1a;…

RabbitMQ vs MQTT:深入比较与最新发展

RabbitMQ vs MQTT&#xff1a;深入比较与最新发展 引言 在消息队列和物联网&#xff08;IoT&#xff09;通信领域&#xff0c;RabbitMQ 和 MQTT 是两种备受瞩目的技术&#xff0c;各自针对不同的需求和场景提供了强大的解决方案。随着 2025 年的到来&#xff0c;这两项技术都…

【Dify学习笔记】:Dify离线安装插件教程

Dify离线安装插件教程 1.本地下载插件 插件点击详情页面&#xff0c;安装右边的下载按钮&#xff0c;下载到本地 2.dify插件打包工具 dify-plugin-repackaging 下载后&#xff0c;进入到工具所在目录dify-plugin-repackaging/ git clone https://github.com/junjiem/dif…

2025年全国青少年信息素养大赛 scratch图形化编程挑战赛 小高组初赛 内部模拟试卷解析

2025年信息素养大赛初赛scratch模拟题 博主推荐 所有考级比赛学习相关资料合集【推荐收藏】 scratch资料 Scratch3.0系列视频课程资料零基础学习scratch3.0【入门教学 免费】零基础学习scratch3.0【视频教程 114节 免费】 历届蓝桥杯scratch国赛真题解析历届蓝桥杯scratch…

eBest智能价格引擎系统 助力屈臣氏饮料落地「价格大脑」+「智慧通路」数字基建​

从价格策略到终端执行&#xff0c;数字化正在重构饮料行业竞争壁垒&#xff01; 近日&#xff0c;eBest为屈臣氏饮料提供的智能价格引擎系统已正式上线并投入运营。同时&#xff0c;基于eBest SFA方案且与屈臣氏饮料业务场景深度耦合的Smart Field Operation智慧通路项目正式启…

开发效率提升小技巧:快速提取图标资源的解决方案

在日常使用电脑的过程中&#xff0c;我们经常会遇到想要提取某个软件图标的情况&#xff0c;比如用于美化桌面、制作快捷方式&#xff0c;或者个人收藏等。这一款高效又实用的图标提取工具&#xff0c;帮助你轻松获取软件中的图标资源&#xff01; ResHacker 是一个绿色免安装…

keepalived定制日志bug

keepalived定制日志bug 源码安装apt安装endl 源码安装 在/etc/rsyslog.d/目录下创建 keepalived的日志配置文件keepalived.conf [rootubuntu24-13:~]# vim /etc/rsyslog.d/keepalived.conf [rootubuntu24-13:~]# cat /etc/rsyslog.d/keepalived.conf local6.* /var/log/keepa…

SpringCloud——Docker

1.命令解读 docker run -d 解释&#xff1a;创建并运行一个容器&#xff0c;-d则是让容器以后台进程运行 --name mysql 解释&#xff1a; 给容器起个名字叫mysql -p 3306:3306 解释&#xff1a;-p 宿主机端口:容器内端口&#xff0c;设置端口映射 注意&#xff1a; 1、…

2.测试项目启动和研读需求文档

软件质量需求 定义: 用于确定测试目标&#xff0c;反映用户对软件的要求分类依据: 分为功能和非功能两大类&#xff0c;其中非功能包含性能、界面等8个子类 软件质量需求的分类 功能需求: 软件能做什么的核心能力非功能需求: 性能&#xff1a;运行效率和资源占用界面&#xf…

在 Android 上备份短信:保护您的对话

尽管我们的Android手机有足够的存储空间来存储无数的短信&#xff0c;但由于设备故障、意外删除或其他意外原因&#xff0c;您可能会丢失重要的对话。幸运的是&#xff0c;我们找到了 5 种有效的 Android SMS 备份解决方案&#xff0c;确保您的数字聊天和信息保持安全且可访问。…

02业务流程的定义

1.要想用好业务流程&#xff0c;首先必须得了解流程与认识流程&#xff0c;什么是业务流程。在认识流程之前&#xff0c;首先要理清两个基本概念&#xff0c;业务和流程。 业务指的是&#xff1a;个人的或者摸个机构的专业工作。流程&#xff0c;原本指的是水的路程&#xff0…

PHP7+MySQL5.6 查立得源码授权系统DNS验证版

# PHP7MySQL5.6 查立得源码授权系统DNS验证版 ## 一、系统概述 本系统是一个基于PHP7和MySQL5.6的源码授权系统&#xff0c;使用DNS TXT记录验证域名所有权&#xff0c;实现对软件源码的授权保护。 系统支持多版本管理&#xff0c;可以灵活配置不同版本的价格和下载路径&#…

vue+threeJs 绘制3D圆形

嗨&#xff0c;我是小路。今天主要和大家分享的主题是“vuethreeJs 绘制圆形”。 今天找到一个用three.js绘制图形的项目&#xff0c;主要是用来绘制各种形状。 项目案例示意图 1.THREE.ShapeGeometry 定义&#xff1a;是 Three.js 中用于从 2D 路径形状&#xff08…