
SurfSense meeting-prep 技能深度解析基于知识库与实时搜索的会议简报生成方案【免费下载链接】SurfSenseOpen-source NotebookLM alternative. Research the open web with live data(Reddit, YT, IG, TikTok, Indeed, Google Search, Maps etc) through one platform, API or MCP server. Join our Discord: https://discord.gg/ejRNvftDp9项目地址: https://gitcode.com/GitHub_Trending/su/SurfSense导读SurfSense 是一个面向开放网络研究的开源 NotebookLM 替代方案其多智能体聊天系统通过「技能Skill」机制为 Agent 注入场景化能力。本文聚焦主 Agent 内置技能之一meeting-prepSKILL.md完整还原其触发条件、输出结构与信息来源优先级并结合仓库中的技能加载中间件与后端实现解释这份 Markdown 是如何被解析、渲染进系统提示词并驱动 Agent 行为的。读完本文你将掌握 SurfSense 技能定义的文件格式、声明式规范以及如何基于知识库优先、网络搜索兜底的原则生成高质量的会议前简报。技能文件的「身份信息」YAML frontmatter 声明meeting-prep技能的定义文件是 SKILL.md文件头部的 YAML frontmatter 是技能系统识别它的核心元数据--- name: meeting-prep description: Pull together briefing materials before a scheduled meeting allowed-tools: task, read_file ---三个字段的语义如下字段值作用namemeeting-prep技能唯一标识同时也是技能目录名builtin/meeting-prep/descriptionPull together briefing materials before a scheduled meeting供 Agent 判断「何时应启用本技能」的触发描述allowed-toolstask, read_file该技能允许 Agent 调用的工具白名单关于 frontmatter 的解析与校验可以在仓库测试中找到直接证据test_skills_backends.py 中test_each_starter_skill_has_valid_skill_md断言每个内置技能的SKILL.md必须以---开头且必须包含name:与description:字段。这意味着 frontmatter 是技能系统的最低格式门槛。allowed-tools的约束也值得注意meeting-prep只放行task与read_file两个工具。task是 SurfSense 主 Agent 委派子 Agent 的统一入口在 stack.py 中可以看到主 Agent 通过task(knowledge_base)、task(google_search, ...)等方式调用各类专业子 Agentread_file则用于完整读取知识库中的会议纪要、内部文档等文件。其余工具对技能执行保持禁用从而把 Agent 的行为约束在「检索 阅读」的简报准备范畴内。触发时机什么场景下启用 meeting-prepSKILL.md 明确定义了技能的「何时使用」条件When to use this skillThe user mentions an upcoming meeting, call, or interview and asks you to prep, brief me, pull background, or what do I need to know about X before tomorrow.可归纳为两条触发信号事件信号用户提及一场即将到来的会议、通话或面试upcoming meeting / call / interview意图信号用户使用了「prep」「brief me」「pull background」等准备类措辞或直接询问「明天之前我需要了解 X 的哪些信息」。这套「事件 意图」的双重匹配设计是为了避免技能被无关请求误触发。当 Agent 在系统提示词中看到description字段后会结合用户当前回合的措辞判断是否命中。同类内置技能如kb-research、report-writing、slack-summary、email-drafting也遵循同样的声明式触发约定全部位于 builtin 目录。输出结构四段式会议简报模板这是 SKILL.md 的核心章节。技能要求 Agent始终产出以下四个小节并允许「没有信号的段落直接省略不硬凑内容」omit any with no signal — dont padAttendees context参会者与背景房间里有谁、他们的角色、他们关心什么。优先从知识库中关于过往互动的笔记中提取当参会者姓名或公司不熟悉时通过task(google_search, ...)补充公开资料。Open threads遗留事项来自既往对话历史的未完成行动项、悬而未决的决策、上次提到的阻塞点。Recent moves近期动向最近 30 天内的相关发布、人事变动与新闻。知识库中存在相关内容时优先引用知识库片段Cite KB chunks when present否则才引用外部来源。Suggested questions建议提问35 个用户可向对方提出的问题需针对遗留事项与参会者可能的优先级量身定制。这四段结构对应了会议简报的核心信息需求——「谁在场」「谈到哪了」「最近发生了什么」「该问什么」。其中「Recent moves」明确给出 30 天的时间窗约束避免 Agent 检索过时信息「Suggested questions」要求 35 条的数量与「针对性」双重约束防止生成泛泛而谈的通用问题。信息来源优先级知识库先行搜索仅作兜底SKILL.md 用「Source ordering」一节明确规定了信息获取的顺序规则永远先查用户的知识库KB优先检索关于这些参会者的既往会议纪要、内部文档或 Slack 线程仅在需要公开可核实事实时才回退到task(google_search, ...)绝不允许用它来凭空捏造某位参会者的偏好或人际关系never to fabricate a participants preferences or relationships。这条规则与 SurfSense 主 Agent 的系统提示词 kb_first.md 中「knowledge base first」的全局约束一脉相承knowledge_base子 Agent 执行混合语义/关键词检索并返回带[n]引用标签的 grounded 摘要只有知识库与工具输出中找不到足够信息时Agent 才会征得用户同意后回退到通用知识。从实现角度看meeting-prep允许的task工具会把请求路由到不同专业子 Agent知识库检索走task(knowledge_base, ...)而公开信息查询走task(google_search, ...)。技能文档正是通过这种「KB 优先 搜索兜底」的顺序约束在保证简报私密信息准确性的同时用公开来源补充外部背景——这正是 SurfSense 把「个人知识库 实时开放网络」融为一体的体现。背后的机制SKILL.md 如何进入 Agent 的系统提示词要理解这份技能文档的价值有必要看一下它在运行时的加载链路。SurfSense 主 Agent 使用deepagents框架的SkillsMiddleware完成技能的发现与注入装配逻辑在 middleware/skills.py由特性开关enable_skills控制是否启用技能中间件通过build_skills_backend_factory构造技能后端工厂传入workspace_id云端模式下用default_skills_sources()给出的来源列表装配SkillsMiddleware。技能内容并非在运行时被动态编辑而是在构建 Agent 时被渲染进系统提示词。后端实现 backends.py 的模块注释明确说明「skill content is rendered into the system prompt at agent build time, not edited at runtime」——这也是两个后端都被设计为只读read-only的原因技能编写发生在带外通过文件系统或工作区管理员路由运行时永不暴露write/edit/upload_files。技能的来源共有两个由 default_skills_sources() 固定顺序给出来源前缀后端实现内容载体/skills/builtin/BuiltinSkillsBackend磁盘读取仓库内builtin/skill-name/SKILL.md即本文讨论的五个内置技能/skills/space/WorkspaceSkillsBackendKB 只读包装工作区特权目录/documents/_skills/下的自定义技能BuiltinSkillsBackend的目录布局约定为root/skill-name/SKILL.mdbackends.py并通过_resolve方法拒绝一切符号链接与..路径逃逸。单个技能文件有 10 MB 的硬上限_MAX_SKILL_FILE_SIZE 10 * 1024 * 1024见 backends.py防止超大文件被整体载入内存。测试 test_skills_backends.py 还验证了meeting-prep等五个 starter 技能属于 Tier 4 计划的必备清单且每个技能目录下都必须存在带合法 frontmatter 的SKILL.md。如何查看、验证与自定义技能技能文件在仓库中位于固定目录可直接阅读内置技能根目录surfsense_backend/app/agents/chat/multi_agent_chat/main_agent/skills/builtin/本文主角meeting-prep/SKILL.md其余同类技能email-drafting/、kb-research/、report-writing/、slack-summary/各自的SKILL.md技能格式的最小合规要求可对照meeting-prep验证文件必须以---开头的 YAML frontmatter 起始frontmatter 必须包含name与description目录结构必须为skill-name/SKILL.mddescription应写出「何时启用」的触发语义正文中写清使用条件、输出结构与执行规则。工作区级自定义技能则遵循WorkspaceSkillsBackend的约定在工作区特权目录/documents/_skills/skill-name/SKILL.md下存放目录默认值见 backends.py由管理员维护运行期同样只读。由于技能内容会在构建 Agent 时渲染进系统提示词编写时应保持简洁、指令化避免冗长——它占用的每一行都会进入模型上下文。总结meeting-prep是 SurfSense 技能系统的一个典型范例它展示了声明式技能文件的完整要素YAML frontmatter 定义身份与工具边界、正文定义触发条件与输出模板、Source ordering 规定知识库优先的检索纪律。配合SkillsMiddleware的发现机制、双后端内置磁盘 工作区 KB的加载架构SurfSense 得以把「会前简报准备」这类高频场景固化为可复用、可约束、可扩展的 Agent 能力。对于希望深入源码的读者推荐从 middleware/skills.py → backends.py → test_skills_backends.py 这条链路入手即可完整掌握技能从文件到系统提示词的完整生命周期。【免费下载链接】SurfSenseOpen-source NotebookLM alternative. Research the open web with live data(Reddit, YT, IG, TikTok, Indeed, Google Search, Maps etc) through one platform, API or MCP server. Join our Discord: https://discord.gg/ejRNvftDp9项目地址: https://gitcode.com/GitHub_Trending/su/SurfSense创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考