* feat(plugins): extract DingTalk integration * feat(config): complete cookbook model setup * docs(config): add cookbook startup guide * fix(config): clarify DingTalk Claude tool access
3.9 KiB
钉钉插件
钉钉插件为 ReMe 提供 Markdown 主动通知和长期运行的 Agent 对话桥接。本目录是一个独立 Python distribution;
reme.plugins entry point 暴露只包含 backend 的 plugin.yaml,注册 dingtalk_markdown_send_step 和
dingtalk_wait_step。Application 自行决定是否以及如何使用这些 backend;仅启用插件不会暴露发送 endpoint,也不会
启动长期连接。
快速开始
安装 ReMe 和插件:
python -m pip install "reme-ai[core]>=0.4.1.12"
reme plugins install reme-dingtalk
reme plugins validate dingtalk
配置企业内部应用机器人的凭据和目标群会话 ID:
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 三个独立安装的插件:
reme plugins install reme-auto-fin
reme plugins install reme-daily-paper
reme start config=cookbook
cookbook.yaml 负责跨插件路由:在自动标签之后追加通知 Step,让手动 Job 与 cron Job 复用同一 pipeline,并显式以
background Job 启动钉钉 Agent bridge。两个业务插件仍可完全脱离钉钉使用。
Markdown 发送 Job 示例
需要直接发送时,可以在 Application 配置中添加一个私有 one-shot Job:
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 暴露即可运行:
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:
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。
开发验证
在仓库根目录运行:
reme plugins install ./plugins/dingtalk --editable
reme plugins validate dingtalk
python -m pytest plugins/dingtalk -v
测试会 mock 钉钉 HTTP、WebSocket 和 Agent 边界,不访问外部服务。