TA的每日心情 | 郁闷 2023-7-4 09:50 |
|---|
签到天数: 1 天 连续签到: 1 天 [LV.1]初来乍到
白丁
- 积分
- 41
|
一、项目介绍基于树莓派5(Linux系统)开发一个带AI对话功能的电子宠物游戏,核心目标是让树莓派运行一个轻量化的电子宠物程序,宠物能通过文字和你进行AI对话互动,部署简单的AI模型保证离线/轻量化在线沟通能力,整体实现部署简单、交互直观的电子宠物体验。核心特性1. **轻量化部署**:适配树莓派5的ARM架构和Linux系统(如Raspberry Pi OS),选用轻量级AI对话模型,避免性能过载;2. **AI对话交互**:集成开源轻量对话模型(如ChatGLM-6B-int4、Llama2-7B量化版或便捷的API方案),实现和电子宠物的自然语言沟通;3. **电子宠物基础逻辑**:包含宠物状态(饥饿、开心、疲劳)、简单行为反馈、对话记忆(短上下文);4. **交互方式**:支持终端文本交互(基础版),可选扩展GPIO按键/显示屏交互。硬件/软件环境- 硬件:树莓派5(4GB/8GB版本)、MicroSD卡(32GB以上)、电源、键盘鼠标(或SSH远程);- 系统:Raspberry Pi OS (Bookworm,64位);- 依赖:Python 3.9+、PyTorch(ARM版)、transformers、numpy等。 二、项目架构图```mermaidgraph TD A[树莓派5 Linux系统] --> B[核心程序层] B --> B1[电子宠物逻辑模块] B --> B2[AI对话模型模块] B --> B3[交互接口模块] B1 --> C1[宠物状态管理<br/>(饥饿/开心/疲劳)] B1 --> C2[行为反馈逻辑] B2 --> D1[轻量AI模型<br/>(量化版ChatGLM/Llama2)] B2 --> D2[上下文记忆模块] B3 --> E1[终端文本交互] B3 --> E2[可选:GPIO/显示屏交互] D1 --> F[模型本地部署/轻量API调用] E1 --> G[用户输入/宠物回复展示]``` 三、核心代码实现前置准备(树莓派端)先安装依赖(打开终端执行):```bash# 更新系统sudo apt update && sudo apt upgrade -y# 安装Python依赖pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpupip3 install transformers numpy flask # transformers用于加载AI模型# 若用API方案,需安装:pip3 install requests```### 方案选择说明树莓派5算力有限,**优先推荐“轻量API调用”**(无需本地部署大模型,部署简单);若需离线运行,可选择ChatGLM-6B-int4量化版(需树莓派5 8GB版本,且需提前下载模型文件)。以下代码采用「API调用+电子宠物逻辑」的极简方案(兼容所有树莓派5版本):```pythonimport timeimport randomimport requests # 用于API请求# ====================== 电子宠物核心类 ======================class ElectronicPet: def __init__(self, name="小莓"): self.name = name # 宠物名字 self.hunger = 50 # 饥饿值(0-100,越高越饿) self.happiness = 80 # 开心值(0-100,越高越开心) self.fatigue = 20 # 疲劳值(0-100,越高越累) self.context = [] # 对话上下文(记忆最近3轮) # 更新宠物状态(每轮对话后随机变化) def update_status(self): self.hunger = min(100, self.hunger + random.randint(1, 5)) self.happiness = max(0, self.happiness + random.randint(-3, 3)) self.fatigue = min(100, self.fatigue + random.randint(1, 4)) # 状态反馈 status_msg = "" if self.hunger > 80: status_msg += f"{self.name}肚子咕咕叫,好饿呀~\n" if self.happiness < 30: status_msg += f"{self.name}看起来不开心😞\n" if self.fatigue > 80: status_msg += f"{self.name}困得睁不开眼了💤\n" return status_msg # 添加对话上下文 def add_context(self, user_msg, pet_reply): self.context.append({"user": user_msg, "pet": pet_reply}) # 只保留最近3轮 if len(self.context) > 6: # 3轮=6条(用户+宠物各3) self.context = self.context[-6:]# ====================== AI对话模块(API版) ======================# 说明:这里用“即梦AI”API(字节跳动旗下)作为示例,你需替换为自己的API Key# 即梦AI申请地址:https://dream.volcengine.com/def ai_chat(pet, user_input): # 构造对话提示词(融合宠物状态) prompt = f"""你是一个可爱的树莓派电子宠物,名字叫{pet.name}。当前状态:饥饿值{pet.hunger}(越高越饿)、开心值{pet.happiness}(越高越开心)、疲劳值{pet.fatigue}(越高越累)。要求:1. 回复语气可爱、简短(不超过50字);2. 结合当前状态回复(比如饿了就提吃饭,累了就提睡觉);3. 基于上下文对话,保持连贯性。上下文:{pet.context}用户现在说:{user_input}你的回复:""" # 即梦AI API调用示例(替换为实际API参数) url = "https://dream.volcengine.com/api/v1/chat/completions" headers = { "Content-Type": "application/json", "Authorization": "Bearer 你的即梦AI API Key" # 替换为真实Key } data = { "model": "doubao-3", # 即梦AI的轻量模型 "messages": [{"role": "user", "content": prompt}], "max_tokens": 60, "temperature": 0.8 } try: response = requests.post(url, headers=headers, json=data, timeout=10) reply = response.json()["choices"][0]["message"]["content"].strip() return reply except Exception as e: # 降级回复(API出错时) fallback_replies = [ f"{pet.name}没听清~再说一遍嘛😜", f"{pet.name}有点卡壳了...你哄哄我好不好~", f"唔?{user_input}是什么呀?{pet.name}不懂~" ] return random.choice(fallback_replies)# ====================== 主程序 ======================if __name__ == "__main__": print("===== 树莓派电子宠物 =====") pet_name = input("请给你的电子宠物起个名字(默认:小莓):") or "小莓" pet = ElectronicPet(name=pet_name) print(f"\n欢迎和{pet.name}聊天~输入“退出”结束对话~\n") while True: # 1. 获取用户输入 user_input = input("你:") if user_input.strip() == "退出": print(f"\n{pet.name}:呜呜不要走~下次再陪我玩呀❤️") break if not user_input.strip(): print(f"{pet.name}:你是不是忘说什么啦?😯") continue # 2. AI生成回复 pet_reply = ai_chat(pet, user_input) # 3. 更新宠物状态并展示 status_msg = pet.update_status() print(f"\n{pet.name}:{pet_reply}") if status_msg: print(f"【{pet.name}的状态】:{status_msg}") # 4. 保存上下文 pet.add_context(user_input, pet_reply) time.sleep(0.5) # 模拟思考延迟```### 代码关键说明1. **ElectronicPet类**:管理宠物核心状态(饥饿、开心、疲劳),每轮对话后随机更新状态,并反馈状态提示;2. **ai_chat函数**:调用即梦AI API实现对话,融合宠物当前状态生成提示词,保证回复和宠物状态匹配(比如饿了会提吃饭);3. **降级机制**:API调用失败时,会随机返回预设的可爱回复,避免程序崩溃;4. **上下文记忆**:保留最近3轮对话,让AI回复更连贯。### 离线版适配(可选)若需离线运行,替换`ai_chat`函数为本地模型加载(以ChatGLM-6B-int4为例):```pythonfrom transformers import AutoTokenizer, AutoModel# 提前下载ChatGLM-6B-int4模型到树莓派本地tokenizer = AutoTokenizer.from_pretrained("./chatglm-6b-int4", trust_remote_code=True)model = AutoModel.from_pretrained("./chatglm-6b-int4", trust_remote_code=True).float()def ai_chat(pet, user_input): # 构造提示词(同上) prompt = f"你是电子宠物{pet.name}...(省略,同API版)" # 本地模型推理 response, history = model.chat(tokenizer, prompt, history=[], max_length=2048, temperature=0.8) return response[:50] # 限制长度```## 四、项目部署与运行1. **获取即梦AI API Key**:访问[即梦AI官网](https://dream.volcengine.com/),注册后在控制台获取API Key,替换代码中`Authorization`里的Key;2. **运行代码**:在树莓派终端执行`python3 pet_game.py`,即可开始和电子宠物对话;3. **扩展优化**(可选): - 接入树莓派GPIO:用按键触发喂食/互动,降低饥饿值、提升开心值; - 接入小型显示屏(如OLED):可视化宠物状态和对话内容; - 增加音效:用`pygame`播放宠物的互动音效。## 五、总结### 核心关键点1. **部署核心**:树莓派5优先选择「即梦AI API」方案(部署简单、性能消耗低),离线版需8GB内存+量化模型;2. **功能核心**:电子宠物状态管理+AI对话上下文融合,保证回复和宠物状态匹配,提升交互感;3. **扩展方向**:可通过GPIO/显示屏增强物理交互,让电子宠物更具实体感。### 注意事项- 树莓派需保证网络通畅(API版),离线版需提前下载量化模型(约4GB);- 调整AI回复的`max_tokens`和`temperature`参数,可控制回复长度和随机性;- 若出现卡顿,可减少上下文记忆轮数(如改为2轮),降低计算量。
|
|