开一家小餐馆,老板不雇大厨,整家店就靠他一个人的脑子。店面只有几平方米,后厨一个灶眼,账本薄薄一页。可就这么个“小老板”,接得了婚宴、办得了酒席——因为他有一整套做生意的门道:先把大订单拆成一道道菜,再打电话订货、抄起菜刀切配、盯着火候翻炒,口袋里还揣着一本皱巴巴的笔记本,记着熟客的口味。这套门道,放到人工智能里,就是“小语言模型 Agent 设计模式”。大模型像一个大饭店,人多地大资金足;而小语言模型(SLM)这位“小老板”,脑子不大但转得快,部署在手机和家电这些“小店面”里,靠一套聪明的工作流——把复杂任务拆开、调动工具、记录记忆、边做边看——照样能撑起一桌 AI 大席。本文就用这家小餐馆的烟火气,带你认识 SLM Agent 的七大门道。

岗位关联

学完这套设计模式,你将掌握如何在资源有限的端侧设备上,用最轻量的方式搭建会推理、会调用工具、会自己修正的智能体,这正是指挥 AI 应用落地到真实产品的核心手艺。

目录
  1. 可视化演示
  2. 架构总览
  3. 任务分解
  4. 工具调用
  5. 记忆管理
  6. 多轮规划
  7. 端侧部署
  8. 优化评估
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示SLM Agent核心架构:任务分解策略(顺序/层级/DAG)、工具调用编排与双层记忆管理、ReAct多轮规划循环及端侧量化部署优化。

本节配有交互动效(进入视口后自动加载,约 3KB)。

'+captions.arch+'

架构总览

小餐馆没有专职服务员、没有大厨、没有库管,只有一个老板。他一会儿站在门口迎宾,一转身又去炒菜,抽空还要打电话给菜贩子订货。一个人,顶起了所有角色。SLM Agent 的架构,就是这样一个“一个人撑起整家店”的精巧安排——我们不用又大又重的模型,而是让一个小模型在几个角色之间来回切换。

技术上讲,一个基于 SLM 的 Agent 在架构上通常由四个核心角色组成:规划器(Planner)负责把用户需求拆成步骤;执行器(Executor)负责调用工具、执行动作;记忆模块(Memory)负责记录任务进度和用户偏好;观察与反思器(Observer)负责读取工具返回的结果,判断下一步。SLM 自身只做“思考”这一件事,行动全交给工具与代码。这是它的职责边界:模型是大脑,不是手脚,更不是仓库。

由于 SLM 的上下文窗口小、推理能力有限,设计上要把握三条原则:一是轻量优先,先搭一个“最小可用”的闭环——规划、行动、记忆三件套跑通即可,每加一个组件都要算算开销;二是高内聚低耦合,每个角色各管一摊,老板不会一边炒菜一边记账导致手忙脚乱;三是可降级,模型拿不准时就调用工具或规则兜底,而不是硬猜。所以记住,SLM Agent 的本质不是“一个更聪明的小模型”,而是一套“让不聪明的模型做聪明事”的流程设计。

任务分解

一天,婚宴的订单来了:三十桌酒席。小老板不会站在灶台前发懵,他翻开菜单,把宴席拆成“凉菜、热菜、汤品、点心、酒水”几道工序,每一道再拆成更细的操作:先切配、再烹制、后装盘。任务分解,就是老板的那本“拆单本”。

技术上的任务分解(Task Decomposition),是让 SLM 把一个高层目标改写成一串有顺序的子任务序列。子任务要满足三个要求:可执行(每一步 SLM 或工具都能完成)、有依赖(前一步的输出喂给后一步)、粒度适中(步骤太多容易累积错误,太少则单步难度过高)。与此同时,每完成一个子任务就对进度做一次追踪和记录,这样任务中断后可以从断点续跑,而不是从头再来。

从概率视角看,整件任务的成功概率是各子任务成功概率的条件乘积:

因此,好的任务分解会在“步骤数量”和“单步难度”之间找平衡:步骤太多,概率越乘越小;步骤太少,每一步都超出 SLM 的能力范围。小老板的智慧,在于把大订单切成一口能吃下的分量。

P(T)=∏i=1nP(ti∣t1,t2,…,ti−1)P(T) = \prod_{i=1}^{n} P(t_i \mid t_1, t_2, \dots, t_{i-1})
整个任务的成败,取决于每一步子任务在“前面步骤都成功”的前提下的成功概率。子任务越多,乘积越小,牵一发而动全身。
  1. 连乘累乘∏ 把从第 1 步到第 n 步的所有概率乘在一起,整串流程的整体成功率是每步概率的乘积。
    ∏i=1n\displaystyle \prod_{i=1}^{n}
  2. 子任务概率项P(t_i) 表示第 i 个子任务成功的概率;如果子任务太复杂,这一项就会变小。
    P(ti)\displaystyle P(t_i)
  3. 条件依赖部分竖线后面的 t_1……t_{i-1} 表示“在前面这些步骤都已完成”的条件下第 i 步成功的概率,体现了步骤之间的先后依赖关系。
    ∣t1,t2,…,ti−1\displaystyle \mid t_1, t_2, \dots, t_{i-1}

工具调用

小老板再能干,也变不出食材。他要靠菜刀切菜、靠灶火加热、靠电话向菜贩子订货。这些“外挂”就是他的工具。SLM 也一样——小模型不懂时间、算不准数学、查不了实时天气,但它知道该找谁帮忙。

技术上的工具调用(Tool Calling / Function Calling),包括四个环节:工具注册(告诉模型“我有哪些工具可用,参数长什么样”)、参数解析(把自然语言中的信息翻译成工具要求的结构化参数)、调用映射(从众多工具中选出正确的那把“刀”)、结果校验(检查工具返回的内容是否合理,为下一步规划提供依据)。

SLM 如何决定用哪个工具?模型会为每个候选工具算出一个匹配分 z_k,再通过 softmax 转换成一个概率分布:

聪明的小老板不会亲手剁每根葱,他把刀磨快、把电话本备齐,然后吩咐工具去干。工具调用,就是 SLM 的“手和脚”,替它完成那些它不擅长、却能准确描述的力气活。

P(toolk∣x)=ezk∑j=1KezjP(\text{tool}_k \mid x) = \frac{e^{z_k}}{\sum_{j=1}^{K} e^{z_j}}
这个公式把模型在“用刀还是用锅”上的偏好打分,变成一组加起来等于 1 的概率。得分最高的工具被选中,模型用“最顺手的家伙”干活。
  1. 指数化放大e^{z_k} 把原始打分变成正数,同时放大分数之间的差距,让高分者更突出。
    ezk\displaystyle e^{z_k}
  2. 归一化分母对全部 K 个工具的打分求幂后求和,让所有概率之和等于 1,各项才能互相比较。
    ∑j=1Kezj\displaystyle \sum_{j=1}^{K} e^{z_j}
  3. 概率输出两者相除得到工具 k 被选中的概率;SLM 通常取概率最大的工具执行,并按照注册好的参数格式填写调用。
    P(toolk∣x)\displaystyle P(\text{tool}_k \mid x)

记忆管理

小老板的记性其实很差,但他口袋里有一本皱巴巴的笔记本:正面记着今天做了哪些菜、做到哪一步,反面记着隔壁王先生不要香菜、李太太喜欢少油。这本笔记本,就是他的“外挂大脑”。

技术上的记忆管理(Memory Management)分为四层:工作记忆存当前任务的上下文(比如正在烹饪哪道菜);长期存储保存跨会话的用户偏好;状态缓存记录子任务的执行进度与中间结果;记忆衰减意味着长期不用的记忆逐渐模糊,避免笔记本越写越厚却全都没用。

记忆的“模糊”,在形式上可以用指数衰减来描述。一条记忆的强度,会随着时间推移按固定速率衰减:

记忆让 SLM Agent 从“每次都从零开始”变成“越用越顺手”。老板的笔记本越记越聪明,Agent 的记忆越攒越贴身——这正是端侧智能体最打动用户的温情之处。

S(t)=S0×γΔtS(t) = S_0 \times \gamma^{\Delta t}
初始强度 S_0 代表这条记忆刚记下时的清晰度,γ 是小于 1 的衰减因子,Δt 是距离上次使用的时间。刷得越勤的记忆,强度越接近初始值;长时间不碰的记忆,就渐渐淡出视野。
  1. 初始记忆强度S_0 是刚写入时的强度,比如老板刚记下“王先生不吃香菜”时,清晰度满分。
    S0\displaystyle S_0
  2. 衰减因子γ 介于 0 到 1 之间,决定记忆模糊的速度;γ 越接近 1,忘得越慢。
    γΔt\displaystyle \gamma^{\Delta t}
  3. 时间间隔幂次Δt 是距离上次调用的时间间隔;间隔越大,指数结果越小,强度越低,表示记忆越淡。
    Δt\displaystyle \Delta t

多轮规划

炒菜不是把菜倒进锅就完事。小老板要边炒边尝,咸了加水,淡了加盐,火大了赶紧关小——计划永远在给现实让路。这就是多轮规划:不是一次想清楚所有动作,而是边做边看、边看边改。

技术上的多轮规划,最经典的落地方式是 ReAct 循环:规划一条行动,执行这个行动,观察返回结果,再基于新观察到的情况规划下一步。SLM 每走一轮,都在更新自己对任务状态的认知。形式上,每一轮的内部状态可以写成迭代更新公式:

多轮规划还有两个关键:动态调整——如果观察结果与计划不符,就修订后续步骤;终止条件——要么目标达成,要么轮数或预算达到上限,避免一个任务无限空转。老板不可能永远站在灶台前翻滚,菜熟了就得出锅。

sk+1=Update(sk, Execute(ak), Observe(ok))s_{k+1} = \text{Update}\big(s_k,\ \text{Execute}(a_k),\ \text{Observe}(o_k)\big)
ReAct 的意思就是 Reason + Act:先想后做,做完了再看结果,再想下一步。状态 s 就像老板手上那道菜的下锅进度,每尝一口,状态就刷新一次。
  1. 状态变量s_k 表示第 k 轮时的任务状态快照,包含已完成步骤和现有信息。
    sk\displaystyle s_k
  2. 执行动作Execute(a_k) 表示把决策 a_k 交给工具或系统执行,产生真实世界的效果。
    Execute(ak)\displaystyle \text{Execute}(a_k)
  3. 观察与融合更新Observe(o_k) 表示读取执行后的反馈,比如工具返回的天气数据或搜索结果,然后用 Update 把旧状态、执行效果、观察信息三者融合成本轮的新状态 s_{k+1}。
    Observe(ok)\displaystyle \text{Observe}(o_k)

端侧部署

小餐馆的厨房只有两个平方,塞不下大饭店那种三层炉灶。老板的全部家当,必须在这公小的空间里安排得明明白白。SLM 的端侧部署,就是这么一间“袖珍厨房”。

技术上的端侧部署要面对三重约束:资源预算(手机、音箱的内存通常在 1-2GB 内,模型和运行时只能占一个小头);模型量化(把 FP32 的权重压缩成 INT8 甚至 INT4,用精度换体积与速度);延迟约束(单步推理要控制在几十毫秒量级,否则用户等不起)。此外还要考虑离线兜底——没网的时候,用规则系统完成基础应答。

端到端的延迟可以建模为每一步推理延迟与工具调用延迟的总和,它必须落在预算 B 之内:

端侧部署的精髓是“小厨房里也要出大菜”——通过量化把模型塞进设备,通过流水线把延迟压到最低,让 SLM Agent 在没有云端的角落里也能操持起一桌好饭。

Lend2end=∑i=1n(linfer(i)+ltool(i))≤BL_{\text{end2end}} = \sum_{i=1}^{n} \big( l_{\text{infer}}^{(i)} + l_{\text{tool}}^{(i)} \big) \leq B
一次完整的 Agent 任务,由 n 轮“思考+行动”组成。每一轮都消耗一段推理时间和一段工具调用时间,全部加起来不能超过用户的耐心预算 B。
  1. 推理延迟项l_infer^{(i)} 是第 i 轮小模型自己“发呆思考”的耗时,主要取决于模型大小与量化程度。
    linfer(i)\displaystyle l_{\text{infer}}^{(i)}
  2. 工具延迟项l_tool^{(i)} 是第 i 轮调用外部工具(搜索、查询)的耗时,往往网络往返占大头。
    ltool(i)\displaystyle l_{\text{tool}}^{(i)}
  3. 预算约束求和后仍小于等于 B;若超标,就减少轮数、压缩模型或精简工具链。
    ∑i=1n(⋯ )≤B\displaystyle \sum_{i=1}^{n} (\cdots) \leq B

优化评估

生意做得好不好,老板心里得有一本账:回头客比例高不高?一道菜平均多久能上桌?每桌的食材成本超不超支?同样,SLM Agent 的好坏,也要靠指标和实验来度量,而不是凭感觉。

技术上的评估指标主要有三类:成功率(任务完成率,即成功任务数除以总任务数);延迟(P95 延迟,衡量最差情况下的用户等待);成本(token 消耗量与工具调用次数,直接影响端侧的电量和流量)。综合起来,可以设计一个加权综合评分:

评估不是终点,迭代才是。老板每周都要翻账本:哪些菜客人常点?哪道工序老出岔子?Agent 团队也一样——收集失败样本,针对高频错误做提示词调优或模型微调,让这本“生意经”越翻越亮。

Score=α×SR+β×(1−LLbase)−γ×C\text{Score} = \alpha \times \text{SR} + \beta \times \left(1 - \frac{L}{L_{\text{base}}}\right) - \gamma \times C
这是一个把“好事加分、坏事减分”揉在一起的综合分:成功率 SR 越高越好,延迟 L 低于基线 L_base 越好,成本 C 越高扣分越多。权重 α、β、γ 由业务目标决定。
  1. 成功率加权项α 乘以 SR(成功任务占比);α 越大说明越看重“把事办成”。
    α×SR\displaystyle \alpha \times \text{SR}
  2. 延迟收益项(1 - L/L_base) 在延迟越低时越接近 1,β 控制它占多大分量。
    β×(1−LLbase)\displaystyle \beta \times \left(1 - \frac{L}{L_{\text{base}}}\right)
  3. 成本惩罚项γ 与 C 的乘积是扣分项;C 越大扣得越多,防止为了成功率不计代价地浪费 token。
    −γ×C\displaystyle - \gamma \times C

AI 应用场景

端侧语音助手的日程管家

阶段:Agent 编排与端侧推理阶段

解决的问题:智能音箱内存小、必须本地响应,不能每次把语音上传云端受制于网络。传统规则系统只能做简单的“定闹钟”,听不懂“帮我定一个明早七点半的闹钟并查一下明早天气”这种复合指令。SLM Agent 把这句话拆解为“定闹钟”“查天气”两个子任务,分别调用系统闹钟接口和天气查询工具,并把用户偏好写进本地记忆。

具体案例:老人对音箱说“明天早上去公园前提醒我带伞”。Agent 先查询本地天气工具,得知早晨有雨,于是记录“带伞提醒”,设置闹钟时把“带伞”附在提醒文案里,并写入长期记忆。整个过程在设备端完成,不依赖网络。

户外手表的离线救援规划

阶段:推理部署与离线兜底阶段

解决的问题:登山场景无网络,救援路线规划必须本地完成。传统手表只能显示静态心率值,无法综合判断。SLM Agent 通过多轮规划:先读取传感器数据,再结合体力状态规划建议,观察前方路段反馈后动态调整路线。全部推理在手表本地完成。

具体案例:户外手表监测到心率骤增,Agent 规划一步“询问用户当前状态”,工具调用读取心率与海拔,观察发现异常后自动触发报警工具并给出“立即折返”的建议,全程离线运行。

门店 POS 机的离线客服助理

阶段:Agent 评估与迭代优化阶段

解决的问题:快餐店收银机需要低延迟本地应答,云端大模型成本高、响应慢。传统问答系统遇到“我上次的套餐什么时候好”这种带上下文的问题就答不上来。SLM Agent 判断用户意图是“查订单”,调用本地订单库工具,从记忆缓存中读取取餐进度,多轮追问订单号后返回结果。

具体案例:顾客在收银机上问“我上次的套餐还没好吗?”,Agent 先在本地查询订单工具,再读记忆库中的取餐进度,回复“还差 2 分钟”,全程约 300 毫秒。团队用成功率与延迟指标持续评估,每周迭代一次提示词。

Python 演示

python82 行
import jsonfrom datetime import datetime  def mini_slm(request: str, memory: list, observation: str = "") -> list:    """超小模型模拟器: 把用户请求规划成动作序列(ReAct).    真实SLM用权重做推理, 这里用规则模拟其规划输出.    """    text = request.lower()    if observation and "带伞" in observation:        return [{"action": "add_event", "param": {"title": "带伞提醒", "slot": "明日早上"}}]    if "天气" in text:        return [{"action": "query_weather", "param": {"city": "local"}}]    if "闹钟" in text or "提醒" in text:        return [{"action": "set_alarm", "param": {"hour": 7, "minute": 30}}]    return [{"action": "add_event", "param": {"title": text, "slot": "明日"}}]  def query_weather(city: str) -> str:    return "多云, 早晨降水概率65%, 建议带伞"  def set_alarm(hour: int, minute: int) -> str:    return "已设置闹钟 %02d:%02d" % (hour, minute)  def add_event(title: str, slot: str) -> str:    return "已记录日程[%s]: %s" % (slot, title)  TOOL_MAP = {    "query_weather": query_weather,    "set_alarm": set_alarm,    "add_event": add_event,}  class SlmAgent:    def __init__(self):        self.memory = []      # 记忆列表: 每条含text, strength, time        self.max_steps = 4     def _decay(self):        for item in self.memory:            item["strength"] *= 0.9     def _remember(self, text: str):        self._decay()        self.memory.append({            "text": text,            "strength": 1.0,            "time": datetime.now().isoformat(),        })     def run(self, request: str):        print("[用户] " + request)        observation = ""        for step in range(1, self.max_steps + 1):            plan = mini_slm(request, self.memory, observation)            if not plan:                break            last_result = ""            for item in plan:                action = item["action"]                param = item["param"]                if action in TOOL_MAP:                    last_result = TOOL_MAP[action](**param)                    self._remember(last_result)                    print("[第%d轮][动作] %s -> %s" % (step, action, last_result))                else:                    print("[第%d轮][兜底] 未知工具%s" % (step, action))            if "带伞提醒" in last_result:                print("[第%d轮][完成] 天气已查, 带伞提醒已设" % step)                break            observation = last_result        strong = len([m for m in self.memory if m["strength"] >= 0.5])        print("[记忆] 条数=%d, 强度>=0.5条数=%d" % (len(self.memory), strong))  if __name__ == "__main__":    agent = SlmAgent()    agent.run("明天早上去公园, 看看天气并提醒我带伞")
目的:模拟一个部署在端侧的小模型 Agent,用两轮 ReAct 循环完成“查天气并设置带伞提醒”的完整任务,展示任务分解、工具调用、记忆衰减与多轮观察反馈。
  1. plan = mini_slm(request, self.memory, observation)小模型输出本轮规划的动作序列,对应任务分解
  2. return [{"action": "query_weather", "param": {"city": "local"}}]把“查天气”拆成一个可执行的子任务
  3. if observation and "带伞" in observation:基于上一轮观察结果规划本轮动作,即多轮反馈
  4. last_result = TOOL_MAP[action](**param)工具调用映射,按注册表把动作名换成真实函数并展开参数
  5. self._remember(last_result)记忆写入,保存工具返回结果
  6. item["strength"] *= 0.9记忆衰减,旧的记忆强度每轮乘 0.9
  7. if "带伞提醒" in last_result:观察判断任务目标已达成,提前终止循环

常见误区

误区SLM 这么小,肯定什么都干不了,做 Agent 就得用几百亿参数的大模型,小模型只配做玩具。

正解小模型不是万能,但 Agent 架构的价值恰恰在于让模型做它擅长的“思考”和“决策”,把计算、记忆、调用外部工具等任务分流出去。小餐馆老板一个人也能办酒席,关键在于任务分解足够细、工具足够可靠、记忆足够清晰。SLM 的定位是“决策中枢”而非“知识库”,知识可以存在工具和记忆中。

为何常见:大家默认 Agent 等于聪明大模型加提示词,忽略了架构设计才是 Agent 的能力放大器。

误区只要把任务分解成一大串子任务,一次列完照着做就行,哪需要什么观察反馈?小模型也能一次规划到底。

正解一次规划在 SLM 上风险极高:小模型上下文短、单步误差大,长链条做到第几步就可能跑偏。小老板炒菜只会列一个大纲,下锅后要边炒边尝。ReAct 这类“规划-执行-观察-再规划”的多轮闭环,能用小步反馈纠正积累误差。

为何常见:大模型的一次性规划(plan-then-execute)效果不错,这个经验被错误迁移到了 SLM 上。

误区把聊过的所有内容都拼进提示词里不就有记忆了吗?SLM 上下文小,那我截断到最新几轮就够了。

正解SLM 的上下文窗口很小,盲目塞入全部历史很快撑爆。记忆管理讲究分层:短期记忆只保留当前任务的必要状态;长期记忆通过摘要、检索或简单的键值存储按需取用;还要有衰减机制。就像老板的笔记本不会抄全本菜谱,只记熟客和当日要事。

为何常见:大模型上下文窗口很大,把历史拼贴进提示词是最简单粗暴的“记忆”,忽视了 SLM 的资源约束。

误区让 SLM 打印一段 JSON,解析一下调用函数,这就是工具调用了。四个环节?根本没听说过。

正解工具调用四件套缺一不可:注册规约(定义工具的名字与参数 schema)、参数解析(从自然语言精确提取字段)、调用映射(从多个工具中选出正确的)、结果校验(检查工具返回值并反馈给规划循环)。只做“输出 JSON”一步,参数错、选错工具、结果不可信的问题全都会出现。

为何常见:看到 demo 中模型输出 JSON 的样子就以为全部达成,忽略了工程化的完整链路。

误区INT8、INT4 量化后模型能力损失太严重,端侧 SLM Agent 根本做不了复杂任务,还是别折腾了。

正解量化确实会带来精度损失(尤其数学和长文本推理),但配合 Agent 设计可以弥合:把高精度知识问答交给工具(搜索、查库),把重计算交给云端按需调用,SLM 只做轻量规划和路由。量化损失的是“知识”,架构补回的是“流程”——司机视力差一点,但导航给力,方向盘轻一点照样能把车开稳。

为何常见:单独测试量化模型的 benchmark 下滑,却没有在 Agent 系统层面做端到端评估。

面试题

Q1. SLM Agent 中,任务分解的核心价值是什么?

单选题 · easy

  • A.压缩模型的参数量
  • B.把大任务拆成子任务← 正确答案
  • C.扩大模型的上下文窗口
  • D.减少每轮工具调用次数

答案:B。任务分解的目的是把复杂目标切成 SLM 能一步步完成的子任务序列。A 属于量化或蒸馏的范畴,C 是模型结构问题,D 与任务分解无关。好比小老板不会一口吞下酒席订单,而是拆成一道道菜来做。

Q2. 整体任务成功率随子步骤数量增多而快速下降,能用哪个式子表达?

单选题 · easy

  • A.概率相加求总和
  • B.概率逐项连乘← 正确答案
  • C.概率取最大项
  • D.概率取模运算

答案:B。由 P(T) = ∏P(t_i|……) 可知,子任务成功率是逐项连乘,步骤越多乘积越小。加和、取最大、取模都不能体现“每一步都成功整体才成功”的性质。就像婚宴上任何一道菜没做好,整桌体验就打了折扣。

Q3. softmax 工具选择公式中,分母 Σe^{z_j} 的作用是什么?

单选题 · mid

  • A.放大不同工具的分数差异
  • B.归一化成总和为一的概率← 正确答案
  • C.压缩模型上下文内容
  • D.控制记忆条目的衰减

答案:B。分母把全部工具打分指数化后求和,使各工具概率总和为 1,得到可比较的概率分布。A 中“放大分数差异”是指数化 e^z 的作用,不是分母的职责;C、D 与 softmax 无关。就像老板在几把刀之间做选择,最终各种可能加起来要凑成 100%。

Q4. 记忆强度公式 S(t) = S_0 × γ^{Δt} 中 γ 在 0 到 1 之间,Δt 越大,S(t) 会怎样?

单选题 · easy

  • A.记忆强度随时间增强
  • B.记忆强度随时间减弱← 正确答案
  • C.记忆强度恒定不变
  • D.强度先增后减

答案:B。γ 小于 1,Δt 越大则 γ^{Δt} 越小,S(t) 越小,记忆越模糊。A 说反了,C 否定衰减,D 不符合指数函数的单调性。就像笔记本上的旧笔记,时间一久字迹越来越淡。

Q5. ReAct 循环中,更新任务状态 s_{k+1} 需要融合哪些信息?

单选题 · mid

  • A.仅需旧任务状态
  • B.旧状态加执行与观察← 正确答案
  • C.只需用户原始文本
  • D.只需要工具名称

答案:B。s_{k+1} = Update(s_k, Execute(a_k), Observe(o_k)),需要旧状态、执行结果和观察反馈三样输入。A 只剩旧状态会原地打转;C、D 信息都不完整。就像老板炒菜,要看锅里反应(执行结果)再尝一口(观察)才能决定下一步。

Q6. 下列哪种调整不能降低端到端推理延迟?

单选题 · hard

  • A.量化压缩模型权重
  • B.缩短最大规划轮数
  • C.加长模型输入上下文← 正确答案
  • D.精简工具调用链路

答案:C。加长输入上下文会让每步推理的缓存和计算量增大,延迟反而更高。A 量化直接降低单步推理耗时;B 减少总轮数;D 削减工具调用耗时。三者都能缩小端到端延迟,C 是背道而驰。

Q7. 下列关于 SLM Agent 架构设计原则的说法,正确的有哪些?

多选题 · mid

  • A.模块越多系统越可靠
  • B.角色划分高内聚低耦合← 正确答案
  • C.模型能力不足时用规则兜底← 正确答案
  • D.上下文窗口需无限扩大

答案:BC。高内聚低耦合让每个角色专注,规则兜底能应对模型能力不足。A 应轻量优先而非堆模块;D 受物理窗口限制,不可能无限扩大。小餐馆的厨房就那么点大,设备绝不是越多越好。

Q8. 工具调用的完整链路包含下列哪些环节?

多选题 · mid

  • A.工具注册与参数解析← 正确答案
  • B.参数解析与调用映射← 正确答案
  • C.调用映射与结果校验← 正确答案
  • D.无限重试与随机调用

答案:ABC。完整链路包含工具注册、参数解析、调用映射、结果校验四环。D 的“无限重试与随机调用”会拖垮端侧设备,不属于规范设计。老板用工具前得先知道有哪几把工具、参数怎么填、该拿哪把、用完怎么检查。

Q9. 以下哪些场景最适合采用 SLM Agent 方案?

多选题 · hard

  • A.手机端离线日程提醒← 正确答案
  • B.音箱本地天气问答← 正确答案
  • C.云端大模型全量问答
  • D.户外手表离线救援← 正确答案

答案:ABD。端侧离线场景(手机日程、音箱本地问答、户外手表救援)资源受限且不便联网,正适合 SLM Agent。C 是云端大模型的主场,不需要小模型方案。小餐馆老板适合开在小区楼下,不适合去国贸开宴会厅。

Q10. 综合评分 Score = α×SR + β×(1 - L/L_base) - γ×C,若产品最看重“把事做对”且不太担心成本和延迟,该如何设置参数?

单选题 · extreme

  • A.α变大β变小γ不变
  • B.α变大β变小γ变小← 正确答案
  • C.α变小β变大γ变大
  • D.α变大β变大γ变大

答案:B。最看重成功率应把 α 调大;不太担心成本和延迟,则 γ 调小、β 调小。A 中 γ 保持不变,C、D 强化了延迟或成本权重,都不符合目标。就像老板现在最在乎把菜做对,那么“成功率”这一项的权重就该最高。