geeforesee 发表于 2026-1-31 21:04:02

《2025 DigiKey AI应用创意挑战赛》树莓派5电子宠物AI对话游戏项目

一、项目介绍基于树莓派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    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"]["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轮),降低计算量。

[*]
[*]


页: [1]
查看完整版本: 《2025 DigiKey AI应用创意挑战赛》树莓派5电子宠物AI对话游戏项目