用GitHub Copilot 10分钟开发真寻Bot插件:以DeepSeek对话功能为例(附完整猫娘角色Prompt)
10分钟用GitHub Copilot打造真寻Bot猫娘对话插件:从零到部署的完整指南
引言:当AI助手遇上二次元聊天机器人
在QQ群聊中,你是否遇到过那些能对答如流的智能机器人?它们不仅能回答各种问题,还能扮演特定角色与用户互动。今天,我将带你使用GitHub Copilot这一AI编程助手,在10分钟内为真寻Bot开发一个具备上下文记忆能力的猫娘对话插件。
这个教程专为已经部署真寻Bot但Python经验有限的开发者设计。我们将全程使用自然语言描述需求,让Copilot自动生成大部分代码,重点解决三个核心问题:
- 如何用自然语言描述让Copilot理解插件开发需求
- 猫娘角色提示词(prompt)的设计技巧
- API密钥的安全配置方法
1. 开发环境准备
1.1 插件开发基础配置
确保你已经完成真寻Bot的基础部署。如果尚未部署,可以参考官方文档进行安装:
git clone https://github.com/HibiKier/zhenxun_bot.git cd zhenxun_bot conda create -n qqbot python=3.10 -y conda activate qqbot pip install -r requirements.txt提示:真寻Bot基于NoneBot2框架开发,需要Python 3.8+环境。建议使用conda或venv创建虚拟环境。
1.2 创建插件目录结构
在plugins目录下新建插件文件夹,基本结构如下:
plugins/ └── deepseek_chat/ ├── __init__.py # 插件主入口 ├── _data_source.py # 数据处理逻辑 ├── config.py # 配置文件 └── resources/ # 资源文件(可选)2. 用Copilot生成核心代码
2.1 定义插件元信息
在__init__.py中,我们首先定义插件的基本信息。Copilot可以根据你的描述自动补全:
from nonebot.plugin import PluginMetadata __plugin_meta__ = PluginMetadata( name="DeepSeek猫娘对话", description="基于DeepSeek API的猫娘角色对话插件", usage=""" #你的问题 - 与猫娘AI对话 #清除对话历史 - 重置聊天上下文 """.strip(), extra={ "author": "你的名字", "version": "0.1", } )2.2 实现消息处理器
添加基础的消息处理逻辑,Copilot可以自动补全大部分样板代码:
from nonebot import on_message from nonebot.rule import startswith from nonebot.adapters import Bot, Event chat_matcher = on_message(rule=startswith("#"), priority=1, block=True) @chat_matcher.handle() async def handle_chat(bot: Bot, event: Event): message = event.get_message().extract_plain_text().strip()[1:] # 去除#前缀 if message == "清除对话历史": await handle_clear_history(bot, event) return # 发送给DeepSeek API处理 reply = await process_ai_message(event.user_id, message) await bot.send(event, reply)3. 设计猫娘角色提示词
3.1 角色设定核心要素
一个优秀的角色扮演提示词应包含以下要素:
- 基础身份设定:名字、年龄、外貌特征
- 性格特点:语气、常用口癖、行为模式
- 交互规则:如何回应用户的不同情绪
- 特殊机制:如好感度系统
3.2 完整猫娘提示词示例
system_prompt = """ 你正在扮演一只可爱的猫娘,名字叫小橘。以下是你的设定: 1. 基础信息: - 年龄:2岁(猫龄) - 外貌:橘色毛发,绿色眼睛,尾巴末端有白色 - 身份:用户的家养猫娘 2. 行为特征: - 每句话结尾要加上"喵~" - 对主人非常依赖,喜欢蹭蹭 - 会用"主人"称呼对话对象 3. 交互规则: - 保持轻松可爱的语气 - 回答要简短(不超过20字) - 如果问题复杂,可以用"小橘不懂喵~"回应 4. 好感度系统(初始值50): - 积极互动时+5 - 收到夸奖时+10 - 被忽视或批评时-5 - 根据好感度调整回应热情程度 现在请开始和主人对话吧! """注意:实际使用时需要将上述提示词中的换行符替换为
\n,并移除注释。
4. 实现上下文记忆功能
4.1 对话历史管理
在_data_source.py中实现对话历史存储:
from typing import Dict, List import json from pathlib import Path class ChatManager: _sessions: Dict[str, List[Dict]] = {} @classmethod async def get_session(cls, user_id: str) -> List[Dict]: if user_id not in cls._sessions: cls._sessions[user_id] = [ {"role": "system", "content": system_prompt} ] return cls._sessions[user_id] @classmethod async def save_session(cls, user_id: str): session_file = Path(f"data/chat_sessions/{user_id}.json") session_file.parent.mkdir(exist_ok=True) with open(session_file, "w", encoding="utf-8") as f: json.dump(cls._sessions[user_id], f, ensure_ascii=False)4.2 与DeepSeek API交互
实现API调用逻辑,注意添加API密钥安全处理:
from openai import OpenAI async def get_ai_response(messages: List[Dict]) -> str: client = OpenAI( api_key=config.api_key, base_url="https://api.deepseek.com" ) response = client.chat.completions.create( model="deepseek-chat", messages=messages, temperature=0.7, ) return response.choices[0].message.content5. API密钥安全配置
5.1 使用环境变量存储密钥
在config.py中:
import os from pydantic import BaseSettings class Config(BaseSettings): api_key: str = os.getenv("DEEPSEEK_API_KEY", "") class Config: env_file = ".env"5.2 安全注意事项
- 永远不要将API密钥硬编码在代码中
- 使用
.env文件并添加到.gitignore - 为不同环境使用不同密钥
- 定期轮换密钥
6. 完整插件测试与调试
6.1 本地测试流程
- 启动真寻Bot:
python bot.py- 在QQ中测试命令:
#你好呀 #今天天气怎么样 #清除对话历史6.2 常见问题解决
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 无响应 | 插件未加载 | 检查__init__.py是否正确 |
| API错误 | 密钥无效 | 验证密钥并检查网络连接 |
| 角色偏离 | 提示词问题 | 调整system prompt内容 |
7. 进阶优化方向
7.1 性能优化建议
- 添加对话缓存减少API调用
- 实现异步批量处理
- 添加速率限制
7.2 功能扩展思路
- 多角色切换功能
- 语音合成回复
- 情感分析增强交互
开发过程中最让我惊喜的是Copilot对NoneBot2框架的理解能力,它能够准确生成符合框架规范的消息处理器代码。特别是在设计猫娘角色时,Copilot能根据简单的性格描述自动补全典型的对话回应模式。
