Pi Bot 是一个与聊天平台无关的持久化 Agent 核心,只处理对话语义、模型调用、记忆、多模态引用和可靠出站队列,不包含任何具体 IM SDK 或消息网关。

Stars

3

7 天增长

暂无数据

Fork 数

2

开放 Issue

0

开源协议

MIT

最近更新

2026-07-29

AI 仓库情报摘要
FR-AI / ANALYSIS

为什么值得关注

它通过标准化适配器接口和版本化能力声明,将聊天平台与核心逻辑彻底分离,并内置幂等、串行处理、原子提交等可靠性保障,同时严格管控模型对平台功能的访问。

适合谁使用

  • 构建多平台聊天机器人后端的开发者
  • 需要将不同 IM SDK 接入统一 Agent 核心的平台集成者
  • 需要持久化、带有记忆且具备可靠性保证的对话式 Agent 的团队
  • 设计安全可审计、能力受控的 Agent 架构的工程师

典型使用场景

  • 构建一个能同时运行在 Discord、Telegram、Slack 及自定义聊天平台上的单一 Agent
  • 创建具备完整群聊历史感知和长期记忆的群组聊天机器人
  • 实现能处理媒体、提及和工具调用,同时保持消息幂等处理的 Agent
  • 开发高可靠性聊天机器人,重启后仍能恢复未完成的出站消息

项目优势

  • 通过标准化适配器接口和版本化特性声明实现平台无关性
  • 通过事件幂等、会话串行化和原子出站提交实现强大的可靠性模型
  • 模块化设计将对话记录、长期记忆和行为分离,便于审计
  • 安全的能力暴露机制,防止模型访问未经配置的工具或平台资源

使用前须知

  • 要求 Node.js 22.13 及以上版本,运行环境门槛较高
  • 未内置任何具体 IM 平台的适配器,所有适配器需外部开发
  • 仅支持文本、媒体和文件附件,不原生支持按钮、表单等交互式 UI 组件
  • 对高级平台特性需要复杂的适配器清单和能力声明配置

README 快速开始

Pi Bot

Pi Bot 是一个与聊天平台无关的持久化 Agent 核心。它只处理对话语义、模型调用、记忆、多模态引用和可靠出站队列,不包含任何具体 IM SDK、登录协议或消息网关实现。

IM SDK / Gateway
       ↕
ChannelAdapter + ChannelPlugin v1
       ↕
ChannelRuntime
       ↕
GroupAgentCore → Pi Agent → durable outbox

具体平台通过仓库外的适配包接入。适配器负责原生事件转换和消息发送;核心只接收标准事件、输出标准动作,并按适配器声明的能力做运行时校验。

特性

  • 完整保存未触发机器人的群聊消息,后续回复仍能理解真实上下文。
  • transcript、长期 memory、behavior 三层状态相互独立且可审计。
  • 入站事件幂等、同会话串行、回复与 outbox 原子提交。
  • 支持文本、图片、音频、语音、视频、文件、链接、引用和成员提及。
  • 媒体只保存 AssetRef,二进制内容位于独立的 AssetStore
  • 适配器用版本化 feature 声明收发能力,用强类型 capability 暴露可选操作。
  • capability 不会自动成为模型工具;只有显式配置的 toolProviders 能进入 Pi。
  • 支持按需图片理解、附件检查、知识检索、MCP 工具和语音生成。
  • 群聊触发支持点名、唤醒词、引用、自然续聊、always-on 和关闭模式。
  • 模型可选择沉默,不会向群聊发送内部占位符。

环境

  • Node.js >= 22.13
  • 一个 Pi 支持的模型 API key
npm ci
npm run check

最小用法

import { getModel } from "@earendil-works/pi-ai";
import {
  CHANNEL_PLUGIN_API_VERSION,
  ChannelRuntime,
  GroupAgentCore,
  PiAgentRunner,
  defineChannelPlugin,
} from "pi-bot";

const core = new GroupAgentCore({
  bot: {
    id: "bot-1",
    displayName: "小派",
    wakeWords: ["派派", "小派"],
  },
  runner: new PiAgentRunner({
    model: getModel("anthropic", "claude-sonnet-4-6"),
    apiKey: () => process.env.ANTHROPIC_API_KEY,
    thinkingLevel: "low",
  }),
  databasePath: "./data/agent.sqlite",
  defaultGroupActivation: "mention",
  operatorIds: ["operator-1"],
});

const plugin = defineChannelPlugin({
  apiVersion: CHANNEL_PLUGIN_API_VERSION,
  id: "example-adapter-instance",

  async start(context) {
    sdk.onMessage(async (raw) => {
      await context.ingest({
        type: "message",
        id: raw.eventId,
        transportMessageId: raw.messageId,
        conversation: {
          id: raw.conversationId,
          kind: raw.isGroup ? "group" : "direct",
          title: raw.conversationTitle,
        },
        sender: {
          id: raw.senderId,
          displayName: raw.senderName,
        },
        text: raw.text,
        timestamp: raw.timestamp,
        mentions: raw.mentionedBot ? [{ id: "bot-1" }] : [],
      });
    });
  },

  async send(action) {
    await sdk.send({
      conversationId: action.conversationId,
      text: action.text,
      parts: action.parts,
      replyTo: action.replyToMessageId,
      idempotencyKey: action.id,
    });
  },

  async stop() {
    await sdk.close();
  },
});

const runtime = new ChannelRunti

相关仓库与替代方案

根据分类、Topic 和编程语言匹配的相似项目。

TanStack
精选
TanStack GitHub avatar

router

TanStack Router is a type-safe, data-driven React router with built-in caching, prefetching, and nested layouts, while TanStack Start extends it into a full-stack SSR framework.

Web 开发前端框架
14,861
vercel-labs
精选
vercel-labs GitHub avatar

scriptc

scriptc compiles ordinary TypeScript into small, fast native executables without needing Node.js, V8, or any JavaScript runtime in the binary.

开发者工具代码质量与构建
1,985
Jakubantalik
精选
Jakubantalik GitHub avatar

thinking-orbs

A React component library that renders six hand-tuned animated thought orb loading indicators on a plain 2D canvas, with two purpose-tuned sizes and automatic theme detection for AI and agent UIs.

AI 与机器学习AI 智能体
1,191