Aster文档
搜索 Aster 文档
ESC
产品
版本

输入关键词开始搜索。

    文档目录

    ASTER CODE / Meta Harness

    接入上下文和工具

    选择提示槽、上下文来源、Skills、MCP、动态工具和生命周期钩子。

    扩展入口

    扩展不都需要 host: 组件。补充模型资料时使用上下文接口,增加实际操作时使用工具接口,在执行前后记录或拦截时使用 Hook。这些能力通过会话进入原有运行过程。

    扩展需求与会话入口
    需求入口影响
    修改角色、工作要求或回复格式with_prompt_slots / with_output_language调整系统提示的相应部分
    提供项目、业务或检索资料with_context_provider把 ContextItem 交给上下文组装器
    载入操作说明with_skill_dirs / with_host_skill接入 Skill 注册表
    连接外部工具服务with_mcp / add_mcp_server注册 MCP 工具
    注册 Rust 工具实现register_dynamic_tool在下一次运行的工具快照中使用
    批量处理工具结果或运行脚本program 工具在受控调用入口中执行程序
    检查、改写或记录生命周期事件with_hook_executor替换内置 Hook 执行器

    修改提示槽

    只需要调整角色和工作要求时,使用 SystemPromptSlots,不用重写完整系统提示。

    use aster_core::{SessionOptions, SystemPromptSlots};
    
    let options = SessionOptions::new().with_prompt_slots(
        SystemPromptSlots::default()
            .with_role("你负责解释和修改这个 Rust 项目。")
            .with_guidelines("优先使用项目已有的实现和测试。")
            .with_response_style("说明修改内容、检查结果和剩余问题。")
            .with_output_language("zh-CN"),
    );
    

    这些槽可以改变模型收到的说明,不能放宽工具权限。Meta Harness 配方中的 system 也不会取消 Core 加入的权限要求。

    提供应用自己的资料

    固定资料可以通过 StaticContextProvider 接入,再走同一套排序、去重与预算处理。

    use std::sync::Arc;
    use aster_core::context::{ContextItem, ContextType, StaticContextProvider};
    use aster_core::SessionOptions;
    
    let provider = StaticContextProvider::new("project-notes").with_item(
        ContextItem::new(
            "project-note",
            ContextType::Resource,
            "项目说明见 README.md。",
        )
        .with_relevance(0.9),
    );
    let options = SessionOptions::new().with_context_provider(Arc::new(provider));
    

    动态来源实现 ContextProvider 的 name 和 query。failure_mode 默认允许尽力获取;必须成功的来源可以声明失败时终止本轮。来源还可以通过 on_turn_complete 处理已完成的一轮,但持久记忆的访问范围、激活和审计需要使用专门接口。

    with_isolated_context 保留宿主提供的上下文,同时省略自动发现的指令和 Skills,并使用会话本地的空记忆。它不是操作系统沙箱。

    Skills、MCP 和动态工具

    Skills 提供操作说明,MCP 和动态工具提供实际调用能力。把说明写进 Skill,不会自动注册一个工具实现。

    with_skill_dirs 的目录会与全局 Skill 目录合并。宿主也可以用 with_host_skill 提供精确的 Skill。MCP 可通过 with_mcp 安装管理器,或在已有会话上调用 add_mcp_server;工具名称采用 mcp__<server>__<tool>。

    register_dynamic_tool 接受宿主提供的 Tool 实现。一次运行使用已选定的工具与能力快照;不要假设更新注册表就会改写正在执行的那次运行。

    什么时候使用 program

    需要批量调用工具、筛选结果,或运行已有 JavaScript 脚本时,可以使用模型可见的 program 工具。脚本能调用什么工具,需要通过 allowed_tools 明确限制。

    低层 ProgramExecutor 直接调用工具注册表,本身不安装会话权限、确认、预算或取消策略。Agent 和会话中的脚本应经过受控的 program 工具入口。宿主还需要保留权限与确认检查时,使用 session.governed_tool;session.tool 代表宿主已经批准调用。完整示例见调用目录中的脚本。

    Hook 可以做什么

    常用事件包括 PrePrompt、PreToolUse、PostToolUse、GenerateStart、GenerateEnd、PreCompact 和 PostCompact。会话、记忆、规划和运行控制也有对应事件,完整枚举见源码。

    前置 Hook 可以返回继续、改写或阻止结果,执行后的观察事件主要用于记录。后置事件的返回值不能撤销已发生的操作,也不是每种事件都能改变运行行为。

    with_hook_executor 会替换内置执行器,而非自动与它叠加。需要组合原有规则和自定义处理时,应由宿主明确实现。Hook 放行之后,Core 的权限检查仍会执行。

    持久记忆和工作区检索

    工作区检索、持久记忆和知识资料都可以影响模型上下文,但有各自的接入和验证规则。长期记忆需要指定租户、访问主体和数据范围;候选记忆激活后才参与召回。知识资料还要使用精确的会话绑定,不能只给一个普通 Provider 换名字。

    这些能力的完整存储和检索说明见下方手册。本篇列出它们在 Meta Harness 中的接入位置,不把召回算法混进组件装配过程。

    实现依据