Agent开发(七)-更高效优雅的skill加载"

admin 2026-10-23 05:36:43 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

cover_image

Agent开发(七)-更高效优雅的skill加载

原创

BlackFace
BlackFace

GG学安全

2026年8月18日 02:42
重庆

在小说阅读器读本章

去阅读

第 5 章我们实现了 skill 机制,用了两个新工具:list_skills(查有哪些技能)和 load_skill(加载技能内容)。这一章我们换个更高效、更优雅的思路,一个工具都不用新增。

回顾第 5 章的做法

用户: \"帮我写个 python 脚本\"
模型: 调 list_skills → 看到有 python 技能
模型: 调 load_skill(\"python\") → 拿到技能正文
模型: 用技能内容干活

它\"不够优雅\"的两点

  1. 占了 2 个工具位。list_skills 和 load_skill 的定义(name、description、parameters)每个请求都要发给模型,白白消耗 token。
  2. 模型要先\"记着\"查。技能列表不在模型视野里,模型得先想到\"该看看有哪些技能\",调 list_skills 才拿到列表——多了一轮调用,模型还可能忘了查。

新思路:技能目录放系统提示词,用 read 工具加载

核心洞察就一句话:

SKILL.md 就是一个普通文件。而你在第 4 章,已经有一个 read 工具了。

加载技能 = 读文件。那为什么要专门写 load_skill?直接用 read 就行。

做法:

  1. 启动时扫描 skills/,生成目录文本:名字: 描述(文件: 路径)
  2. 把目录拼进系统提示词——模型一睁眼就看到有哪些技能、每个的文件在哪
  3. 删掉 list_skills 和 load_skill 两个工具
  4. 模型判断任务匹配某个技能时,用 read 工具读那个文件,技能内容就进来了
用户: \"帮我写个 python 脚本\"
模型: 系统提示词里已经写着 \"python: ...(文件: skills/python/SKILL.md)\"
模型: 直接调 read 读 skills/python/SKILL.md → 拿到技能正文
模型: 用技能内容干活

系统提示词怎么拼

def build_skill_catalog():
    \"\"\"扫描 skills/,生成\"名字: 描述(文件: 路径)\"目录。\"\"\"
    if not os.path.isdir(SKILLS_DIR):
        return \"(没有技能目录)\"
    lines = []
    for folder in sorted(os.listdir(SKILLS_DIR)):
        skill_file = os.path.join(SKILLS_DIR, folder, \"SKILL.md\")
        if os.path.isfile(skill_file):
            front = read_frontmatter(open(skill_file, encoding=\"utf-8\").read())
            name = front.get(\"name\", folder)
            desc = front.get(\"description\", \"\")
            lines.append(f\"- {name}: {desc}(文件: {skill_file})\")
    return \"\
\".join(lines) if lines else \"(没有技能)\"

SYSTEM_PROMPT = (
    \"你是一个能读写文件、执行命令的编程助手。\
\"
    \"以下是可用技能。当任务匹配某个技能的描述时,用 read 工具读取它标注的文件,然后按技能内容执行。\
\
\"
    + build_skill_catalog()
)

messages = [{\"role\": \"system\", \"content\": SYSTEM_PROMPT}]   # 系统消息带着技能目录

注意:这里第一次用上了 role: system(第 2 章讲过但一直没用)——系统提示词就是放\"一直想让模型知道的事\"的地方,技能目录正好属于这类。

完整代码(step7.py)

# 完整代码
# 和第 5 章的差别只有 3 处:
# 1. 删掉了 list_skills / load_skill 两个函数和它们在 TOOLS、TOOL_FUNCTIONS 里的条目
# 2. 加了 build_skill_catalog(),扫描技能目录生成\"名字: 描述(文件: 路径)\"
# 3. messages 第一行变成 [{\"role\": \"system\", \"content\": SYSTEM_PROMPT}]
# 其余(5 个文件工具、对话循环、错误兜底)完全沿用第 4 章。
# 见 step7/step7.py

对比

第 5 章 第 7 章
查技能列表 list_skills 工具,要调 系统提示词里直接有
加载技能 load_skill 工具 复用 read 工具
新增工具 2 个 0 个
多一轮调用 有(先查再加载) 无
新增代码 2 个函数 + 2 个工具定义 只加一个拼目录的函数

验证

>>> 帮我写一个 python 脚本统计词频

你会看到模型直接调 read 读 skills/python/SKILL.md(而不是先 list\_skills 再 load\_skill)。

这一章的关键

  1. 加载技能 = 读文件。你已经有 read 工具了,就不需要专门的 load\_skill。
  2. \"一直要知道的事\"放系统提示词,而不是做成工具让模型去查。
  3. 工具位是稀缺资源——每个工具的定义每个请求都要发,能复用就不新增。


Agent开发(七)-更高效优雅的skill加载" 网络安全文章

Agent开发(七)-更高效优雅的skill加载"

本文介绍Agent开发中skill加载的优化方案,核心思路是将技能目录放入系统提示词,并复用已有的read工具来加载技能文件,从而避免新增list_skills和load_skill两个工具。该方法减少了token消耗和模型调用轮次,提升了效率。关键洞察是加载技能等于读文件,系统提示词适合存放模型始终需要知道的信息。可操作建议是采用此思路优化Agent开发,节省工具位并简化流程。
DeepSeekHarness-渗透SRC—DSH渗透测试模式" 网络安全文章

DeepSeekHarness-渗透SRC—DSH渗透测试模式"

DeepSeekHarness的渗透测试模式(dsh-pentest)是一个自包含bundle包,通过dsh插件安装,用于在授权范围内记录目标、探索线索、验证结果、管理资产与漏洞。其架构包含六张领域模型表,提供多种工具函数和Web界面,支持探索链路、漏洞、资产视图及报告生成。安装可通过ReleaseURL或本地文件进行,重启后选择渗透模式即可使用。
【工具分享】Oktos—AI增强型红队后渗透平台" 网络安全文章

【工具分享】Oktos—AI增强型红队后渗透平台"

本文介绍了Oktosv0.1.1这款面向授权红队行动的AI增强型后渗透C2平台。其核心亮点在于将大语言模型深度集成至后渗透全流程,实现攻击路径自动编排、会话初始任务自动执行及测试报告生成。技术层面,平台采用BOF动态加载架构在内存中执行指令,避免创建子进程以绕过EDR检测;同时支持基于公有云可信域名的异步低频心跳通信以隐藏流量特征。该工具具备多项目管理、跨平台载荷生成及内置服务端防火墙等功能,适合安全团队用于高效隐蔽的红队演练与渗透测试任务。
评论:0   参与:  0