Skip to content

11_06_Background_Tasks

Wyckoff edited this page Jun 21, 2026 · 1 revision

(六) 后台长任务与通知唤醒

后台任务在 cli/background.py,由 TUI(终端图形界面)初始化并注入 ToolRegistry(工具注册表)。

适合耗时较长但不应该阻塞对话的工具:

  • screen_stocks:全市场漏斗。
  • generate_ai_report:AI 深度研报。
  • generate_strategy_decision:攻防决策。
  • run_backtest:策略回测。

执行方式:

flowchart TD
    A["模型调用 background tool"] --> B["ToolRegistry.submit"]
    B --> C["BackgroundTaskManager 后台任务管理器创建 task 任务"]
    C --> D["daemon thread 守护线程执行真实函数"]
    B --> E["立即返回 task_id 任务编号给模型"]
    D --> F["progress callback 进度回调更新 TUI 终端图形界面面板"]
    D --> G["on_complete 完成回调注入通知"]
Loading

任务内部可通过 cli.progress 上报 stage(阶段)、detail(细节)、progress(进度)。TUI 顶部的 BackgroundTaskPanel(后台任务面板)展示活跃任务,用户可以继续提问。

结构化系统通知 ([SYSTEM NOTIFICATION])

后台任务运行完毕后,系统通过注入 [SYSTEM NOTIFICATION] 的方式唤醒并驱动 Agent Loop:

  • 通知格式:任务的执行报告会被格式化为类似 `[SYSTEM NOTIFICATION - NOT USER INPUT]\n<task-notification>\n...\n</task-notification>` 的结构注入到会话历史中。
  • 规避幻觉:这种前缀和 XML 标签可明确告知模型该内容并非来自用户的即时输入,防止模型产生角色幻觉(如误以为是用户在发问),从而让模型能够自然地在对话中总结后台任务的产出并主动汇报用户。

7.3 后台任务唤醒与系统通知注入机制

  • 非阻塞式轮询: 耗时长任务(如全市场扫描 screen_stocks)会被注册为后台守护线程运行,立即返回 task_id
  • 唤醒通知注入 (Notification Structure): 当后台任务完成后,后台管理器会在下一轮主 Agent 循环启动时,向会话最前端注入格式化的 [SYSTEM NOTIFICATION] 消息:
    [SYSTEM NOTIFICATION - NOT USER INPUT]
    <task-notification>
    Task: screen_stocks (ID: task_202606211500) completed.
    Result Summary: Found 4 candidate stocks matching Wyckoff Spring patterns.
    Detailed data saved to scratchpad.
    </task-notification>
    通过前置 [SYSTEM NOTIFICATION - NOT USER INPUT] 前缀和 XML 标签,指示模型该输入并非来自真实用户,从而避免角色隐觉(Role Confusion),同时驱动模型对后台数据进行提炼,并主动告知用户结果。

返回 系列索引

Clone this wiki locally