Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
6b39717
增加subagent编排功能
advent259141 Jan 26, 2026
6d47663
修复了一些已知问题
advent259141 Jan 26, 2026
3cf0880
修复bug,优化前端页面
advent259141 Jan 26, 2026
c3e4a52
修复格式
advent259141 Jan 26, 2026
b3a1f4c
再次修复格式
advent259141 Jan 26, 2026
1bd8eae
按照comment进行一些小改动
advent259141 Jan 26, 2026
053c4e9
优化tool选择的下拉框:根据插件分组
advent259141 Jan 26, 2026
60492d4
Merge branch 'master' into Astrbot_skill
advent259141 Jan 29, 2026
738e69a
add 3-mode selector and main tool mounting policy
advent259141 Jan 29, 2026
831c215
Merge remote-tracking branch 'origin/master' into Astrbot_skill
Soulter Jan 29, 2026
4ea865f
feat: add cron job management tools and dashboard integration
Soulter Jan 31, 2026
0c5308a
refactor: extract main agent
Soulter Jan 31, 2026
b48e6fb
Merge remote-tracking branch 'origin/master' into Astrbot_skill
Soulter Jan 31, 2026
7f58a83
Refactor cron job handling and enhance proactive agent capabilities
Soulter Feb 1, 2026
83288ca
ruff format
Soulter Feb 1, 2026
4c8c87d
feat: enhance cron job management and update UI terminology
Soulter Feb 1, 2026
bddf7b8
feat: add proactive messaging support and enhance message handling in…
Soulter Feb 1, 2026
1936760
feat: implement history persistence for agent interactions and enhanc…
Soulter Feb 1, 2026
cd6cb1d
chore: remove reminder
Soulter Feb 1, 2026
9bf6335
feat: enhance UI for SubAgent and CronJob management with beta indica…
Soulter Feb 1, 2026
2213fb1
feat: add proactive messaging support in CronJobPage and enhance file…
Soulter Feb 1, 2026
313a6d8
fix: improve error handling for temporary file removal in FileDownloa…
Soulter Feb 1, 2026
bf58776
feat: enhance FileDownloadTool to confirm file removal and successful…
Soulter Feb 1, 2026
3f8d8b5
feat: integrate subagent orchestrator with configuration options for …
Soulter Feb 1, 2026
f66edc8
feat: implement CronJob system with support for one-time tasks and en…
Soulter Feb 1, 2026
382aaaf
feat: i18n
Soulter Feb 1, 2026
45c9db2
feat: add support for resolving file paths from sandbox and downloadi…
Soulter Feb 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions ASYNC_TASK_new.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
我需要让 Agent 能够在未来提醒自己去做某些事情,这样 Agent 能够主动地去完成一些任务,而不是等用户主动来下达命令。

你需要实现一个 CronJob 系统,允许 Agent 创建未来任务,并且在未来的某个时间点自动触发这些任务的执行.

CronJob 系统分为 BasicCronJob 和 ActiveAgentCronJob 两种类型。前者只是简单的提供一个定时任务功能(给插件用),而后者则允许 Agent 主动地去完成一些任务。BasicCronJob 不必多说,就是定时执行某个函数。对于 ActiveAgentCronJob,Agent 应该可以主动管理(比如通过Tool来管理)这些 CronJobs,当添加的时候,Agent 可以给 CronJob 捎一段文字,以说明未来的自己需要做什么事情。比如说,Agent 在听到用户 “每天早上都给我整理一份今日早报” 之后,应该可以创建 Cron Job,并且自己写脚本来完成这个任务,并且注册 cron job。Agent 给未来的自己捎去的信息应该只是呈现为一段文字,这样可以保持设计简约。当触发后, CronJobManager 会调用 MainAgent 的一轮循环,MainAgent 通过上下文知道这是一个定时任务触发的循环,从而执行相应的操作。

此外,我还有一个需求,后台长任务。需要给当前的 FunctionTool 类增加一个属性,is_background_task: bool = False,插件可以通过这个属性来声明这是一个异步任务。这是为了解决一些 Tool 需要长时间运行的问题,比如 Deep Search tool 需要长时间搜索网页内容、Sub Agent 需要长时间运行来完成一个复杂任务。

基于上面的讨论,我觉得,应该:

1. 需要给当前的 FunctionTool 类增加一个属性is_background_task: bool = False,tool runner 在执行这个 tool 的时候,如果发现是后台任务,就不等待结果返回,而是直接返回一个任务 ID (已经创建成功提示)的结果,tool runner 在后台继续执行这个任务。当任务完成之后,任务的结果回传给 MainAgent(其实就是再执行一次 main agent loop,但是上下文应该是最新的),并且 MainAgent 此时应该有 send_message_to_user 的工具,通过这个工具可以选择是否主动通知用户任务完成的结果。
2. 增加一个 CronJobManager 类,负责管理所有的定时任务。Agent 可以通过调用这个类的方法来创建、删除、修改定时任务。通过 cron expression 来定义触发条件。
3. CronJobManager 除了管理普通的定时任务(比如插件可能有一些自己的定时任务),还有一种特殊的任务类型,就是上面提到的主动型 Agent 任务。用户提需求,MainAgent 选择性地调用 CronJobManager 的方法来创建这些任务,并且在任务触发时,CronJobManager 的回调就是执行 MainAgent 的一轮循环(需要加 send_message_to_user tool),MainAgent 通过上下文知道这是一个定时任务触发的循环,从而执行相应的操作。
4. WebUI 需要增加 Cron Job 管理界面,用户可以在界面上查看、创建、修改、删除定时任务。对于主动型 Agent 任务,用户可以看到任务的描述、触发条件等信息。
5. 除此之外,现在的代码中已经有了 subagent 的管理。WebUI 可以创建 SubAgent,但是还没写完。除了结合上面我说的之外,你还需要将 SubAgent 与 Persona 结合起来——因为 Persona 是一个包含了 tool、skills、name、description 的完整体,所以 SubAgent 应该直接继承 Persona 的定义,而不是单独定义 SubAgent。SubAgent 本质上就是一个有特定角色和能力的 Persona!多么美妙的设计啊!
6. 为了实现大一统,is_background_task = True 的时候,后台任务也挂到 CronJobManager 上去管理,只不过这个是立即触发的任务,不需要等到未来某个时间点才触发罢了。

我希望设计尽可能简单,但是强大。
32 changes: 32 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
.PHONY: worktree worktree-add worktree-rm

WORKTREE_DIR ?= ../astrbot_worktree
BRANCH ?= $(word 2,$(MAKECMDGOALS))
BASE ?= $(word 3,$(MAKECMDGOALS))
BASE ?= master

worktree:
@echo "Usage:"
@echo " make worktree-add <branch> [base-branch]"
@echo " make worktree-rm <branch>"

worktree-add:
ifeq ($(strip $(BRANCH)),)
$(error Branch name required. Usage: make worktree-add <branch> [base-branch])
endif
@mkdir -p $(WORKTREE_DIR)
git worktree add $(WORKTREE_DIR)/$(BRANCH) -b $(BRANCH) $(BASE)

worktree-rm:
ifeq ($(strip $(BRANCH)),)
$(error Branch name required. Usage: make worktree-rm <branch>)
endif
@if [ -d "$(WORKTREE_DIR)/$(BRANCH)" ]; then \
git worktree remove $(WORKTREE_DIR)/$(BRANCH); \
else \
echo "Worktree $(WORKTREE_DIR)/$(BRANCH) not found."; \
fi

# Swallow extra args (branch/base) so make doesn't treat them as targets
%:
@true
5 changes: 0 additions & 5 deletions astrbot/builtin_stars/astrbot/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
from astrbot.core import logger

from .long_term_memory import LongTermMemory
from .process_llm_request import ProcessLLMRequest


class Main(star.Star):
Expand All @@ -19,8 +18,6 @@ def __init__(self, context: star.Context) -> None:
except BaseException as e:
logger.error(f"聊天增强 err: {e}")

self.proc_llm_req = ProcessLLMRequest(self.context)

def ltm_enabled(self, event: AstrMessageEvent):
ltmse = self.context.get_config(umo=event.unified_msg_origin)[
"provider_ltm_settings"
Expand Down Expand Up @@ -91,8 +88,6 @@ async def on_message(self, event: AstrMessageEvent):
@filter.on_llm_request()
async def decorate_llm_req(self, event: AstrMessageEvent, req: ProviderRequest):
"""在请求 LLM 前注入人格信息、Identifier、时间、回复内容等 System Prompt"""
await self.proc_llm_req.process_llm_request(event, req)

if self.ltm and self.ltm_enabled(event):
try:
await self.ltm.on_req_llm(event, req)
Expand Down
308 changes: 0 additions & 308 deletions astrbot/builtin_stars/astrbot/process_llm_request.py

This file was deleted.

Loading