- 
安装依赖 pip install -r requirements.txt 
- 
配置环境变量 - 重命名或者复制 .env.example文件为.env:
- 编辑 .env文件,填入你的API密钥:ZHIPU_API_KEY=your_actual_api_key_here ``
 👀 .env文件包含敏感信息,已被添加到.gitignore中,不会被提交到版本控制系统。
- 重命名或者复制 
- 
运行项目 python src/GameMaster.py 
- 
摄像头输入模块 (Camera Input Module - OpenCV)【通过 cv2.VideoCapture(0) 初始化默认摄像头。在一个循环中,使用 cap.read() 逐帧捕获图像】,可考虑基本的图像预处理,若VLM有特定要求。 
- 
依据硬件配置,配置开发环境并选择准确率高反应速度较快的的VLM模型实现物体识别【大模型API考虑Qwen2.5-Omni、Seed1.5-VL、GPT、Gemini 1.5 Pro或者预训练模型进行手中物体识别YOLOv8n/RT-DETR】 
- 
实现视频流的物体识别,提高识别的准确率和速度 
- 
将VLM识别出的物品名称添加到一个 identified_item变量中 
- 
实现NPC状态管理逻辑:定义 npc_stage 变量和 stage_triggers 字典。创建函数检查 identified_item是否满足当前阶段的触发条件并更新 npc_stage。 
- 
生成NPC Prompt:创建generate_npc_prompt 函数,根据 npc_stage 和identified_item返回简单的NPC对话字符串。 
- 
[x] 
- 
提交物品的时候,在chatbot里面展示物品图片 而不是展示 提交物品 x 
- 
完善chatbot流中的接口 
- DONE by 鲁叔, 参考了王莹莹的原始代码 调通一个openai形式的response
- (DONE by 鲁叔) 在gamemaster引入config配置(一个gamemaster载入一个yaml文件)
- (DONE by 鲁叔) 准备一堆物品照片,确定gamemaster的物品载入格式
- (DONE by 鲁叔) gradio和GM增加图片上传接口
- 鲁叔, 完成剧情内物体 调试物品在chatbot的submit功能
- 剧情外物体在chatbot的submit
- (DONE by 鲁叔)在yaml中定义物品-台词的对应关系
- 鲁叔 fix prompt, 鲁叔 fix解析 DONE by 王莹莹 实现根据prompt 物品 生成台词的函数
- [x](DONE by 鲁叔) 接通chat history - 鲁叔
- VLM接口识别物体
- 调通语音生成
- 装修界面
- 每个阶段都可以看到所有物品,感觉有点乱,我们可以限制每个阶段看到的物品不一样
- 目前每个物品的台词暂时是单一的 不受到阶段的控制, 可以之后升级定义为 支持某个阶段 某个物品的台词(单阶段响应)
当前gradio_interface.py的代码可以顺利运行
但是在全局使用了game_master这个变量,使得多个用户使用的时候,会发生串扰
这个时候我希望使用gradio的state功能,在gradio_with_state.py中,实现一个不会串扰版本的gradioUI
使用VLM的接口
输入一个图片 输出一个物品名称
可选参数 剧情内 candidate 物品s list of string 双节棍
如果有canddates物品, 先输出物品名
- Captions 详细描述图像
- Major_Object 物品名称
- echo 重复字符串: 我将检查candidates中的物品,如果major_object有同义词在candidates中,则修正为candidate对应的名字,不然则保留major_object
- fixed_object_name:
cond本身是一个set,展示任何set中的物品 cond就算满足 进入阶段可以设置多个cond,多个cond必须同时满足
道士,一阶段只是算命
cond1:展示任意修仙物品 进入二阶段
二阶段的道士传授了你功法,但是要你收集五行灵物,土属性的他已经有了,让你先去身边找个金属性灵物
cond1:展示任意金属性灵物 进入三阶段
三阶段 道士让你找一个木属性和一个水属性灵物
cond1:展示任意木属性灵物 cond2:展示任意水属性灵物
四阶段 道士帮你炼制筑基丹,并答应解答你修仙相关的问题
- 提供至少一套故事,最好有两组
- 至少两个阶段的system prompt,最好有三个阶段
- 物品列表和对应的图片
- 物品对应的台词
- system prompt阶段和物品之间的关系,提交什么物品之后进下一个阶段
核心组件与流程:
- 
视觉语言模型 (VLM) 集成: 
- 
物品识别与存储: 
- 
NPC状态管理: - NPC的状态可以用一个变量表示(例如 npc_stage,初始可能是“阶段1”)。
- 需要定义哪些物品是“关键道具”,以及这些道具会如何改变NPC的状态。例如,一个字典可以存储这种映射关系:{'道具A': '阶段2', '道具B + 道具C': '阶段3'}。
 
- NPC的状态可以用一个变量表示(例如 
- 
NPC Prompt (行为/对话) 生成: - NPC的行为或对话(prompt)将是一个函数,它的输入是当前 identified_item集合和npc_stage。
- 根据这些输入,函数会生成相应的NPC反应。
 
- NPC的行为或对话(prompt)将是一个函数,它的输入是当前 
关键考虑点:
- 鲁棒性: 真实环境中,光照、角度、物品遮挡等都会影响VLM识别效果,需要考虑如何提高系统的鲁棒性。
- 用户交互: 如何提示用户展示物品,以及如何反馈识别结果,改善用户体验。
‘’‘ 我正在制作一个聊天游戏
这个聊天游戏的角色是通过yaml载入的
我现在定义角色中很重要的是一个叫prompt_steps的变量
prompt_steps的每个元素prompt_step有三个字段,分别是
- prompt: 当前阶段角色的系统prompt
- conds: list of cond,角色进入下个阶段的条件,要满足所有cond才能进入下一个阶段
    - cond: 目前默认情况下, cond是一组list of string, 也就是list中任何一个物品被展示,当前的cond就算满足, 比如 铁锭, 金灵珠, 菜刀
- welcome_info: 当进入这个阶段时候的欢迎信息, 比如"小子,看来你找到xx了,那我们。。"
然后我在设置一个 四阶段道士 信息如下,帮我根据这个信息,写出道士的yaml信息
<example_info>
道士,一阶段只是算命,一个在路边算命的道士
cond1:展示任意修仙界的物品 进入二阶段
二阶段的道士传授了你功法,但是要你收集五行灵物,土属性的他已经有了,让你先去身边找个金属性灵物
cond1:展示任意金属性灵物 进入三阶段
三阶段 道士让你找一个木属性和一个水属性灵物
cond1:展示任意木属性灵物 cond2:展示任意水属性灵物
四阶段 道士帮你炼制筑基丹,并答应解答你修仙相关的问题
</example_info> ’‘’