十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

loaded skills

loaded skills loaded skills【免费下载链接】agent-zeroAgent Zero AI framework项目地址: https://gitcode.com/GitHub_Trending/ag/agent-zerothe following skills were explicitly loaded via skills_tool{{skills}}这份片段非常简短却在系统提示词装配中承担了明确的职责它告诉模型“当前会话中**通过 skills_tool 显式加载**了哪些技能”。其中 {{skills}} 是占位符由运行时代入实际清单——清单中的每一项通常对应一个技能名称例如 markdown # loaded skills - the following skills were explicitly loaded via skills_tool - browser-form-workflows - document-query该片段与同目录下另外两个技能相关的 prompt 片段分工明确、互不重叠prompt 片段语义内容来源prompts/agent.system.skills.md当前作用域下全部可用技能的目录available skills由 system_prompt 扩展 调用list_skills()后渲染prompts/agent.system.skills.relevant.md与当前用户请求词法匹配的相关技能relevant skills由 message_loop 扩展 调用search_skills()后临时注入prompts/agent.system.skills.loaded.md当前会话中已显式加载的技能loaded skills由加载账本loaded_skills渲染三者的关系可以概括为available 是“仓库里有什么”relevant 是“这次请求可能用得上什么”loaded 是“我已经把什么真正装进上下文了”。其中 loaded 清单是唯一与模型上下文历史强绑定的信息——因为技能正文skill body在被加载时会作为skills_tool的工具调用结果写入聊天历史。二、加载账本loaded skills 的数据存储“已加载技能”并非临时变量而是有持久化的数据结构支撑。核心实现在 helpers/skills.pyMAX_ACTIVE_SKILLS 20 AGENT_DATA_NAME_LOADED_SKILLS loaded_skills CONTEXT_DATA_NAME_LOADED_SKILLS AGENT_DATA_NAME_LOADED_SKILLS关键设计点上限为 20MAX_ACTIVE_SKILLS 20账本最多保留最近加载的 20 个技能名称。存放在 chat 级 context 数据中账本存放在聊天上下文数据context data键名为loaded_skills而非 Agent 全局数据。这意味着 loaded skills 是**会话级chat-wide**状态同一 Agent 的不同会话互不影响。兼容旧版存储get_loaded_skill_names()会优先读取 context 数据若读取到旧版存放在agent.data[loaded_skills]的列表会自动迁移到 context 数据并清空旧字段见 helpers/skills.py#L959-L979。该迁移逻辑也有专门的单元测试覆盖见 tests/test_tool_action_contracts.py。核心读写函数如下def get_loaded_skill_names(agent): ... # 读取账本含旧版数据迁移 def set_loaded_skill_names(agent, skill_names): ... # 写入账本截断到最近 20 个 def add_loaded_skill_name(agent, skill_name, limitNone): ... # 追加一个名称去重后追加到末尾 def unload_agent_skill(agent, entry): ... # 从账本中移除其中add_loaded_skill_name()的追加策略是先剔除同名旧条目再把新名称追加到列表末尾最后截断到limit默认MAX_ACTIVE_SKILLS从而保证账本始终是“最近加载优先”的 LRU 式有序列表。三、触发点skills_tool 的 load 动作如何登记 loaded skills加载账本唯一的人口是 tools/skills_tool.py 中的SkillsTool。该工具实现了四个动作action参数action作用list列出当前作用域可用技能与斜杠命令search按 query 词法检索技能load加载技能正文并登记到 loaded 账本read_file读取技能目录内的文件限制在技能目录内防目录穿越load动作的完整流程tools/skills_tool.py#L206-L282归一化技能名支持去除**包裹的 markdown 粗体符号。区分斜杠命令若skill_name以/开头则视为斜杠命令走find_slash_command()分支不登记 loaded 账本。校验技能存在通过find_skill()查找找不到则返回错误提示。生成技能正文load_skill_for_agent()把技能元数据版本、作者、许可证、tags、triggers、allowed tools、description、SKILL.md正文以及技能目录文件树拼装为一段完整文本作为工具调用结果返回给模型。登记账本调用add_loaded_skill_name()把技能名写入 context 数据。附带元数据工具结果通过additional{skill_instructions: {...}}携带结构化元数据name、path、source: skills_tool:load、content_included: True。该元数据会在后续被用于识别“哪些技能指令已在历史中可见”。去重保护_visible_skill_loaded()检查该技能的skill_instructions是否已存在于可见聊天历史中若已存在则跳过重复注入避免上下文膨胀。load动作还有专属的 UI 日志执行前会打印Loading skill name提示tools/skills_tool.py#L76-L99。四、运行机制loaded skills 与上下文历史的绑定关系理解 loaded skills 必须抓住一条核心原则技能正文存放在工具结果历史tool-result history中loaded 账本只是索引/清单并不保存正文。这一点在扩展 extensions/python/message_loop_prompts_after/_65_include_loaded_skills.py 的注释中写得很明确Loaded skill bodies live in tool-result history. This hook only keeps the ledger clean and restores bodies that compaction hid.该扩展在每个消息循环迭代后执行做两件事清理账本遍历账本中的技能名对每个技能调用find_skill()确认仍存在把不存在的技能从账本中剔除保证清单与真实技能目录一致。压缩后重挂reattach这是 loaded skills 机制最精巧的部分。当上下文发生压缩compaction导致技能正文从可见历史中消失时该扩展会把丢失的技能正文重新挂回历史头部固定为SKILL_REATTACHMENT_HEADER Reattached loaded skill instructions after history compaction.【免费下载链接】agent-zeroAgent Zero AI framework项目地址: https://gitcode.com/GitHub_Trending/ag/agent-zero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表