mirror of
https://github.com/agentscope-ai/ReMe.git
synced 2026-10-03 02:24:31 +00:00
120 lines
4 KiB
Markdown
120 lines
4 KiB
Markdown
# 钉钉插件
|
||
|
||
[English](README.md)
|
||
|
||
钉钉插件为 ReMe 提供 Markdown 主动通知和长期运行的 Agent 对话桥接。本目录是一个独立 Python distribution;
|
||
`reme.plugins` entry point 暴露只包含 backend 的 `plugin.yaml`,注册 `dingtalk_markdown_send_step` 和
|
||
`dingtalk_wait_step`。Application 自行决定是否以及如何使用这些 backend;仅启用插件不会暴露发送 endpoint,也不会
|
||
启动长期连接。
|
||
|
||
## 快速开始
|
||
|
||
安装 ReMe 和插件:
|
||
|
||
```bash
|
||
python -m pip install "reme-ai[core]>=0.4.1.12"
|
||
reme plugins install plugins/dingtalk
|
||
reme plugins validate dingtalk
|
||
```
|
||
|
||
配置企业内部应用机器人的凭据和目标群会话 ID:
|
||
|
||
```dotenv
|
||
DINGTALK_APP_KEY=your-app-key
|
||
DINGTALK_APP_SECRET=your-app-secret
|
||
DINGTALK_ROBOT_CODE=your-robot-code
|
||
DINGTALK_CONVERSATION_IDS=cid-group-one,cid-group-two
|
||
```
|
||
|
||
仓库内置的 `cookbook` 配置会组合钉钉、Auto Fin 和 Daily Paper 三个独立安装的插件:
|
||
|
||
```bash
|
||
reme plugins install plugins/auto-fin
|
||
reme plugins install plugins/daily_paper
|
||
reme start config=cookbook
|
||
```
|
||
|
||
`cookbook.yaml` 负责跨插件路由:在自动标签之后追加通知 Step,让手动 Job 与 cron Job 复用同一 pipeline,并显式以
|
||
background Job 启动钉钉 Agent bridge。两个业务插件仍可完全脱离钉钉使用。
|
||
|
||
## Markdown 发送 Job 示例
|
||
|
||
需要直接发送时,可以在 Application 配置中添加一个私有 one-shot Job:
|
||
|
||
```yaml
|
||
extends: default
|
||
plugins: [dingtalk]
|
||
|
||
jobs:
|
||
dingtalk_send:
|
||
backend: base
|
||
enable_serve: false
|
||
parameters:
|
||
type: object
|
||
properties:
|
||
markdown_path:
|
||
type: string
|
||
required: [markdown_path]
|
||
steps:
|
||
- backend: dingtalk_markdown_send_step
|
||
app_key: ${DINGTALK_APP_KEY}
|
||
app_secret: ${DINGTALK_APP_SECRET}
|
||
robot_code: ${DINGTALK_ROBOT_CODE}
|
||
conversation_ids: ${DINGTALK_CONVERSATION_IDS:-}
|
||
timeout: 15
|
||
```
|
||
|
||
无需通过 HTTP 或 MCP 暴露即可运行:
|
||
|
||
```bash
|
||
reme start config=/path/to/dingtalk.yaml \
|
||
job=dingtalk_send \
|
||
markdown_path=daily/2026-09-15/report.md
|
||
```
|
||
|
||
`markdown_path` 必须指向 workspace 内真实存在的 `.md` 文件。消息会去掉 frontmatter,再按配置顺序串行发送到每个
|
||
非空的逗号分隔会话 ID。未配置会话 ID 时,发送会无副作用成功跳过;一旦配置了接收方,凭据缺失、路径无效、正文
|
||
为空、token 获取失败或部分接收方发送失败都会明确令 Job 失败。响应 metadata 会记录配置数与成功数,但日志不会
|
||
输出凭据或会话 ID。
|
||
|
||
## Agent 对话桥接
|
||
|
||
桥接会为每个“发送者 + 会话”维护独立 Agent session,支持 ReMe 的 session 命令,并以 Markdown 返回 Agent 的最终
|
||
回复。可在继承内置默认配置的应用文件中添加以下后台 Job:
|
||
|
||
```yaml
|
||
extends: default
|
||
plugins: [dingtalk]
|
||
|
||
jobs:
|
||
dingtalk_agent:
|
||
backend: background
|
||
supervisor: true
|
||
close_timeout: 10
|
||
steps:
|
||
- backend: dingtalk_wait_step
|
||
agent_wrapper: default
|
||
app_key: ${DINGTALK_APP_KEY}
|
||
app_secret: ${DINGTALK_APP_SECRET}
|
||
robot_code: ${DINGTALK_ROBOT_CODE}
|
||
worker_count: 4
|
||
builtin_tools: false
|
||
job_tools: [search, read]
|
||
```
|
||
|
||
`reme/config/cookbook.yaml` 已启用同样的后台 Job。独立使用时通过 `reme start config=/path/to/dingtalk.yaml` 启动。
|
||
后台 Job 不会暴露为 HTTP endpoint 或 MCP tool。不同 session key
|
||
可以并发处理,同一 key 的消息保持串行。Session ID 只存放在 `ApplicationContext.metadata`,重启 ReMe 后会重新建立
|
||
钉钉到 Agent 的 session 映射。模型访问与权限由配置的 `agent_wrapper` 决定,只应授予机器人必需的内置工具和 Job。
|
||
|
||
## 开发验证
|
||
|
||
在仓库根目录运行:
|
||
|
||
```bash
|
||
reme plugins install ./plugins/dingtalk --editable
|
||
reme plugins validate dingtalk
|
||
python -m pytest plugins/dingtalk -v
|
||
```
|
||
|
||
测试会 mock 钉钉 HTTP、WebSocket 和 Agent 边界,不访问外部服务。
|