AI项目-Chat-嬛嬛-角色扮演项目

我要开发同款
ai_coder2024年12月26日
12阅读
开发技术前端、python、小程序
授权协议Apache许可

作品详情

### 项目介绍:Chat-甄嬛

#### 1. 本项目解决了什么问题
Chat-甄嬛 是一个基于《甄嬛传》剧本的个性化 AI 聊天机器人项目,旨在通过大模型微调技术,打造一个符合甄嬛角色人设的智能对话系统。它解决了以下问题:
- **角色个性化对话**:通过微调大模型,Chat-甄嬛 能够模仿甄嬛的语气和风格,提供符合角色设定的对话体验,满足用户对个性化 AI 的需求。
- **剧本数据利用**:将《甄嬛传》剧本中的台词和对话转化为训练数据,充分利用现有文本资源,降低了数据收集和处理的成本。
- **开源与可扩展性**:项目开源,开发者可以基于此项目快速构建其他小说或剧本角色的个性化 AI,推动了 AI 技术在文学领域的应用。

#### 2. 本项目的技术选型,技术特点或性能表现
Chat-甄嬛 的技术选型和特点如下:
- **技术选型**:
- **大模型微调**:基于 LLaMA3_1-8B-Instruct 模型,使用 LoRA(Low-Rank Adaptation)技术进行微调,降低了训练成本,同时保持了模型的高性能。
- **数据处理工具**:使用正则表达式和自定义脚本从剧本中提取对话数据,并将其转换为适合模型训练的格式(如 JSON)。
- **训练框架**:采用 PyTorch 和 Hugging Face 的 Transformers 库,结合 Peft 库实现 LoRA 微调,简化了训练流程。

- **技术特点**:
- **角色一致性**:通过微调,模型能够生成符合甄嬛角色设定的对话,语气、用词和情感表达高度一致。
- **多轮对话支持**:模型能够理解上下文,支持多轮对话,增强了交互的自然性和连贯性。
- **高效训练**:LoRA 技术显著减少了训练所需的计算资源,使得在消费级 GPU 上也能完成模型微调。

- **性能表现**:
- **对话质量**:在测试中,Chat-甄嬛 生成的回复与甄嬛的角色设定高度契合,用户满意度较高。
- **训练效率**:在单卡 GPU 上,完成一次微调训练仅需 20-30 分钟,显著降低了时间和硬件成本。

#### 3. 如何快速上手本项目
要快速上手 Chat-甄嬛 项目,可以按照以下步骤进行:
1. **环境准备**:
- 安装 Python 3.12 和 CUDA 12.1(如需 GPU 加速)。
- 安装 PyTorch 2.3.0 及其他依赖库:
```bash
pip install modelscope==1.16.1 transformers==4.43.1 accelerate==0.32.1 peft==0.11.1 datasets==2.20.0
```

2. **克隆项目**:
```bash
git clone https://github.com/KMnO4-zx/huanhuan-chat.git
cd huanhuan-chat
```

3. **数据准备**:
- 将《甄嬛传》剧本数据转换为 JSON 格式,示例格式如下:
```json
[
{"instruction": "小姐,别的秀女都在求中选,唯有咱们小姐想被撂牌子,菩萨一定记得真真儿的——", "input": "", "output": "嘘——都说许愿说破是不灵的。"}
]
```
- 将处理好的数据放置在 `dataset/train/lora/` 目录下。

4. **模型下载与微调**:
- 下载 LLaMA3_1-8B-Instruct 模型:
```python
import torch
from modelscope import snapshot_download
model_dir = snapshot_download('LLM-Research/Meta-Llama-3.1-8B-Instruct', cache_dir='/path/to/cache')
```
- 运行训练脚本:
```bash
python train.py
```

5. **模型测试**:
- 使用训练好的模型进行对话测试:
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
model_path = './LLM-Research/Meta-Llama-3___1-8B-Instruct'
lora_path = './output/llama3_1_instruct_lora/checkpoint-699'
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_path, device_map="auto", torch_dtype=torch.bfloat16, trust_remote_code=True).eval()
model = PeftModel.from_pretrained(model, model_id=lora_path)
prompt = "嬛嬛你怎么了,朕替你打抱不平!"
messages = [{"role": "system", "content": "假设你是皇帝身边的女人--甄嬛。"}, {"role": "user", "content": prompt}]
input_ids = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
model_inputs = tokenizer([input_ids], return_tensors="pt").to('cuda')
generated_ids = model.generate(model_inputs.input_ids, max_new_tokens=512)
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print('皇上:', prompt)
print('嬛嬛:', response)
```

6. **定制与扩展**:
- 如果需要微调其他角色,可以替换数据集并重新训练。
- 欢迎提交 Pull Request,参与项目的改进和扩展。

通过以上步骤,您可以快速上手 Chat-甄嬛 项目,并根据需要定制属于自己的个性化 AI 聊天机器人。
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论