当前位置: 首页 > article >正文

【Nanobot】README09_LEVEL4 添加新聊天渠道

【Nanobot】README09_LEVEL4 添加新聊天渠道源码地址https://github.com/HKUDS/nanobot 目标指导如何为 nanobot 添加新的聊天渠道如 Signal、Matrix、Line 等。 添加新 Channel 的步骤步骤 1创建 Channel 类文件nanobot/channels/signal.pyfromnanobot.channels.baseimportBaseChannelfromnanobot.bus.eventsimportInboundMessage,OutboundMessagefromnanobot.bus.queueimportMessageBusfromtypingimportAnyclassSignalChannel(BaseChannel): Signal 消息渠道实现。 特性 1. 接收 Signal 消息 2. 发送消息到 Signal 3. 支持流式输出可选 namesignaldisplay_nameSignaldef__init__(self,config:Any,bus:MessageBus):super().__init__(config,bus)# 初始化 Signal 客户端importsignalbot self.botsignalbot.Bot(config.phone_number)self._runningFalseasyncdefstart(self)-None:启动 Signal Bot。self._runningTrue# 注册消息处理器self.bot.handler()asyncdefon_message(message):awaitself._handle_message(sender_idstr(message.source),chat_idstr(message.chat_id),contentmessage.text,mediamessage.attachmentsor[],)# 启动 Botawaitself.bot.start()asyncdefstop(self)-None:停止 Signal Bot。self._runningFalseawaitself.bot.stop()asyncdefsend(self,msg:OutboundMessage)-None:发送消息到 Signal。awaitself.bot.send_message(chat_idmsg.chat_id,textmsg.content,quote_reply_tomsg.reply_to,)步骤 2实现流式输出可选如果 Channel 支持编辑消息如 Telegram可以实现流式输出asyncdefsend_delta(self,chat_id:str,delta:str,metadata:dict[str,Any]|NoneNone,)-None: 交付流式文本块。 实现 1. 提取 stream_id 2. 第一条消息 → 发送新消息 3. 后续消息 → 编辑已有消息 4. _stream_end → 清理缓冲区 stream_idmetadata.get(_stream_id)ifmetadataelseNoneifnotstream_id:returnifmetadata.get(_stream_delta):# 增量内容ifstream_idnotinself._edit_buffers:# 发送第一条消息sent_msgawaitself.bot.send_message(chat_idchat_id,textdelta,)self._edit_buffers[stream_id]sent_msgelse:# 编辑已有消息old_msgself._edit_buffers[stream_id]new_contentold_msg.textdeltaawaitold_msg.edit(textnew_content)elifmetadata.get(_stream_end):# 流式结束ifstream_idinself._edit_buffers:delself._edit_buffers[stream_id]步骤 3添加配置字段文件nanobot/config/schema.py在ChannelsConfig中添加字段classChannelsConfig(Base):telegram:TelegramConfig|NoneNonediscord:DiscordConfig|NoneNonesignal:SignalConfig|NoneNone# 新增classSignalConfig(Base):enabled:boolFalsephone_number:strallow_from:list[str][*]# 访问控制列表步骤 4配置新 Channel文件~/.nanobot/config.json{channels:{signal:{enabled:true,phoneNumber:1234567890,allowFrom:[*]}}}步骤 5测试新 Channel# 启动 gatewaynanobot gateway# 在 Signal 中发送消息给 Bot# 应该收到回复 高级插件化 Channel如果希望将 Channel 作为独立插件发布不修改核心代码可以使用entry_points。项目结构nanobot-signal/ ├── nanobot_signal/ │ └── __init__.py └── pyproject.tomlpyproject.toml[project] name nanobot-signal version 0.1.0 [project.entry-points.nanobot.channels] signal nanobot_signal:SignalChannel [project.dependencies] nanobot-ai 0.1.0 signalbot *nanobot_signal/__init__.pyfromnanobot.channels.baseimportBaseChannelfromnanobot.bus.queueimportMessageBusfromtypingimportAnyclassSignalChannel(BaseChannel):namesignaldisplay_nameSignaldef__init__(self,config:Any,bus:MessageBus):super().__init__(config,bus)# ... 实现代码 ...安装和使用# 安装插件pipinstallnanobot-signal# 配置不需要修改核心代码cat~/.nanobot/config.jsonEOF { channels: { signal: { enabled: true } } } EOF# 启动nanobot gateway 检查清单实现BaseChannel接口start()- 启动监听send()- 发送消息stop()- 停止监听处理消息接收消息并调用_handle_message()支持媒体文件图片、文档等支持音频转录可选实现流式输出可选send_delta()- 增量更新消息编辑缓冲区添加配置字段在schema.py中添加配置类在config.json中启用测试基本对话功能工具调用流式输出如果支持访问控制allow_from 完整示例添加 Email ChannelEmail Channel 已经内置参考实现文件nanobot/channels/email.pyclassEmailChannel(BaseChannel):电子邮件渠道。nameemaildisplay_nameEmailasyncdefstart(self):启动 IMAP 监听。importimaplib self.imapimaplib.IMAP4_SSL(self.config.imap_server)self.imap.login(self.config.email,self.config.password)self.imap.select(INBOX)whileself._running:# 轮询新邮件awaitself._check_new_emails()awaitasyncio.sleep(30)asyncdefsend(self,msg:OutboundMessage):发送邮件。importsmtplibfromemail.messageimportEmailMessage emailEmailMessage()email[From]self.config.email email[To]msg.chat_id email.set_content(msg.content)withsmtplib.SMTP_SSL(self.config.smtp_server)assmtp:smtp.login(self.config.email,self.config.password)smtp.send_message(email) 相关文件nanobot/channels/base.py- BaseChannel 抽象基类nanobot/channels/telegram.py- Telegram 实现示例nanobot/channels/discord.py- Discord 实现示例nanobot/config/schema.py- 配置模式 完成分析全部 9 个分析单元已完成生成的文档列表✅ README01_LEVEL1_项目架构与目录说明.md✅ README02_LEVEL2_Agent核心循环设计.md✅ README03_LEVEL2_工具系统架构.md✅ README04_LEVEL2_提供商系统设计.md✅ README05_LEVEL2_渠道系统设计.md✅ README06_LEVEL3_消息流转深度追踪.md✅ README07_LEVEL3_会话管理与记忆.md✅ README08_LEVEL4_添加新LLM提供商.md✅ README09_LEVEL4_添加新聊天渠道.md文档位置.aitalk/目录建议阅读顺序README01 → README02 → … → README09

相关文章:

【Nanobot】README09_LEVEL4 添加新聊天渠道

【Nanobot】README09_LEVEL4 添加新聊天渠道 源码地址:https://github.com/HKUDS/nanobot 🎯 目标 指导如何为 nanobot 添加新的聊天渠道(如 Signal、Matrix、Line 等)。 📋 添加新 Channel 的步骤 步骤 1&#xff1…...

在 WSL 中下载安装 MySQL,连接到 SQLyog(MySQL 安装在 WSL vs Windows 本地对比)

本文详细介绍了在Linux系统中检查MySQL服务状态的方法,包括使用ps -ef | grep mysql命令和排除grep进程的优化版本。 同时提供了MySQL安装验证和WSL环境下的配置指南,重点解决SQLyog连接WSL中MySQL的问题。 关键步骤包括:修改MySQL配置文件中…...

窗口尺寸自由掌控:SRWE如何让任意程序窗口随心所欲

窗口尺寸自由掌控:SRWE如何让任意程序窗口随心所欲 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 你是否曾为某个应用程序的固定窗口尺寸感到束手无策?想在高分辨率下截图却受限于游戏设…...

无线门铃、车库遥控与物联网:聊聊OOK(2ASK)调制那些老技术的新应用

无线门铃、车库遥控与物联网:聊聊OOK(2ASK)调制那些老技术的新应用 在智能家居和物联网设备大行其道的今天,一种诞生于上世纪中期的通信技术——OOK(On-Off Keying)调制,依然活跃在无线门铃、车…...

解锁AI编程新体验:开源助手完整配置指南

解锁AI编程新体验:开源助手完整配置指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your trial request li…...

GCC __builtin函数避坑指南:让你的跨平台C代码在ARM和x86上都跑得稳

GCC __builtin函数跨平台避坑实战:ARM与x86兼容性深度解析 在嵌入式开发与高性能计算领域,GCC编译器的__builtin函数集一直是开发者提升性能的利器。但当代码需要同时运行在ARM架构的嵌入式设备和x86架构的服务器上时,这些看似美妙的"魔…...

【紧急预警】传统文献管理正被淘汰!农科院最新评估:未集成NotebookLM的课题组结题延迟平均达4.8个月

更多请点击: https://codechina.net 第一章:NotebookLM农业科学研究的范式革命 传统农业科研长期依赖人工文献综述、田间数据手工录入与孤立模型验证,知识整合效率低、跨尺度分析能力弱。NotebookLM 以“文档即计算单元”的设计理念切入&…...

PerimeterX PX3/PX2 按压验证码逆向:从初始化到WASM关键校验的完整流程剖析

1. PerimeterX按压验证码技术背景解析 第一次遇到PerimeterX的PX3/PX2按压验证码时,我正帮朋友调试一个电商爬虫。那会儿鼠标按下去死活过不了验证,控制台里全是看不懂的加密参数。这种验证码和传统图形验证码完全不同,它更像一个完整的安全防…...

【电影研究者的AI护城河】:NotebookLM深度定制教程——仅限高校影视实验室内部流传的6大高阶技巧

更多请点击: https://codechina.net 第一章:NotebookLM电影研究辅助的底层逻辑与范式迁移 NotebookLM 并非传统意义上的“AI笔记工具”,而是一个以语义理解为核心、以用户自有资料为知识边界的可验证推理引擎。其在电影研究领域的应用&#…...

IR 召回评测基准(英文数据集)——MS MARCO 实战指南

1. MS MARCO数据集全景解读 第一次接触MS MARCO时,我和大多数开发者一样困惑:这个号称"信息检索领域ImageNet"的数据集到底强在哪里?经过三个实际项目的验证,我发现它的价值在于完美复现了真实搜索场景的复杂性。想象你…...

为什么92%的团队在2026年前仓促重构AI栈?——主流框架弃用预警、许可证变更清单与平滑迁移路线图

更多请点击: https://intelliparadigm.com 第一章:2026年AI工具栈搭建完整指南 构建面向生产环境的AI工具栈,需兼顾前沿性、稳定性与可扩展性。2026年主流实践已从单点模型调用转向模块化、可观测、可编排的智能工作流基础设施。以下为推荐技…...

终极ASI加载器:Windows游戏修改的完整解决方案

终极ASI加载器:Windows游戏修改的完整解决方案 【免费下载链接】Ultimate-ASI-Loader The Ultimate ASI Loader is a proxy DLL that loads custom .asi libraries into any game process. 项目地址: https://gitcode.com/gh_mirrors/ul/Ultimate-ASI-Loader …...

基于NUC980开发板的嵌入式国学唐诗学习机全栈开发实践

1. 项目概述:当嵌入式开发板遇上国学经典最近在捣鼓一块NUC980开发板,具体型号是NK-980IoT。这板子性能不错,接口也丰富,但总感觉拿它跑个简单的网络服务或者做个数据采集有点“大材小用”。正好家里小朋友开始背唐诗,…...

单卡训练mmsegmentation模型?先把这个SyncBN改成BN(附完整配置文件修改指南)

单卡训练mmsegmentation模型?先解决SyncBN这个关键配置 当你第一次在个人电脑或实验室的单一GPU设备上运行mmsegmentation训练脚本时,屏幕上突然弹出的SyncBN相关错误信息可能会让兴奋的心情瞬间跌入谷底。这个看似简单的配置问题,实际上反映…...

WinForm上位机实战:5分钟用C#连接西门子PLC(Modbus TCP,含仿真环境搭建)

WinForm上位机实战:5分钟用C#连接西门子PLC(Modbus TCP,含仿真环境搭建) 工业自动化领域中,上位机与PLC的通信是核心技术之一。本文将带您快速实现一个基于C# WinForm的西门子PLC监控系统,全程采用Modbus T…...

3步实现微信聊天记录永久备份:WeChatExporter完整解决方案

3步实现微信聊天记录永久备份:WeChatExporter完整解决方案 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾因手机丢失或系统更新而永远丢失珍贵的微信…...

Ubuntu 18.04.6 从零到一:新手避坑与高效配置实战指南

1. 为什么选择Ubuntu 18.04.6? Ubuntu 18.04.6是长期支持版本(LTS)的最终更新,特别适合需要稳定系统的用户。相比最新版本,它的软件生态更成熟,社区支持更完善。我实测发现,这个版本对老硬件兼容…...

基于ARM嵌入式平台与AI视觉的输电线路智能巡检系统设计与实现

1. 项目概述:输电线路巡检的智能化转型 输电线路作为电力系统的“大动脉”,其安全稳定运行至关重要。传统的线路巡检主要依赖人工,巡检人员需要跋山涉水,通过望远镜、红外测温仪等设备进行观测和记录。这种方式不仅劳动强度大、效…...

CVAT 实战指南:从界面布局到高效标注全解析

1. CVAT初识:为什么选择这个标注工具? 第一次接触CVAT时,我正为一个自动驾驶项目寻找合适的标注工具。试过市面上七八款工具后,CVAT的开源免费特性立刻吸引了我——这对预算有限的小团队简直是救命稻草。更惊喜的是,它…...

英特尔马来西亚六厂布局:先进封装如何重塑半导体制造与供应链

1. 项目概述:从一则新闻到半导体制造的全球拼图前几天,行业里不少朋友都在转一条消息,说英特尔在马来西亚的封装产能布局又有新动作,计划要搞到六座工厂的规模。乍一看,这好像就是个普通的海外建厂新闻,但如…...

SecureCRT 9.1.0不止是安装:揭秘高级功能如会话日志、脚本自动化与安全配置最佳实践

SecureCRT 9.1.0高阶实战:从会话审计到自动化运维的全栈指南 SecureCRT早已超越基础终端工具的范畴,成为运维工程师手中的瑞士军刀。当大多数教程还在反复讲解安装步骤时,真正的高阶用户已经在用会话日志构建操作审计体系,通过脚本…...

LabVIEW通过OPC DA连接任意PLC:架构、配置与实战指南

1. 项目概述:为什么是LabVIEWOPC? 如果你在工业自动化、测试测量或者数据采集领域摸爬滚打过一阵子,大概率听过LabVIEW的大名,也可能被各种PLC(可编程逻辑控制器)五花八门的通讯协议搞得头疼。把LabVIEW和任…...

高效跨平台网盘直链解析工具:5步配置实战指南

高效跨平台网盘直链解析工具:5步配置实战指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅…...

免费开源AMD Ryzen处理器调试工具:SMUDebugTool终极指南

免费开源AMD Ryzen处理器调试工具:SMUDebugTool终极指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://…...

晶晨T972嵌入式主板开发指南:从硬件选型到量产部署

1. 项目概述:一颗“芯”引发的性价比革命 最近在嵌入式开发圈和智能硬件圈里,一个消息传得挺火:亮钻推出了一款基于晶晨T972平台的高性价比主板。对于很多正在寻找稳定、高性能且成本可控的解决方案的开发者、产品经理和创客来说,…...

C++ 列表初始化容器

initializer_list是一个模板类&#xff0c;可能你已经用过它了但不知道而已&#xff0c;比如下面的代码就用了 #include <iostream> #include <vector>int main() {std::vector<int> vc({ 1,2,3,4 }); //这里调用了构造函数&#xff0c;实参为{1,2,3,4}ret…...

【困难】不用任何比较判断找出两个数中较大的数-Java:解法一

分享一个大牛的人工智能教程。零基础&#xff01;通俗易懂&#xff01;风趣幽默&#xff01;希望你也加入到人工智能的队伍中来&#xff01;请轻击人工智能教程大家好&#xff01;欢迎来到我的网站&#xff01; 人工智能被认为是一种拯救世界、终结世界的技术。毋庸置疑&#x…...

【困难】字符串匹配问题-Java:递归解法

分享一个大牛的人工智能教程。零基础&#xff01;通俗易懂&#xff01;风趣幽默&#xff01;希望你也加入到人工智能的队伍中来&#xff01;请轻击人工智能教程大家好&#xff01;欢迎来到我的网站&#xff01; 人工智能被认为是一种拯救世界、终结世界的技术。毋庸置疑&#x…...

如何在浏览器中实现专业级Markdown文档实时渲染:完整配置指南

如何在浏览器中实现专业级Markdown文档实时渲染&#xff1a;完整配置指南 【免费下载链接】markdown-viewer Markdown Viewer / Browser Extension 项目地址: https://gitcode.com/gh_mirrors/ma/markdown-viewer Markdown Viewer是一款功能强大的浏览器扩展&#xff0c…...

RPG Maker MV/MZ游戏资源解密工具:5分钟解锁游戏素材的完整指南

RPG Maker MV/MZ游戏资源解密工具&#xff1a;5分钟解锁游戏素材的完整指南 【免费下载链接】RPG-Maker-MV-Decrypter You can decrypt RPG-Maker-MV Resource Files with this project ~ If you dont wanna download it, you can use the Script on my HP: 项目地址: https:…...