[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-AkagawaTsurunaki--ZerolanLiveRobot":3,"tool-AkagawaTsurunaki--ZerolanLiveRobot":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",147882,2,"2026-04-09T11:32:47",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108111,"2026-04-08T11:23:26",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":10,"last_commit_at":59,"category_tags":60,"status":17},4487,"LLMs-from-scratch","rasbt\u002FLLMs-from-scratch","LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目，旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型（LLM）。它不仅是同名技术著作的官方代码库，更提供了一套完整的实践方案，涵盖模型开发、预训练及微调的全过程。\n\n该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型，却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码，用户能够透彻掌握 Transformer 架构、注意力机制等关键原理，从而真正理解大模型是如何“思考”的。此外，项目还包含了加载大型预训练权重进行微调的代码，帮助用户将理论知识延伸至实际应用。\n\nLLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API，而是渴望探究模型构建细节的技术人员而言，这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计：将复杂的系统工程拆解为清晰的步骤，配合详细的图表与示例，让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础，还是为未来研发更大规模的模型做准备",90106,"2026-04-06T11:19:32",[35,15,13,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":67,"readme_en":68,"readme_zh":69,"quickstart_zh":70,"use_case_zh":71,"hero_image_url":72,"owner_login":73,"owner_name":74,"owner_avatar_url":75,"owner_bio":76,"owner_company":76,"owner_location":76,"owner_email":76,"owner_twitter":76,"owner_website":76,"owner_url":77,"languages":78,"stars":83,"forks":84,"last_commit_at":85,"license":86,"difficulty_score":87,"env_os":88,"env_gpu":89,"env_ram":90,"env_deps":91,"category_tags":102,"github_topics":105,"view_count":32,"oss_zip_url":76,"oss_zip_packed_at":76,"status":17,"created_at":117,"updated_at":118,"faqs":119,"releases":147},5972,"AkagawaTsurunaki\u002FZerolanLiveRobot","ZerolanLiveRobot","AI VTuber with LLM, ASR, TTS, OCR, CV and more technologies to live stream or play Minecraft with you.","ZerolanLiveRobot 是一款功能强大的开源 AI 虚拟主播（VTuber）框架，旨在让普通用户也能轻松拥有自己的智能数字形象。它不仅能像真人一样在 Bilibili、YouTube 等平台直播互动，还能陪你玩《我的世界》（Minecraft），甚至操作电脑完成搜索、点击等任务。\n\n该项目解决了传统虚拟主播制作门槛高、互动性弱以及缺乏自主决策能力的痛点。通过整合大语言模型（LLM）、语音识别（ASR）、语音合成（TTS）、光学字符识别（OCR）及计算机视觉（CV）等技术，ZerolanLiveRobot 能够“听懂”弹幕和语音指令，“看懂”屏幕画面与文字，并做出带有情感的自然回应。其独特的亮点在于支持消费级显卡部署，具备长期记忆能力，并能直接控制游戏角色或浏览器操作，实现了从单纯聊天到多模态行动跨越。\n\n无论是希望尝试 AI 直播的普通爱好者、想要研究多模态交互的开发者，还是寻求自动化游戏代理的技术人员，都能从中受益。项目采用模块化设计，核心服务与展示层分离，支持 Live2D 及 3D 形象驱动，并提供了完善的 WebUI 配置界面。只需一张主流显卡，你即可搭建属于自己的全","ZerolanLiveRobot 是一款功能强大的开源 AI 虚拟主播（VTuber）框架，旨在让普通用户也能轻松拥有自己的智能数字形象。它不仅能像真人一样在 Bilibili、YouTube 等平台直播互动，还能陪你玩《我的世界》（Minecraft），甚至操作电脑完成搜索、点击等任务。\n\n该项目解决了传统虚拟主播制作门槛高、互动性弱以及缺乏自主决策能力的痛点。通过整合大语言模型（LLM）、语音识别（ASR）、语音合成（TTS）、光学字符识别（OCR）及计算机视觉（CV）等技术，ZerolanLiveRobot 能够“听懂”弹幕和语音指令，“看懂”屏幕画面与文字，并做出带有情感的自然回应。其独特的亮点在于支持消费级显卡部署，具备长期记忆能力，并能直接控制游戏角色或浏览器操作，实现了从单纯聊天到多模态行动跨越。\n\n无论是希望尝试 AI 直播的普通爱好者、想要研究多模态交互的开发者，还是寻求自动化游戏代理的技术人员，都能从中受益。项目采用模块化设计，核心服务与展示层分离，支持 Live2D 及 3D 形象驱动，并提供了完善的 WebUI 配置界面。只需一张主流显卡，你即可搭建属于自己的全能型 AI 伙伴，体验前沿的人机共融乐趣。","# Zerolan Live Robot\n\n![Static Badge](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPython%20-%203.10~3.11%20-%20blue) ![Static Badge](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-orange) ![Static Badge](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FAI%20VTuber-blue) ![Static Badge](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FBilibili-fb7299) ![Static Badge](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FYoutube-ff0000) ![Static Badge](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTwitch-9044fe) ![Static Badge](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FASR-purple) ![Static Badge](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLLM-purple) ![Static Badge](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTTS-purple) ![Static Badge](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FOCR-purple) ![Static Badge](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FImageCaptioning-purple) ![Static Badge](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FVideoCaptioning-purple) ![Static Badge](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FMinecraftAIAgent-purple) ![Static Badge](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fver-2.3.0-green)\n\n你或许已经听说过著名的 [Neurosama](https:\u002F\u002Fvirtualyoutuber.fandom.com\u002Fwiki\u002FNeuro-sama)，或者是来自中国的[木几萌](https:\u002F\u002Fmobile.moegirl.org.cn\u002F%E6%9C%A8%E5%87%A0%E8%90%8C)。你是否也想要拥有一个自己的 AI 虚拟形象陪你直播、聊天、打游戏？开源的 Zerolan Live Robot 正致力于实现您的梦想！而这仅仅需要一张消费级显卡！\n\nZerolan Live Robot 是一款多功能的直播机器人（AI VTuber），它可以听懂你所说的话，也可以自动在直播间中读取弹幕，观察电脑屏幕的指定窗口，理解其画面内容和文字信息，操纵 Minecraft 中的游戏角色，做出带情感的语音聊天回应。\n\n相关项目：[KonekoMinecraftBot](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FKonekoMinecraftBot)、[ZerolanCore](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002Fzerolan-core)、[ZerolanData](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002Fzerolan-data)、[ZerolanPlayground](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FZerolanPlayground)。\n\n本项目持续开发中，您可以关注开发者的 Bilibili 账号[赤川鹤鸣_Channel](https:\u002F\u002Fspace.bilibili.com\u002F1076299680)，正在根据此项目调教 AI 猫娘，不定时直播展示最新进展。\n\n## 特点与功能\n\n- [x] 💭 基于大语言模型的自然语言对话，上下文理解和人机聊天\n- [x] 🍻 连接至 Bilibili、YouTube（实验）、Twitch（实验）直播间，根据弹幕内容挑选并回复\n- [x] 🎙️ 识别用户麦克风语音输入内容，理解并回复（例如：`你叫什么名字？`、`请关闭麦克风！`）\n- [x] 📣 根据回复文本的带情感的语音合成\n- [x] 📄 识别指定窗口中的文字内容，并分析其中的文字（例如：`能看见这里写了什么吗？`）\n- [x] 🖼️ 识别指定窗口中的图像内容，并理解其中的含义（例如：`你看见了什么东西？`）\n- [x] 🔍️ 打开、控制浏览器并执行百科搜索（例如：`搜索一下什么是二次元。`）\n- [x] 🖱️ 语音指令控制鼠标点击 UI 界面（例如：`点击屏幕上的搜索按钮`）\n- [x] 🛠️ 根据上下文语境采取行动或挑选工具（例如：`好了，你可以关机了！`、`请关闭浏览器`）\n- [x] 🎮️ 语音指令可控制的 Minecraft AI 智能体（例如：`在游戏中跟大家说你好！`）\n- [x] 📓 基于最大记录条数的简单的运行时上下文短期记忆\n- [x] 📖 基于 向量数据库的长期记忆存储与提取（例如：`你还记得我说过春日影是什么嘛？`）\n- [x] 🎞️ OBS 直播流式打字机字幕显示与控制\n- [x] ⚙️ 系统配置和实时控制器的 WebUI 界面\n- [x] 🥳 Live2D 形象控制，嘴型同步、自动眨眼和自主呼吸\n- [x] 🥽 基于 Unity 的 Live2D 形象控制和 3D 模型控制的展示应用\n- [x] ⌨️ 键盘热键控制机器人的麦克风开关\n- [x] 🐧 QQ 机器人的文字、语音和图像多模态回复\n\n## 安装并运行\n\nZerolan Project 由 [ZerolanLiveRobot](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FZerolanLiveRobot)、[ZerolanCore](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002Fzerolan-core)、[ZerolanData](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002Fzerolan-data)、[ZerolanPlayground](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FZerolanPlayground)、[KonekoMinecraftBot](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FKonekoMinecraftBot) 等项目共同组成。下表简要地介绍了各个项目的用途，您可以根据需要使用：\n\n| 项目名                                                       | 用途                                                         |\n| ------------------------------------------------------------ | ------------------------------------------------------------ |\n| [ZerolanLiveRobot](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FZerolanLiveRobot) | 直播机器人的控制框架，通过采集各类数据，并综合分析做出动作响应。 |\n| [ZerolanCore](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002Fzerolan-core) | 为直播机器人提供 AI 推理服务的核心模块，例如大语言模型、语音识别、语音合成等 Web API 服务。 |\n| [ZerolanData](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002Fzerolan-data) | 定义了各个项目或服务之间沟通与交换的数据格式。               |\n| [ZerolanPlayground](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FZerolanPlayground)                                        | 使用 Unity 引擎和 Vuforia 引擎开发的 AR 虚拟形象展示器，兼容 Live2D 模型的展示。|\n| [KonekoMinecraftBot](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FKonekoMinecraftBot) | 基于 mineflayer 的 Minecraft 智能体，使用有限状态机控制行为（打怪、砍树、睡觉等），支持语音控制。 |\n\n### 部署核心服务\n\n如果你希望将 AI 模型服务部署在自己的电脑上，请移步至[此处](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002Fzerolan-core)首先完成 ZerolanCore 的相关部署工作。\n\nZerolanCore 是本项目的 AI 驱动核心，尤其是其中的语音识别服务、大语言模型服务和文本转语音服务。\n\n当然，如果您选择一些第三方 API 调用也是可以的，本项目提供了一些第三方提供的 API 接口的支持，但如果其中没有你想要的，请根据文档实现自己的统一模型管线（Unified Model Pipeline, UMP）。\n详细请看本项目中的 `pipeline` 模块和 [ZerolanData](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002Fzerolan-data) 这个仓库中定义的接口，它们都是用 HTTP 实现的接口。\n\n您可以根据需求混合使用第三方接口和 ZerolanCore 服务，例如 LLM 用第三方 API，ASR 和 TTS 用自己的模型，后续您可以在配置文件中设置。\n\n无论如何，你必须至少配置**大语言模型**（LLM）、**自动语音识别模型**（ASR）、**文本转语音模型**（TTS）才能驱动整个项目。\n\n### 安装本项目依赖\n\n本项目需要您提前安装 git，因为克隆项目、更新项目以及 [ZerolanData](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002Fzerolan-data) 的安装都离不开 git。您需要根据您的操作系统选择安装 git。\n\n如果你使用的是 Windows 操作系统，请检查您是否已经安装了 [Visual C++ Build Tools](https:\u002F\u002Fvisualstudio.microsoft.com\u002Fzh-hans\u002Fvisual-cpp-build-tools\u002F)，部分 Python 依赖的库可能会需要在您的操作系统上编译后安装。\n\n运行指令，这会创建一个虚拟环境并激活（推荐使用 Python 3.11），然后自动安装本项目需要的依赖包：\n\n```shell\nconda create --name ZerolanLiveRobot python=3.11\nconda activate ZerolanLiveRobot\npip install -r requirements.txt\n```\n\n不知道什么是 `conda`？请参阅 [Anaconda 官方文档](https:\u002F\u002Fwww.anaconda.com\u002Fdocs\u002Fgetting-started\u002Fmain)。\n\n### 配置项目\n\n使用以下命令运行 Zerolan Live Robot 的主程序：\n\n```shell\npython main.py\n```\n\n如果你是第一次启动本项目，主程序将为您自动生成一份配置文件，位置在你的项目目录下的 `.\u002Fresources\u002Fconfig.yaml`，最后会自动退出，这是正常现象。\n\n这样，你有两种方式修改你的配置文件：\n\n1. WebUI配置：运行 `python webui.py` 将会启动一个 WebUI 的配置界面，你可以在浏览器中访问它（通常是`http:\u002F\u002F127.0.0.1:7860`），然后根据配置项中的描述和提示进行填写，填写完毕后，可以单击右上角的 Save Config 按钮，这将保存配置到 `.\u002Fresources\u002Fconfig.yaml`。\n2. 手动修改：直接找到 `.\u002Fresources\u002Fconfig.yaml` 文件并按照文件内的注释引导填写对应的配置。\n\n建议您详细阅读配置项里的内容（包括注释），这对您理解本项目如何运行和具有哪些功能十分有帮助。有一些配置需要额外的工作，请继续看下面的“服务配置”一节。\n\n### 运行项目\n\n**配置文件修改完毕后**，可以再一次运行 `python main.py` 以启动程序，若没有报错则程序已经成功启动。\n\n默认情况下，按下 `f8` 可以开启\u002F关闭麦克风，也就是说，你需要在说话前按下一次 `f8`，在说话完毕后再按下一次 `f8`，此时麦克风的数据会被传输到 ASR 服务中，\n一旦 ASR 返回了语音识别结果，就会紧接着将你的输入提供给 LLM 服务，LLM 服务后接收到你的输入后，会将推理内容响应回来，再交由 TTS 服务用以语音合成，此时你应该可以听到机器人的回复。\n\n若在此期间出现任何报错或问题，都可以通过新建 Issue 获取帮助，届时还恳请您提供完整的日志和复现流程。\n\n### 获取更新\n\n本项目将会持续发布于主分支 `main`，因此可以执行下列代码更新本项目的代码：\n\n```shell\ngit checkout main\ngit pull\n```\n\n当然，如果您已经修改了代码，此操作可能会自动合并代码，但是部分未能解决的冲突需要您自行处理。建议在开发时使用另一个分支而不是主分支 `main`。\n\n## 服务配置\n\n### Live2D 展示器\n\n基于 [live2d-py](https:\u002F\u002Fgithub.com\u002FArkueid\u002Flive2d-py)、[OpenGL](https:\u002F\u002Fwww.opengl.org\u002F) 和\n[PyQt5](https:\u002F\u002Fpypi.org\u002Fproject\u002FPyQt5\u002F) 开发的 Live2D 虚拟形象控制器。\n实现了窗口宽高控制、透明背景（可用于 OBS 直播或桌宠），角色自动呼吸控制、自动眨眼控制，说话时嘴型控制。\n\n### 直播间弹幕读取\n\n连接到指定直播平台服务，获取弹幕、礼物消息等。支持 Bilibili、YouTube（实验）、Twitch（实验）直播间。\n\n### OBS 字幕控制\n\nOBS 直播流式打字机字幕显示与控制，基于 [OBSWebSocket](https:\u002F\u002Fgithub.com\u002Fobsproject\u002Fobs-websocket) 实现。\n\n**如何让本项目自动同步字幕到我的 OBS 直播间？**\n\n您需要开启 OBS 的 WebSocket 服务器。步骤如下：\n1. 打开 OBS。\n2. 找到工具栏中的“工具”选项，选择“WebSocket 服务器设置”。\n3. 点击“生成密码”设置服务器密码。\n4. 点击“显示连接信息”。\n5. 将服务器 IP 、服务器端口和服务器密码填写入配置文件。\n\n然后，在 OBS 主界面的“源”窗口中，按加号添加一个“文本 (GDI+)”组件，右键重命名为 `UserText`，这个文本组件将用于展示用户的语音识别结果；\n同理，再创建一个“文本 (GDI+)”组件，重命名为 `AssistantText`，这个文本组件将用于展示机器人的文字推理结果。\n\n最后，启动本项目即可。正常情况下，会按照您所填写的配置连接 OBS WebSocket 服务器，就可以正常运行了。\n\n### AR 展示器\n\n此步骤是**可选**的。因为本项目已经支持了 Live2D 展示器功能，除非你确实需要 AR 等基于 Unity 和 Vuforia 的功能请继续。\n\n[ZerolanPlayground](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FZerolanPlayground) 可以通过语音、拍照与本项目进行 WebSocket 消息同步。\n\n下载对应平台的安装包进行安装，然后在右上角填写你开启本 ZerolanLiveRobot 的服务器地址。\n\n例如，你将 ZerolanLiveRobot 主程序开启在你的电脑的 11013 端口，且你的电脑 IP 为 `192.168.1.114`，那么在服务器地址一栏填写 `ws:\u002F\u002F192.168.1.114:11013`，最后单击“连接”即可。\n\n### QQ 机器人\n\n基于 NapCat 的 QQ 机器人支持，启用此功能必须先安装 NapCat，详细参阅[NapCatQQ 官方文档](https:\u002F\u002Fnapneko.github.io\u002Fguide\u002Fnapcat)。\n\n当您安装完毕后，一般来说，可以通过以下命令访问 Napcat Shell：\n\n```shell\nnapcat\n```\n\n一旦您配置好 NatCat 以及登录成功的 QQ 号，请在浏览器访问 NapCat 的 WebUI 界面（不是本项目的那个 WebUI），一般是 http:\u002F\u002F127.0.0.1:6099。\n\n此时可能要求您输入 Token 登录，这个 Token 在 NapCat 的日志里，步骤是执行 `napcat` 指令后，在 Napcat Shell 界面中向下选择 `LOG 查看日志` 选项，就可以查看日志了。\n\n输入正确的登录 Token 后，点击左侧的“网络配置”，然后点击“新建 > Websocket 服务器”，接着执行下列步骤：\n\n1. 勾选启用\n2. 名称任意\n3. `Host` 默认（如果同一主机），例如 `127.0.0.1`\n4. 端口任意，但一定和你配置文件中的保持一致，例如 `3033`\n5. 消息格式 `Array`\n6. 勾选强制推送事件\n7. 复制 `Token`，例如 `0d000721`\n8. 点击“保存”\n\n假设你是按照上面步骤配置的，在“接口调试 > Websocket”中输入 WebSocket URL 为 `ws:\u002F\u002F127.0.0.1:3033\u002F`，Token 输入为 `0d000721`，最后点击“连接”。\n如果一切正常，那么 NapCat 就配置完毕了。\n\n### 浏览器控制\n\n基于 Selenium 的简单的浏览器控制器。仅支持 `Firefox`。\n\n功能很简单，如果需要扩展需要自己实现。其中机器人可能会使用 ShowUI 的模型推理结果来调用并控制浏览器。\n\n### Minecraft 智能体\n\n本项目与 [KonekoMinecraftBot](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FKonekoMinecraftBot) 共同实现了一套 ZerolanProtocol 协议接口，可以从本项目控制在 Minecraft 游戏中的机器人。如有需要请移步至[此处](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FKonekoMinecraftBot)查看详细。\n\n## 自定义设计机器人\n\n本项目也提供了一种基于**事件驱动**设计模式的机器人开发框架。它的核心是 `TypedEventEmitter`。\n\n### TypedEventEmitter\n\n在本项目中，机器人是在一系列事件的发送和处理过程中运行的。换句话说，没有事件发生，机器人就不会有任何回应。\n\n每一个事件 `Event` 都继承自 `BaseEvent`，并含有一个 `type` 字段（字符串类型）用以标记这个事件的类型。本项目中使用的所有事件类型的都定义在 `event.registry` 中，您也可以拓展添加自己的事件名，并实现一个继承自 `BaseEvent` 的自定义事件 。\n\n`emitter` 是一个全局对象，用以处理事件发送和监听器的执行。\n\n使用装饰器 `@emitter.on(event_key)` 可以快捷地注册某个监听器。当监听器是异步函数时，会在触发事件时以异步协程任务的形式执行；当监听器是同步函数时，会在触发事件时将在一个默认 4 个 worker 的线程池中执行。\n\n> [!Caution]\n>\n> 由于 `emitter` 开启的事件循环运行在主线程上，因此**不要使用任何可能阻塞主线程的方法或函数**，除非你知道你在做什么。、\n>\n> 同步监听器运行在线程池上，请注意**线程安全**问题，你也可以自行调整 worker 的数量。\n\n当我们需要发送事件时，可以使用 `emitter.emit(event)`，其中 `event` 就是一个 `BaseEvent` 事件对象。\n\n例如，当系统检测到一段人声音频时，将会发送 `SpeechEvent` 事件（其 `event_key` 为 `EventKeyRegistry.Device.SERVICE_VAD_SPEECH_CHUNK` 所代表的字符串），并调用所有注册这个事件的监听器，进行某种处理：\n\n```python\n@emitter.on(EventKeyRegistry.Device.MICROPHONE_VAD)\nasync def on_service_vad_speech_chunk(event: SpeechEvent):\n    speech, channels, sample_rate = event.speech, event.channels, event.sample_rate\n    prediction = await asr.predict(...)  # 假如调用了某个函数获得了 ASR 的结果\n    emitter.emit(ASREvent(prediction=prediction))  # 发送自动语音识别事件\n```\n\n这里的监听器即 `on_service_vad_speech_chunk`，本质上是一个函数，它会在 `SpeechEvent` 发生时被调用。\n\n### Pipeline\n\n管线（Pipeline）是沟通 Zerolan Core 的重要实现，它是基于 HTTP 开发的。管线的使用非常简单，只需要传入一个配置对象，就可以得到一个可用的管线对象。然后调用管线对象中的 `predict` 或 `stream_predict` 方法即可使用 Zerolan Core 中的 AI 模型，当然也包括一些第三方的 API。\n\n以大语言模型为例，指定目标服务器的地址（你的 Zerolan Core 服务开启的地址），传入 `LLMPipelineConfig` 对象到 `LLMPipeline`，即可建立管线。\n\n```python\nconfig = LLMPipelineConfig(predict_url=\"http:\u002F\u002F127.0.0.1:11000\u002Fllm\u002Fpredict\")\nllm = LLMPipeline(config)\nquery = LLMQuery(text=\"你好，你叫什么名字？\", history=[])\nprediction = llm.predict(query)\nprint(prediction.response)\n# 这样就应该可以得到模型的回复\n```\n\n如果你想知道更多实现细节，可以查看 [ZerolanData](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002Fzerolan-data) 中的数据定义，可能也需要结合管线的实现和 [ZerolanCore](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002Fzerolan-core) 中 `app.py` 文件中的内容进行理解。\n\n### Services\n\n每个服务都可以注册到 `framework\u002Fcontext.py` 中，然后在 `bot.py` 中调用。建议每个服务都放在一个单独的文件夹里，其中包含一个 `config.py` 文件专属于这个服务。\n\n## License\n\n本项目使用 MIT License，请勿将本软件用于非法用途。\n\nFeel free to enjoy open-source!\n\nMIT License\n\nCopyright (c) 2024 AkagawaTsurunaki\n\n## Contact with Me\n\n**Email**: AkagawaTsurunaki@outlook.com\n\n**Github**: AkagawaTsurunaki\n\n**Bilibili**: [赤川鹤鸣_Channel](https:\u002F\u002Fspace.bilibili.com\u002F1076299680)\n","# Zerolan 直播机器人\n\n![静态徽章](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPython%20-%203.10~3.11%20-%20blue) ![静态徽章](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-orange) ![静态徽章](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FAI%20VTuber-blue) ![静态徽章](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FBilibili-fb7299) ![静态徽章](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FYoutube-ff0000) ![静态徽章](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTwitch-9044fe) ![静态徽章](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FASR-purple) ![静态徽章](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLLM-purple) ![静态徽章](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTTS-purple) ![静态徽章](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FOCR-purple) ![静态徽章](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FImageCaptioning-purple) ![静态徽章](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FVideoCaptioning-purple) ![静态徽章](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FMinecraftAIAgent-purple) ![静态徽章](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fver-2.3.0-green)\n\n你或许已经听说过著名的 [Neurosama](https:\u002F\u002Fvirtualyoutuber.fandom.com\u002Fwiki\u002FNeuro-sama)，或者是来自中国的[木几萌](https:\u002F\u002Fmobile.moegirl.org.cn\u002F%E6%9C%A8%E5%87%A0%E8%90%8C)。你是否也想要拥有一个自己的 AI 虚拟形象陪你直播、聊天、打游戏？开源的 Zerolan Live Robot 正致力于实现您的梦想！而这仅仅需要一张消费级显卡！\n\nZerolan Live Robot 是一款多功能的直播机器人（AI VTuber），它可以听懂你所说的话，也可以自动在直播间中读取弹幕，观察电脑屏幕的指定窗口，理解其画面内容和文字信息，操纵 Minecraft 中的游戏角色，做出带情感的语音聊天回应。\n\n相关项目：[KonekoMinecraftBot](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FKonekoMinecraftBot)、[ZerolanCore](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002Fzerolan-core)、[ZerolanData](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002Fzerolan-data)、[ZerolanPlayground](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FZerolanPlayground)。\n\n本项目持续开发中，您可以关注开发者的 Bilibili 账号[赤川鹤鸣_Channel](https:\u002F\u002Fspace.bilibili.com\u002F1076299680)，正在根据此项目调教 AI 猫娘，不定时直播展示最新进展。\n\n## 特点与功能\n\n- [x] 💭 基于大语言模型的自然语言对话，上下文理解和人机聊天\n- [x] 🍻 连接至 Bilibili、YouTube（实验）、Twitch（实验）直播间，根据弹幕内容挑选并回复\n- [x] 🎙️ 识别用户麦克风语音输入内容，理解并回复（例如：`你叫什么名字？`、`请关闭麦克风！`）\n- [x] 📣 根据回复文本的带情感的语音合成\n- [x] 📄 识别指定窗口中的文字内容，并分析其中的文字（例如：`能看见这里写了什么吗？`）\n- [x] 🖼️ 识别指定窗口中的图像内容，并理解其中的含义（例如：`你看见了什么东西？`）\n- [x] 🔍️ 打开、控制浏览器并执行百科搜索（例如：`搜索一下什么是二次元。`）\n- [x] 🖱️ 语音指令控制鼠标点击 UI 界面（例如：`点击屏幕上的搜索按钮`）\n- [x] 🛠️ 根据上下文语境采取行动或挑选工具（例如：`好了，你可以关机了！`、`请关闭浏览器`）\n- [x] 🎮️ 语音指令可控制的 Minecraft AI 智能体（例如：`在游戏中跟大家说你好！`）\n- [x] 📓 基于最大记录条数的简单的运行时上下文短期记忆\n- [x] 📖 基于 向量数据库的长期记忆存储与提取（例如：`你还记得我说过春日影是什么嘛？`）\n- [x] 🎞️ OBS 直播流式打字机字幕显示与控制\n- [x] ⚙️ 系统配置和实时控制器的 WebUI 界面\n- [x] 🥳 Live2D 形象控制，嘴型同步、自动眨眼和自主呼吸\n- [x] 🥽 基于 Unity 的 Live2D 形象控制和 3D 模型控制的展示应用\n- [x] ⌨️ 键盘热键控制机器人的麦克风开关\n- [x] 🐧 QQ 机器人的文字、语音和图像多模态回复\n\n## 安装并运行\n\nZerolan Project 由 [ZerolanLiveRobot](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FZerolanLiveRobot)、[ZerolanCore](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002Fzerolan-core)、[ZerolanData](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002Fzerolan-data)、[ZerolanPlayground](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FZerolanPlayground)、[KonekoMinecraftBot](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FKonekoMinecraftBot) 等项目共同组成。下表简要地介绍了各个项目的用途，您可以根据需要使用：\n\n| 项目名                                                       | 用途                                                         |\n| ------------------------------------------------------------ | ------------------------------------------------------------ |\n| [ZerolanLiveRobot](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FZerolanLiveRobot) | 直播机器人的控制框架，通过采集各类数据，并综合分析做出动作响应。 |\n| [ZerolanCore](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002Fzerolan-core) | 为直播机器人提供 AI 推理服务的核心模块，例如大语言模型、语音识别、语音合成等 Web API 服务。 |\n| [ZerolanData](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002Fzerolan-data) | 定义了各个项目或服务之间沟通与交换的数据格式。               |\n| [ZerolanPlayground](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FZerolanPlayground)                                        | 使用 Unity 引擎和 Vuforia 引擎开发的 AR 虚拟形象展示器，兼容 Live2D 模型的展示。|\n| [KonekoMinecraftBot](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FKonekoMinecraftBot) | 基于 mineflayer 的 Minecraft 智能体，使用有限状态机控制行为（打怪、砍树、睡觉等），支持语音控制。 |\n\n### 部署核心服务\n\n如果你希望将 AI 模型服务部署在自己的电脑上，请移步至[此处](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002Fzerolan-core)首先完成 ZerolanCore 的相关部署工作。\n\nZerolanCore 是本项目的 AI 驱动核心，尤其是其中的语音识别服务、大语言模型服务和文本转语音服务。\n\n当然，如果您选择一些第三方 API 调用也是可以的，本项目提供了一些第三方提供的 API 接口的支持，但如果其中没有你想要的，请根据文档实现自己的统一模型管线（Unified Model Pipeline, UMP）。\n详细请看本项目中的 `pipeline` 模块和 [ZerolanData](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002Fzerolan-data) 这个仓库中定义的接口，它们都是用 HTTP 实现的接口。\n\n您可以根据需求混合使用第三方接口和 ZerolanCore 服务，例如 LLM 用第三方 API，ASR 和 TTS 用自己的模型，后续您可以在配置文件中设置。\n\n无论如何，你必须至少配置**大语言模型**（LLM）、**自动语音识别模型**（ASR）、**文本转语音模型**（TTS）才能驱动整个项目。\n\n### 安装本项目依赖\n\n本项目需要您提前安装 git，因为克隆项目、更新项目以及 [ZerolanData](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002Fzerolan-data) 的安装都离不开 git。您需要根据您的操作系统选择安装 git。\n\n如果你使用的是 Windows 操作系统，请检查您是否已经安装了 [Visual C++ Build Tools](https:\u002F\u002Fvisualstudio.microsoft.com\u002Fzh-hans\u002Fvisual-cpp-build-tools\u002F)，部分 Python 依赖的库可能会需要在您的操作系统上编译后安装。\n\n运行指令，这会创建一个虚拟环境并激活（推荐使用 Python 3.11），然后自动安装本项目需要的依赖包：\n\n```shell\nconda create --name ZerolanLiveRobot python=3.11\nconda activate ZerolanLiveRobot\npip install -r requirements.txt\n```\n\n不知道什么是 `conda`？请参阅 [Anaconda 官方文档](https:\u002F\u002Fwww.anaconda.com\u002Fdocs\u002Fgetting-started\u002Fmain)。\n\n### 配置项目\n\n使用以下命令运行 Zerolan Live Robot 的主程序：\n\n```shell\npython main.py\n```\n\n如果你是第一次启动本项目，主程序将为您自动生成一份配置文件，位置在你的项目目录下的 `.\u002Fresources\u002Fconfig.yaml`，最后会自动退出，这是正常现象。\n\n这样，你有两种方式修改你的配置文件：\n\n1. WebUI配置：运行 `python webui.py` 将会启动一个 WebUI 的配置界面，你可以在浏览器中访问它（通常是`http:\u002F\u002F127.0.0.1:7860`），然后根据配置项中的描述和提示进行填写，填写完毕后，可以单击右上角的 Save Config 按钮，这将保存配置到 `.\u002Fresources\u002Fconfig.yaml`。\n2. 手动修改：直接找到 `.\u002Fresources\u002Fconfig.yaml` 文件并按照文件内的注释引导填写对应的配置。\n\n建议您详细阅读配置项里的内容（包括注释），这对您理解本项目如何运行和具有哪些功能十分有帮助。有一些配置需要额外的工作，请继续看下面的“服务配置”一节。\n\n### 运行项目\n\n**配置文件修改完毕后**，可以再一次运行 `python main.py` 以启动程序，若没有报错则程序已经成功启动。\n\n默认情况下，按下 `f8` 可以开启\u002F关闭麦克风，也就是说，你需要在说话前按下一次 `f8`，在说话完毕后再按下一次 `f8`，此时麦克风的数据会被传输到 ASR 服务中，\n一旦 ASR 返回了语音识别结果，就会紧接着将你的输入提供给 LLM 服务，LLM 服务后接收到你的输入后，会将推理内容响应回来，再交由 TTS 服务用以语音合成，此时你应该可以听到机器人的回复。\n\n若在此期间出现任何报错或问题，都可以通过新建 Issue 获取帮助，届时还恳请您提供完整的日志和复现流程。\n\n### 获取更新\n\n本项目将会持续发布于主分支 `main`，因此可以执行下列代码更新本项目的代码：\n\n```shell\ngit checkout main\ngit pull\n```\n\n当然，如果您已经修改了代码，此操作可能会自动合并代码，但是部分未能解决的冲突需要您自行处理。建议在开发时使用另一个分支而不是主分支 `main`。\n\n## 服务配置\n\n### Live2D 展示器\n\n基于 [live2d-py](https:\u002F\u002Fgithub.com\u002FArkueid\u002Flive2d-py)、[OpenGL](https:\u002F\u002Fwww.opengl.org\u002F) 和\n[PyQt5](https:\u002F\u002Fpypi.org\u002Fproject\u002FPyQt5\u002F) 开发的 Live2D 虚拟形象控制器。\n实现了窗口宽高控制、透明背景（可用于 OBS 直播或桌宠），角色自动呼吸控制、自动眨眼控制，说话时嘴型控制。\n\n### 直播间弹幕读取\n\n连接到指定直播平台服务，获取弹幕、礼物消息等。支持 Bilibili、YouTube（实验）、Twitch（实验）直播间。\n\n### OBS 字幕控制\n\nOBS 直播流式打字机字幕显示与控制，基于 [OBSWebSocket](https:\u002F\u002Fgithub.com\u002Fobsproject\u002Fobs-websocket) 实现。\n\n**如何让本项目自动同步字幕到我的 OBS 直播间？**\n\n您需要开启 OBS 的 WebSocket 服务器。步骤如下：\n1. 打开 OBS。\n2. 找到工具栏中的“工具”选项，选择“WebSocket 服务器设置”。\n3. 点击“生成密码”设置服务器密码。\n4. 点击“显示连接信息”。\n5. 将服务器 IP 、服务器端口和服务器密码填写入配置文件。\n\n然后，在 OBS 主界面的“源”窗口中，按加号添加一个“文本 (GDI+)”组件，右键重命名为 `UserText`，这个文本组件将用于展示用户的语音识别结果；\n同理，再创建一个“文本 (GDI+)”组件，重命名为 `AssistantText`，这个文本组件将用于展示机器人的文字推理结果。\n\n最后，启动本项目即可。正常情况下，会按照您所填写的配置连接 OBS WebSocket 服务器，就可以正常运行了。\n\n### AR 展示器\n\n此步骤是**可选**的。因为本项目已经支持了 Live2D 展示器功能，除非你确实需要 AR 等基于 Unity 和 Vuforia 的功能请继续。\n\n[ZerolanPlayground](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FZerolanPlayground) 可以通过语音、拍照与本项目进行 WebSocket 消息同步。\n\n下载对应平台的安装包进行安装，然后在右上角填写你开启本 ZerolanLiveRobot 的服务器地址。\n\n例如，你将 ZerolanLiveRobot 主程序开启在你的电脑的 11013 端口，且你的电脑 IP 为 `192.168.1.114`，那么在服务器地址一栏填写 `ws:\u002F\u002F192.168.1.114:11013`，最后单击“连接”即可。\n\n### QQ 机器人\n\n基于 NapCat 的 QQ 机器人支持，启用此功能必须先安装 NapCat，详细参阅[NapCatQQ 官方文档](https:\u002F\u002Fnapneko.github.io\u002Fguide\u002Fnapcat)。\n\n当您安装完毕后，一般来说，可以通过以下命令访问 Napcat Shell：\n\n```shell\nnapcat\n```\n\n一旦您配置好 NatCat 以及登录成功的 QQ 号，请在浏览器访问 NapCat 的 WebUI 界面（不是本项目的那个 WebUI），一般是 http:\u002F\u002F127.0.0.1:6099。\n\n此时可能要求您输入 Token 登录，这个 Token 在 NapCat 的日志里，步骤是执行 `napcat` 指令后，在 Napcat Shell 界面中向下选择 `LOG 查看日志` 选项，就可以查看日志了。\n\n输入正确的登录 Token 后，点击左侧的“网络配置”，然后点击“新建 > Websocket 服务器”，接着执行下列步骤：\n\n1. 勾选启用\n2. 名称任意\n3. `Host` 默认（如果同一主机），例如 `127.0.0.1`\n4. 端口任意，但一定和你配置文件中的保持一致，例如 `3033`\n5. 消息格式 `Array`\n6. 勾选强制推送事件\n7. 复制 `Token`，例如 `0d000721`\n8. 点击“保存”\n\n假设你是按照上面步骤配置的，在“接口调试 > Websocket”中输入 WebSocket URL 为 `ws:\u002F\u002F127.0.0.1:3033\u002F`，Token 输入为 `0d000721`，最后点击“连接”。\n如果一切正常，那么 NapCat 就配置完毕了。\n\n### 浏览器控制\n\n基于 Selenium 的简单的浏览器控制器。仅支持 `Firefox`。\n\n功能很简单，如果需要扩展需要自己实现。其中机器人可能会使用 ShowUI 的模型推理结果来调用并控制浏览器。\n\n### Minecraft 智能体\n\n本项目与 [KonekoMinecraftBot](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FKonekoMinecraftBot) 共同实现了一套 ZerolanProtocol 协议接口，可以从本项目控制在 Minecraft 游戏中的机器人。如有需要请移步至[此处](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FKonekoMinecraftBot)查看详细。\n\n## 自定义设计机器人\n\n本项目也提供了一种基于**事件驱动**设计模式的机器人开发框架。它的核心是 `TypedEventEmitter`。\n\n### TypedEventEmitter\n\n在本项目中，机器人是在一系列事件的发送和处理过程中运行的。换句话说，没有事件发生，机器人就不会有任何回应。\n\n每一个事件 `Event` 都继承自 `BaseEvent`，并含有一个 `type` 字段（字符串类型）用以标记这个事件的类型。本项目中使用的所有事件类型的都定义在 `event.registry` 中，您也可以拓展添加自己的事件名，并实现一个继承自 `BaseEvent` 的自定义事件 。\n\n`emitter` 是一个全局对象，用以处理事件发送和监听器的执行。\n\n使用装饰器 `@emitter.on(event_key)` 可以快捷地注册某个监听器。当监听器是异步函数时，会在触发事件时以异步协程任务的形式执行；当监听器是同步函数时，会在触发事件时将在一个默认 4 个 worker 的线程池中执行。\n\n> [!Caution]\n>\n> 由于 `emitter` 开启的事件循环运行在主线程上，因此**不要使用任何可能阻塞主线程的方法或函数**，除非你知道你在做什么。、\n>\n> 同步监听器运行在线程池上，请注意**线程安全**问题，你也可以自行调整 worker 的数量。\n\n当我们需要发送事件时，可以使用 `emitter.emit(event)`，其中 `event` 就是一个 `BaseEvent` 事件对象。\n\n例如，当系统检测到一段人声音频时，将会发送 `SpeechEvent` 事件（其 `event_key` 为 `EventKeyRegistry.Device.SERVICE_VAD_SPEECH_CHUNK` 所代表的字符串），并调用所有注册这个事件的监听器，进行某种处理：\n\n```python\n@emitter.on(EventKeyRegistry.Device.MICROPHONE_VAD)\nasync def on_service_vad_speech_chunk(event: SpeechEvent):\n    speech, channels, sample_rate = event.speech, event.channels, event.sample_rate\n    prediction = await asr.predict(...)  # 假如调用了某个函数获得了 ASR 的结果\n    emitter.emit(ASREvent(prediction=prediction))  # 发送自动语音识别事件\n```\n\n这里的监听器即 `on_service_vad_speech_chunk`，本质上是一个函数，它会在 `SpeechEvent` 发生时被调用。\n\n### Pipeline\n\n管线（Pipeline）是沟通 Zerolan Core 的重要实现，它是基于 HTTP 开发的。管线的使用非常简单，只需要传入一个配置对象，就可以得到一个可用的管线对象。然后调用管线对象中的 `predict` 或 `stream_predict` 方法即可使用 Zerolan Core 中的 AI 模型，当然也包括一些第三方的 API。\n\n以大语言模型为例，指定目标服务器的地址（你的 Zerolan Core 服务开启的地址），传入 `LLMPipelineConfig` 对象到 `LLMPipeline`，即可建立管线。\n\n```python\nconfig = LLMPipelineConfig(predict_url=\"http:\u002F\u002F127.0.0.1:11000\u002Fllm\u002Fpredict\")\nllm = LLMPipeline(config)\nquery = LLMQuery(text=\"你好，你叫什么名字？\", history=[])\nprediction = llm.predict(query)\nprint(prediction.response)\n# 这样就应该可以得到模型的回复\n```\n\n如果你想知道更多实现细节，可以查看 [ZerolanData](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002Fzerolan-data) 中的数据定义，可能也需要结合管线的实现和 [ZerolanCore](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002Fzerolan-core) 中 `app.py` 文件中的内容进行理解。\n\n### Services\n\n每个服务都可以注册到 `framework\u002Fcontext.py` 中，然后在 `bot.py` 中调用。建议每个服务都放在一个单独的文件夹里，其中包含一个 `config.py` 文件专属于这个服务。\n\n## License\n\n本项目使用 MIT License，请勿将本软件用于非法用途。\n\nFeel free to enjoy open-source!\n\nMIT License\n\nCopyright (c) 2024 AkagawaTsurunaki\n\n## Contact with Me\n\n**Email**: AkagawaTsurunaki@outlook.com\n\n**Github**: AkagawaTsurunaki\n\n**Bilibili**: [赤川鹤鸣_Channel](https:\u002F\u002Fspace.bilibili.com\u002F1076299680)","# Zerolan Live Robot 快速上手指南\n\nZerolan Live Robot 是一款多功能 AI 虚拟主播（VTuber）框架，支持弹幕互动、语音对话、屏幕感知及游戏控制（如 Minecraft）。只需一张消费级显卡即可在本地运行。\n\n## 1. 环境准备\n\n### 系统要求\n- **操作系统**: Windows (推荐), Linux, macOS\n- **Python 版本**: 3.10 ~ 3.11 (推荐使用 3.11)\n- **显卡**: 支持 CUDA 的 NVIDIA 显卡（用于本地部署 AI 模型）\n- **必备工具**:\n  - [Git](https:\u002F\u002Fgit-scm.com\u002F)\n  - [Anaconda](https:\u002F\u002Fwww.anaconda.com\u002F) 或 Miniconda\n  - [Visual C++ Build Tools](https:\u002F\u002Fvisualstudio.microsoft.com\u002Fzh-hans\u002Fvisual-cpp-build-tools\u002F) (Windows 用户必装，用于编译部分依赖)\n\n### 前置服务\n本项目依赖 AI 推理服务（LLM, ASR, TTS）。你有两种选择：\n1. **本地部署（推荐）**：部署 [ZerolanCore](https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002Fzerolan-core) 项目以获取完整的本地 AI 服务能力。\n2. **第三方 API**：配置使用第三方大模型或语音 API（需在配置文件中设置）。\n> **注意**：无论哪种方式，必须至少配置好 **大语言模型 (LLM)**、**语音识别 (ASR)** 和 **语音合成 (TTS)** 三项服务才能启动机器人。\n\n## 2. 安装步骤\n\n### 第一步：克隆项目\n打开终端或命令行工具，执行以下命令：\n\n```shell\ngit clone https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FZerolanLiveRobot.git\ncd ZerolanLiveRobot\n```\n\n### 第二步：创建并激活虚拟环境\n推荐使用 Conda 管理环境：\n\n```shell\nconda create --name ZerolanLiveRobot python=3.11\nconda activate ZerolanLiveRobot\n```\n\n### 第三步：安装依赖\n在项目根目录下运行：\n\n```shell\npip install -r requirements.txt\n```\n> **提示**：国内用户若下载缓慢，可添加清华源加速：\n> `pip install -r requirements.txt -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple`\n\n## 3. 基本使用\n\n### 第一步：初始化配置\n首次运行主程序会自动生成配置文件模板：\n\n```shell\npython main.py\n```\n程序运行后会因缺少配置自动退出，这是正常现象。此时项目目录下会生成 `.\u002Fresources\u002Fconfig.yaml` 文件。\n\n### 第二步：配置服务\n你可以通过以下两种方式修改配置（推荐方式 1）：\n\n**方式 1：使用 WebUI 可视化配置**\n启动配置界面：\n```shell\npython webui.py\n```\n在浏览器访问 `http:\u002F\u002F127.0.0.1:7860`，根据页面提示填写 LLM、ASR、TTS 等服务地址及直播间信息，点击右上角 **Save Config** 保存。\n\n**方式 2：手动编辑配置文件**\n直接用文本编辑器打开 `.\u002Fresources\u002Fconfig.yaml`，参照注释填写各项参数。\n\n### 第三步：启动机器人\n配置完成后，再次运行主程序：\n\n```shell\npython main.py\n```\n若无报错，程序即启动成功。\n\n### 第四步：开始互动\n默认操作逻辑如下：\n1. **开启麦克风**：按下键盘 `F8` 键。\n2. **说话**：对着麦克风输入指令（例如：“你叫什么名字？”）。\n3. **关闭麦克风**：说完后再次按下 `F8` 键。\n4. **等待响应**：系统将依次进行语音识别 -> 大模型思考 -> 语音合成，你将听到机器人的回答，并在屏幕上看到对应的表情变化（若已配置 Live2D）。\n\n---\n*更多高级功能（如 OBS 字幕同步、Minecraft 联动、QQ 机器人等）请参考项目完整文档进行额外配置。*","一位独立游戏主播希望在不雇佣运营团队的情况下，实现全天候互动的《我的世界》直播，并能实时回应弹幕与语音指令。\n\n### 没有 ZerolanLiveRobot 时\n- 主播必须全程紧盯屏幕手动读取弹幕，一旦分心打游戏就会错过观众提问，互动体验极差。\n- 无法在操作游戏角色的同时进行语音回复，导致直播过程沉默尴尬，或需频繁暂停游戏来打字\u002F说话。\n- 缺乏长期记忆能力，机器人无法记住老观众之前聊过的话题（如“春日影”），每次对话都像初次见面，难以建立情感连接。\n- 想要展示游戏内自动建造或探索内容时，只能预先录制视频播放，无法根据直播间实时气氛动态调整游戏行为。\n- 部署多模态 AI（语音识别、大模型、图像理解）门槛极高，普通消费级显卡难以跑通整套流程，成本高昂。\n\n### 使用 ZerolanLiveRobot 后\n- ZerolanLiveRobot 自动抓取并分析 Bilibili 弹幕，主播专注打怪挖矿时，AI 虚拟形象能独立挑选有趣评论进行自然语言回复。\n- 支持语音输入与带情感的 TTS 输出，主播可直接口头指令“跟大家说你好”，AI 即刻操控角色动作并同步口型播报，实现边玩边聊。\n- 基于向量数据库的长期记忆功能，让 AI 能主动提起观众上周分享的故事，营造“老朋友”般的陪伴感，显著提升粉丝粘性。\n- 内置 Minecraft AI 智能体可接收语音指令自主执行砍树、建房等任务，主播只需动口，AI 便能实时演示游戏操作，增加直播观赏性。\n- 整套系统优化至单张消费级显卡即可运行，集成了 ASR、LLM、OCR 等全套技术栈，让个人开发者也能轻松拥有专属 AI 虚拟主播。\n\nZerolanLiveRobot 将复杂的多模态 AI 技术封装为开箱即用的直播解决方案，让单人主播也能拥有具备记忆、感知与行动能力的全能数字搭档。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FAkagawaTsurunaki_ZerolanLiveRobot_93f4c3c8.png","AkagawaTsurunaki","赤川鶴鳴","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002FAkagawaTsurunaki_cfa2ea36.png",null,"https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki",[79],{"name":80,"color":81,"percentage":82},"Python","#3572A5",100,652,62,"2026-04-08T11:16:12","MIT",4,"Windows","需要消费级显卡（具体型号和显存未说明，但提及仅需一张消费级显卡即可运行）","未说明",{"notes":92,"python":93,"dependencies":94},"1. Windows 用户需预先安装 Visual C++ Build Tools 以编译部分 Python 依赖库。\n2. 必须配置大语言模型 (LLM)、自动语音识别 (ASR) 和文本转语音 (TTS) 服务，可本地部署 (ZerolanCore) 或使用第三方 API。\n3. 推荐使用 conda 创建虚拟环境。\n4. 若需使用 AR 展示器，需额外安装基于 Unity 和 Vuforia 的 ZerolanPlayground。\n5. 浏览器控制功能仅支持 Firefox。","3.10~3.11",[95,96,97,98,99,100,101],"live2d-py","OpenGL","PyQt5","Selenium (仅支持 Firefox)","mineflayer (用于 Minecraft 智能体)","OBSWebSocket","NapCat (用于 QQ 机器人)",[14,103,13,15,35,104],"音频","视频",[106,107,108,109,110,111,112,113,114,115,116],"ai","asr","bilibili","cv","llm","minecraft","tts","ai-vtuber","image-captioning","ocr","video-captioning","2026-03-27T02:49:30.150509","2026-04-10T02:46:43.945063",[120,125,130,134,139,143],{"id":121,"question_zh":122,"answer_zh":123,"source_url":124},27080,"项目是否支持 Twitch 和 YouTube 直播流？","是的，Twitch 和 YouTube 的功能已经被集成到项目中。您可以在 `services\u002Flive_stream` 目录下找到对应的模块代码。不过请注意，这些功能可能尚未经过充分测试，使用时请留意潜在的不稳定性。未来版本计划加入更多弹幕拾取策略和多平台弹幕合流系统。","https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FZerolanLiveRobot\u002Fissues\u002F1",{"id":126,"question_zh":127,"answer_zh":128,"source_url":129},27076,"在 Windows 上安装依赖时遇到 'Microsoft Visual C++ 14.0 or greater is required' 报错怎么办？","该错误通常是因为 `netifaces` 和 `webrtcvad` 等依赖库在 Windows 环境下需要编译。解决方法是安装 Visual C++ Build Tools。如果您使用的是较高版本的 Python（如 3.12+），许多包没有预编译版本，必须现场构建，因此强烈建议安装 Visual C++ Build Tools。如果不想编译，可以尝试寻找预编译包（wheel）进行安装。","https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FZerolanLiveRobot\u002Fissues\u002F2",{"id":131,"question_zh":132,"answer_zh":133,"source_url":129},27077,"项目推荐的 Python 版本是多少？","建议使用 Python 3.10 或 3.11 版本。虽然项目可能在其他版本上运行，但在较高版本（如 Python 3.12 或 3.13）中，许多依赖包缺乏预编译的二进制文件，导致安装时需要本地编译，从而容易引发环境配置问题（如缺少编译器）。使用推荐版本可以减少此类安装失败的风险。",{"id":135,"question_zh":136,"answer_zh":137,"source_url":138},27078,"为什么在 Python 3.10+ 环境下安装 requirements.txt 会失败？","部分依赖（如 `zerolan-data==1.5.0`）可能对 Python 版本有特定限制，或者在较新的 Python 版本中缺乏预编译包。如果在 Python 3.10+ 环境安装失败，请首先检查是否安装了 Visual C++ Build Tools（Windows 用户），因为失败往往是由于缺少编译工具而非单纯的版本不匹配。若问题依旧，请尝试切换至推荐的 Python 3.10 或 3.11 环境。","https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FZerolanLiveRobot\u002Fissues\u002F3",{"id":140,"question_zh":141,"answer_zh":142,"source_url":138},27079,"如何在 Windows 上使用 Conda 构建环境时避免编译错误？","即使在 Windows 上使用 Conda 构建推荐的 Python 3.11 环境，部分依赖仍可能需要 Visual C++ Build Tools 进行编译。README 中已明确说明：如果您使用较高版本的 Python，请确保已安装 Visual C++ Build Tools。这是解决 `Microsoft Visual C++ 14.0 or greater is required` 报错的关键步骤。",{"id":144,"question_zh":145,"answer_zh":146,"source_url":138},27081,"安装依赖时报错提示需要编译器，这与 Python 版本有关吗？","这主要与您环境中是否安装了 Visual C++ Build Tools 直接相关，而与 Python 版本关系不大。虽然高版本 Python 更常遇到此问题（因为缺乏预编译包），但根本原因是缺少编译工具。日志中出现的 `Microsoft Visual C++ 14.0 or greater is required` 明确指出了这一点。请优先安装 Visual C++ Build Tools，或尝试使用 Python 3.10\u002F3.11 以减少编译需求。",[148,153,158,163,168,173,178,183,188],{"id":149,"version":150,"summary_zh":151,"released_at":152},180209,"v2.3.0","**更新日志：**\n1. QQ 机器人支持文字、语音和图像的多模态回复\n2. 修复了 QQ 消息处理中 LLM 推理逻辑上的问题\n3. 修复了在无头环境中小键盘报错的问题\n\n**完整变更记录**：https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FZerolanLiveRobot\u002Fcompare\u002Fv2.2.0...v2.3.0","2026-01-17T07:07:10",{"id":154,"version":155,"summary_zh":156,"released_at":157},180210,"v2.2.0","**更新日志**：\n1. 支持了键盘热键控制麦克风的开关\n2. 修复了 TTS 流程线程阻塞的问题\n3. 修复了 OBS 字幕不同步的问题\n4. 人声响度识别已经默认关闭\n5. 实验性功能：分词推理加速、情感分析、智能记忆功能\n\n## 变更内容\n* 添加系统按键监听线程框架 | 可控制麦克风开关 | 修复 asr_handler 的多次推理bug by @Icelinea 在 https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FZerolanLiveRobot\u002Fpull\u002F4 中\n\n## 新贡献者\n* @Icelinea 在 https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FZerolanLiveRobot\u002Fpull\u002F4 中做出了首次贡献\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FZerolanLiveRobot\u002Fcompare\u002Fv2.1.4...v2.2.0","2026-01-16T12:03:22",{"id":159,"version":160,"summary_zh":161,"released_at":162},180211,"v2.1.4","**更新日志：**\n\n1. 修复了 `custom_agent` 属性被错误调用引发的异常\n2. 由于 Live2DViewer 在 Linux 上暂不支持，因此修改了其调用的逻辑以免在导入模块时报错\n3. 修复了 `screen` 属性始终为 `None` 的错误\n4. 修复了在 Windows 系统上截屏时，缩放因子 `k` 被乘算两次的错误\n5. `DeviceScreenCapturedEvent` 中的属性类型修改\n\n**完整变更记录**: https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FZerolanLiveRobot\u002Fcompare\u002Fv2.1.3...v2.1.4","2026-01-04T15:03:31",{"id":164,"version":165,"summary_zh":166,"released_at":167},180212,"v2.1.3","**更新日志：**\n\n1. 修复了 `context.py` 中未获取到环境变量 `DISPLAY` 时的报错\n2. 现在程序会自动判断操作系统是否为 Headless（无头）环境\n3. 支持了在 Linux 系统中的屏幕截图\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FZerolanLiveRobot\u002Fcompare\u002Fv2.1.2...v2.1.3","2026-01-04T05:23:13",{"id":169,"version":170,"summary_zh":171,"released_at":172},180213,"v2.1.2","**更新日志：**\n\n1. 修复了 Live2D 嘴唇不同步的问题\n2. 进一步修复了 Playground 调用时的空引用问题\n\n**完整变更记录**：https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FZerolanLiveRobot\u002Fcompare\u002Fv2.1.1...v2.1.2","2025-12-29T08:16:07",{"id":174,"version":175,"summary_zh":176,"released_at":177},180214,"v2.1.1","**更新日志**：\n\n1. 修复了启动时报错 `config` 对象已不存在 `external_tool` 字段的问题，因为该服务已被迁移至 `browser`。\n2. 修复了禁用 `playground` 后仍然会启动的问题。\n3. 当远程 TTS 不符合文件命名规则时，错误提示更加友好。\n4. `live2d-viewer` 增加了对窗口宽、高的检测，修正了原设置文件中默认提供的字段类型错误。\n5. `live2d-viewer` 现在会判断文件是否存在，以防止发生栈溢出。\n6. 限制了部分依赖的版本。\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FZerolanLiveRobot\u002Fcompare\u002Fv2.1.0...v2.1.1","2025-12-29T03:37:33",{"id":179,"version":180,"summary_zh":181,"released_at":182},180215,"v2.1.0","**更新日志**：\n1. 基于最大记录条数的简单运行时上下文短期记忆\n2. 基于向量数据库的长期记忆存储与提取\n3. OBS 直播流式打字机字幕显示与控制\n4. 系统配置和实时控制器的 WebUI 界面\n5. Live2D 形象控制，嘴型同步、自动眨眼和自主呼吸\n6. 基于 Unity 的 Live2D 形象控制和 3D 模型控制的展示应用\n7. 修复了已知 Bug\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FZerolanLiveRobot\u002Fcompare\u002Fv2.0.0...v2.1.0","2025-06-30T03:52:48",{"id":184,"version":185,"summary_zh":186,"released_at":187},180216,"v2.0.0","这是一个大版本更新，使用了新的设计架构，因此**与v1版本不兼容**。\r\n\r\n**更新日志**： \r\n1. 基于大语言模型的自然语言对话\r\n2. 根据直播间弹幕挑选并回复\r\n3. 识别用户麦克风语音输入内容，理解并回复\r\n4. 根据回复文本的带情感的语音合成\r\n5. 识别指定窗口中的文字内容\r\n6. 识别指定窗口中的图像（或视频），并理解其中的含义\r\n7. 根据上下文语境采取行动或挑选工具（百度百科、萌娘百科等）\r\n8. 根据语音指令控制 Minecraft AI 智能体\r\n9. 修复已知 Bug\r\n\r\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FZerolanLiveRobot\u002Fcompare\u002Fv1.0.0...v2.0.0","2024-11-29T16:47:38",{"id":189,"version":190,"summary_zh":191,"released_at":192},180217,"v1.0.0","已弃用的版本\n\n**完整更新日志**: https:\u002F\u002Fgithub.com\u002FAkagawaTsurunaki\u002FZerolanLiveRobot\u002Fcommits\u002Fv1.0.0","2025-06-30T03:03:55"]