Files
homeagent-sdk/README.md
root 1762f0c34b docs: 修正全部文档使其与源码实现一致
- Plugin.Start(sdk *PluginSDK) 接口签名改为指针
- 方法表重写: 移除 CallLLM/QueryKnowledge/SetMemory 等不存在方法
- IOInjector 参数顺序修正为 (source, channel, text)
- 删除虚构 SDKConfig, 替换为实际 New() 构造函数签名
- .hmap 内容描述一致化 (plugin.so + plugin.dll + main.lua)
- 添加 meta/ 包元数据文件
2026-07-18 20:47:17 +08:00

5.5 KiB
Raw Blame History

HomeAgent SDK

HomeAgent 插件开发 SDK用于构建与 HomeAgent 平台交互的智能插件。

SDK API 接口

Plugin 接口

插件需实现 Plugin 接口:

type Plugin interface {
    Name() string
    Start(sdk *PluginSDK) error
    Stop() error
}

PluginSDK 方法

通过 Start(sdk *PluginSDK) 注入的 SDK 实例提供以下方法:

分类 方法 说明
阶段钩子 RegisterStage(stage, handler, scope...) 注册阶段回调scope 可选:StageScopeGlobal(全局,默认)或 StageScopeOwnTools(仅自己工具)
输出通道 RegisterOutputChannel(name, caps, desc, handler) 注册输出通道caps 为能力位掩码
工具注册 RegisterTool(name, def, handler) 注册工具供 LLM 调用
插件 API RegisterPluginAPI(name) 注册插件 API 供其他插件访问
图记忆 Memory() 访问图记忆 API实体-关系存储)
文本记忆 TextMemory() 访问文本记忆 API时序事件
文档记忆 DocMemory() 访问文档记忆 API向量存储
社交图谱 Social() 访问社交图谱 API外部插件只读
知识库 Knowledge() 访问知识库 API
LLM LLM() 访问 LLM 提供商管理 API
设置 Settings() 访问设置 API
事件 Events() 访问事件订阅器(外部插件仅订阅)
注入 InjectText(source, channel, text) / InjectInterruptText(source, channel, text) / InjectTextNoMemory(source, channel, text) 向管道注入文本
自动重启 SetAutoRestart(enabled) / AutoRestart() 控制崩溃自动重启

阶段钩子

// 全局监听所有插件的阶段事件
sdk.RegisterStage(StagePreAction, func(ctx *StageContext) error { return nil })

// 仅监听自己注册的工具的 before_toolcall / after_toolcall
sdk.RegisterStage(StageBeforeToolcall, myHandler, StageScopeOwnTools)

输出通道

sdk.RegisterOutputChannel("my-channel", CapText|CapFile, "通道描述", handler)

能力标志位:

标志 说明
CapText 1 纯文本输出
CapFile 2 文件输出
CapImage 4 图片输出
CapAudio 8 音频输出
CapStructured 16 结构化数据输出

IOInjector 通道路由

方法 说明
InjectText(source, channel, text) 注入文本,记入内存,路由到指定通道
InjectInterruptText(source, channel, text) 注入中断文本,打断当前处理,路由到指定通道
InjectTextNoMemory(source, channel, text) 注入文本,不记入内存,路由到指定通道

source 标识来源,channel 指定目标输出通道。

Triple 扩展字段

Triple 数据结构新增字段:

  • Confidence — 置信度0.0~1.0
  • SubjectType — 主体类型
  • ObjectType — 客体类型

New 构造函数

New() 由内核在加载插件时调用,插件开发者无需手动构造 PluginSDK

func New(name string, sett SettingsAPI, regTool ToolRegistrar, regStage StageRegistrar, regAPI APIRegistrar, regOutput OutputChannelRegistrar) *PluginSDK

插件开发者只需实现 Plugin 接口并导出 NewPlugin() 入口函数。

plugindev 工具链

plugindev 提供插件开发全流程支持:

命令 说明
plugindev init 初始化插件项目(生成 plg.json、入口模板
plugindev build 构建插件,输出 .hmap 包
plugindev clean 清理构建产物
plugindev debug 本地调试模式运行插件

支持 GoLua 两种插件语言。

plg.json 清单格式

{
  "name": "my-plugin",
  "version": "1.0.0",
  "lang": "go",
  "entry": "main.go",
  "description": "插件描述",
  "channels": ["my-channel"],
  "dependencies": {}
}

.hmap 包格式

.hmap 为 ZIP 归档,包含:

  • plugin.json — 插件元数据
  • plugin.so — Go 编译产物Linux
  • plugin.dll — Go 编译产物Windows
  • main.lua — Lua 插件入口Lua 插件时)

插件生命周期

启动与停止

  • Start(sdk *PluginSDK) error — 插件启动,接收 SDK 实例
  • Stop() error — 插件停止,释放资源

自动重启

sdk.SetAutoRestart(true)
// 查询状态
enabled := sdk.AutoRestart()

插件崩溃时平台自动拉起,保障服务可用性。

受限 SDK vs 完整 SDK

外部插件(第三方分发)使用受限 SDK,仅暴露安全子集:

受限 API 允许操作
SocialAPI 只读:GetPersonGetTraitGetRelationsGetNetworkListPersons
EventSubscriber 仅订阅:Subscribe(无 Publish

内部插件(平台内置)拥有完整 SDK 访问权限,包括 SocialAPI 写操作和 EventPublisher。

示例插件

插件 说明
a2a Agent-to-Agent 协议通信
bili Bilibili 数据获取
editdoc 文档编辑
files 文件管理
memo 备忘录/记忆
ocr 光学字符识别
qq QQ 消息集成
sanitizer 内容清洗/安全过滤
web 网页浏览与交互
webfetch 网页内容抓取

构建与安装

构建

plugindev build

输出 .hmap 包到项目目录。

安装

通过 pluginmgr HTTP API 安装:

curl -X POST http://<host>:<port>/api/plugins/install \
  -F "package=@my-plugin.hmap"

或手动将 .hmap 放入插件目录后重启平台。