添加 RuntimeContext 类用于捕获模型运行时的日期时间信息, 包括UTC时间、本地时间和时区信息,并在系统提示中显示这些信息。 同时增加最大上下文消息数和工具迭代次数的配置选项, 将验证服务从引擎加载器中移除,并更新相关的数据结构和接口。 BREAKING CHANGE: 移除了验证服务,相关字段被替换为证据状态和接受状态。 - 添加 RuntimeContext 类和相关渲染方法 - 增加 max_context_messages 和 max_tool_iterations 配置 - 移除 ValidationService 相关代码 - 更新消息记录中的验证状态字段 - 添加原始工具调用检测和回退处理
83 lines
4.9 KiB
HTML
83 lines
4.9 KiB
HTML
<!doctype html>
|
||
<html lang="zh-CN">
|
||
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Skills 模块蓝图</title><link rel="stylesheet" href="blueprint.css"></head>
|
||
<body><main class="page">
|
||
<header class="topbar"><h1>Skills</h1><p>Skills 模块负责加载、选择、注入、学习和发布 Beaver 技能。技能不是普通文档摘要,而是会被 ContextBuilder 作为显式 user 消息注入当前 run 的操作指导。</p></header>
|
||
<nav class="nav"><a href="index.html">索引</a><a href="engine.html">Engine</a><a href="tasks.html">Tasks</a><a href="prompt-atlas.html">Prompt Atlas</a></nav>
|
||
<section class="content">
|
||
<h2>大模块流程</h2>
|
||
<div class="flow">
|
||
<div class="step"><strong>目录加载</strong>published/builtin/drafts/specs</div><div class="arrow">-></div>
|
||
<div class="step"><strong>候选召回</strong>embedding retrieve</div><div class="arrow">-></div>
|
||
<div class="step"><strong>LLM 选择</strong>shortlist/final 或 node skill selection</div><div class="arrow">-></div>
|
||
<div class="step"><strong>注入</strong>SkillContext -> activation message</div><div class="arrow">-></div>
|
||
<div class="step"><strong>学习</strong>accepted task evidence -> candidate -> draft -> review -> publish</div>
|
||
</div>
|
||
|
||
<h2>小模块拆分</h2>
|
||
<article class="module">
|
||
<h3>catalog loader</h3>
|
||
<p>扫描和加载 published skills、builtin skills,并构建供 embedding/LLM 选择的候选摘要。它也提供 load_published_skill、get_skill_record、get_skill_tool_hints。</p>
|
||
<div class="subflow">
|
||
<div>读取 SKILL.md 和 frontmatter。</div>
|
||
<div>记录 name、description、version、content_hash、tool hints。</div>
|
||
<div>输出 selection candidates。</div>
|
||
</div>
|
||
</article>
|
||
|
||
<article class="module">
|
||
<h3>SkillAssembler</h3>
|
||
<p>主 agent 每个 run 的 skill 选择器。先用 embedding 召回候选;候选太多时先 LLM shortlist;再把完整 skill 正文截断后交给 LLM final selection。</p>
|
||
<div class="subflow">
|
||
<div>query = task_description 或 AgentService 提供的 skill_selection_context。</div>
|
||
<div>embedding top-k 召回 selection candidates。</div>
|
||
<div>shortlist 阶段只看摘要,返回最多 N 个 skill names。</div>
|
||
<div>final 阶段看候选正文,返回最终激活 skill names。</div>
|
||
<div>加载正文,strip frontmatter,生成 SkillContext。</div>
|
||
</div>
|
||
<p>详细 prompt 见 <a href="prompt-atlas.html#skill-assembler">Prompt Atlas</a>。</p>
|
||
</article>
|
||
|
||
<article class="module">
|
||
<h3>activation injection</h3>
|
||
<p>ContextBuilder 不把 skill 正文塞进 system prompt,而是每个 skill 生成一条 user-role activation message。这样 skills 的正文和主 system prompt 分层清晰。</p>
|
||
<pre>[SYSTEM: The "{skill.name}" skill (version {skill.version}) is active for this run.
|
||
Follow its instructions as active guidance unless the user overrides them.]
|
||
|
||
{skill.content}</pre>
|
||
</article>
|
||
|
||
<article class="module">
|
||
<h3>drafts / reviews / publisher</h3>
|
||
<p>草稿、审核和发布构成 skill 的人工治理链路。Learning 只生成候选和草稿,不直接把新能力静默注入 published 目录。</p>
|
||
<div class="subflow">
|
||
<div>DraftService 保存草稿内容和 metadata。</div>
|
||
<div>ReviewService 记录审核意见、状态、决策。</div>
|
||
<div>SkillPublisher 把通过审核的草稿写成正式 skill spec。</div>
|
||
</div>
|
||
</article>
|
||
|
||
<article class="module">
|
||
<h3>learning</h3>
|
||
<p>从用户接受后的 Task evidence 中提取学习候选,合成新 skill 或修订草稿,再经过 safety/eval/review。Safety/Eval 只评估 skill draft,不评估 task result。</p>
|
||
<div class="subflow">
|
||
<div>Task accepted 后触发 learning;一个 task 的所有 runs 都进入证据包,并标记 final_accepted_run_id。</div>
|
||
<div>LearningService 构建 learning candidates。</div>
|
||
<div>EvidencePacket 收集 task summary、session excerpts、tool names、user acceptance event 和 revision history。</div>
|
||
<div>SkillDraftSynthesizer 用 LLM 生成 frontmatter/content/change_reason JSON。</div>
|
||
<div>SafetyChecker 做确定性扫描,Eval 评估后进入 draft/review。</div>
|
||
</div>
|
||
</article>
|
||
|
||
<article class="module">
|
||
<h3>missing skill guidance</h3>
|
||
<p>当 team node 没有匹配 published skill 时,TaskSkillResolver 生成一次性 ephemeral guidance。它以 SkillContext 形式进入 delegated agent,但不会发布为正式 skill。</p>
|
||
<div class="subflow">
|
||
<div>输入 task goal、user request、node id/task、skill query、required capabilities。</div>
|
||
<div>LLM 返回 guidance_name、description、content、tags。</div>
|
||
<div>若失败,用 fallback payload 生成基础指导。</div>
|
||
<div>SkillContext name = <code>ephemeral:{guidance_name}</code>,version = <code>ephemeral:{guidance_id}</code>。</div>
|
||
</div>
|
||
</article>
|
||
</section></main></body></html>
|