欢迎光临
我们一直在努力

Agent 入门 3|大模型在整个系统里负责什么?

假设今天是 9 月 19 日,你想让个人资料助手帮你核对报名时间,便问它:

按我保存的通知,这次读书会今天还能报名吗?如果通知有更新,以更新后的为准。

资料夹里有同一主办方发来的两份通知:

  • 9 月 10 日的报名通知: 本次读书会报名将于 9 月 20 日截止。
  • 9 月 16 日的调整通知: 本次读书会报名截止时间提前到 9 月 18 日,原通知中的截止时间作废。

按这两份通知,报名已经截止。可如果助手仍然回答“可以,明天才截止”,问题出在哪里?

可能是模型没有读懂“提前”,也可能是程序根本没有把调整通知交给模型。两种情况表面上都是答错了,解决办法却不同。

大模型在系统中的核心工作,是根据收到的信息作出判断、回答问题,或建议下一步做什么。要理解助手为什么答对或答错,还要看程序给模型提供了什么,以及怎样处理模型的回答和建议。

1. 模型能理解通知,前提是这次真的拿到了通知

你在聊天窗口里提出一个问题时,模型实际收到的通常还包括程序准备的回答要求、相关资料,以及需要用到的聊天记录。这些一起交给模型的信息,通常称为上下文。

假设程序第一次只读到了 9 月 10 日的报名通知,那么模型拿到的内容可以简化为下面这样:

回答要求:依据提供的通知回答,说明截止日期和出处;依据不足时说明还缺少什么信息。

当前日期:9 月 19 日。
用户问题:这次读书会今天还能报名吗?通知有更新时,以更新后的为准。
已取得的资料:9 月 10 日报名通知,报名将于 9 月 20 日截止。

上面展示了模型这次收到的内容。其中没有调整通知,也没有证据表明程序已经检查过所有相关资料。

模型可以据此说明“按 9 月 10 日这份通知,今天还在报名期限内”。但这只能说明旧通知中的安排,还不能证明今天仍然可以报名。助手还需要核对是否有后续通知调整了报名时间。

把文件存进资料夹,并不代表程序已经把其中的内容交给模型。 有的产品会自动读取上传文件,有的会按问题搜索资料;这些功能决定了哪些内容能被交给模型。只告诉模型文件叫什么、放在哪里,也不等于把正文交给了它。

模型从训练中获得的语言能力和一般知识,可以帮助它理解“提前”“原时间作废”。但模型不能仅凭这些能力和知识,知道你保存的通知写了什么。把调整通知交给模型,就为这次判断补充了依据,无须为此重新训练模型。

要让模型参考之前的聊天内容,软件也需要保留相关记录,并在回答时提供给模型;这项工作可以由提供模型的服务代为完成。聊天窗口里仍然显示着某句话,不代表模型这次回答时一定参考了它。相关说明。

2. 模型读懂资料后,可以回答,也可以提出补查

现在,程序把两份通知都提供给模型。要回答这个问题,模型需要把几条信息联系起来:两份通知说的是同一次读书会;调整通知明确说明原截止时间作废;9 月 19 日已经晚于新的截止日期。

在这些条件下,一个有依据的回答可以是:

按你保存的 9 月 16 日调整通知,本次报名已于 9 月 18 日截止,今天已经超过了报名期限。原通知中 9 月 20 日的截止时间已不再适用。

模型在这里做的,是把两份通知中的日期和调整说明联系起来,回答用户的问题。回答中也不能把通知中未提及的情况说成事实:通知没有提到候补报名,就不能声称“主办方还开放了候补报名”。

如果模型只收到旧通知,而助手又能查找资料,模型也可以提出补查。比如:

在允许读取的资料夹中,查找与这次读书会有关的后续通知,核对报名截止时间是否有变化。

查找资料、读取文件这些具体的操作能力,通常称为工具。程序会事先告诉模型有哪些工具,以及使用每个工具时要提供什么信息。模型据此给出操作名称和所需信息。上面的补查要求,可以用下面的教学示意表达:

操作名称:搜索通知
查询条件:这次读书会的后续通知

这里的两行用于说明操作请求包含什么,实际调用时要使用双方约定的数据格式。程序从中读取操作名称和查询条件,检查是否允许执行,再安排查找。模型在普通回答里写一句“我会查一下”,本身不代表程序已经收到并执行了操作请求。这种分工也能在官方说明中看到。

不过,模型未必能发现资料还不完整,也可能直接采用旧通知中的截止日期。因此,仍需要检查模型的回答是否有足够依据。

3. 模型提出补查后,程序负责安排查找

模型提出“查找后续通知”以后,程序要先确认要查找的文件夹是否允许读取,再安排查找,并把结果交给模型。

下面展示了一种可能的处理过程:

#mermaid-svg-aRcAibGldEf0lfut{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-aRcAibGldEf0lfut .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-aRcAibGldEf0lfut .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-aRcAibGldEf0lfut .error-icon{fill:#552222;}#mermaid-svg-aRcAibGldEf0lfut .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-aRcAibGldEf0lfut .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-aRcAibGldEf0lfut .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-aRcAibGldEf0lfut .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-aRcAibGldEf0lfut .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-aRcAibGldEf0lfut .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-aRcAibGldEf0lfut .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-aRcAibGldEf0lfut .marker{fill:#333333;stroke:#333333;}#mermaid-svg-aRcAibGldEf0lfut .marker.cross{stroke:#333333;}#mermaid-svg-aRcAibGldEf0lfut svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-aRcAibGldEf0lfut p{margin:0;}#mermaid-svg-aRcAibGldEf0lfut .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-aRcAibGldEf0lfut .cluster-label text{fill:#333;}#mermaid-svg-aRcAibGldEf0lfut .cluster-label span{color:#333;}#mermaid-svg-aRcAibGldEf0lfut .cluster-label span p{background-color:transparent;}#mermaid-svg-aRcAibGldEf0lfut .label text,#mermaid-svg-aRcAibGldEf0lfut span{fill:#333;color:#333;}#mermaid-svg-aRcAibGldEf0lfut .node rect,#mermaid-svg-aRcAibGldEf0lfut .node circle,#mermaid-svg-aRcAibGldEf0lfut .node ellipse,#mermaid-svg-aRcAibGldEf0lfut .node polygon,#mermaid-svg-aRcAibGldEf0lfut .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-aRcAibGldEf0lfut .rough-node .label text,#mermaid-svg-aRcAibGldEf0lfut .node .label text,#mermaid-svg-aRcAibGldEf0lfut .image-shape .label,#mermaid-svg-aRcAibGldEf0lfut .icon-shape .label{text-anchor:middle;}#mermaid-svg-aRcAibGldEf0lfut .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-aRcAibGldEf0lfut .rough-node .label,#mermaid-svg-aRcAibGldEf0lfut .node .label,#mermaid-svg-aRcAibGldEf0lfut .image-shape .label,#mermaid-svg-aRcAibGldEf0lfut .icon-shape .label{text-align:center;}#mermaid-svg-aRcAibGldEf0lfut .node.clickable{cursor:pointer;}#mermaid-svg-aRcAibGldEf0lfut .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-aRcAibGldEf0lfut .arrowheadPath{fill:#333333;}#mermaid-svg-aRcAibGldEf0lfut .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-aRcAibGldEf0lfut .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-aRcAibGldEf0lfut .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-aRcAibGldEf0lfut .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-aRcAibGldEf0lfut .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-aRcAibGldEf0lfut .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-aRcAibGldEf0lfut .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-aRcAibGldEf0lfut .cluster text{fill:#333;}#mermaid-svg-aRcAibGldEf0lfut .cluster span{color:#333;}#mermaid-svg-aRcAibGldEf0lfut div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-aRcAibGldEf0lfut .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-aRcAibGldEf0lfut rect.text{fill:none;stroke-width:0;}#mermaid-svg-aRcAibGldEf0lfut .icon-shape,#mermaid-svg-aRcAibGldEf0lfut .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-aRcAibGldEf0lfut .icon-shape p,#mermaid-svg-aRcAibGldEf0lfut .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-aRcAibGldEf0lfut .icon-shape .label rect,#mermaid-svg-aRcAibGldEf0lfut .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-aRcAibGldEf0lfut .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-aRcAibGldEf0lfut .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-aRcAibGldEf0lfut :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

给出回答

需要补查

允许

不允许

程序准备回答要求、问题和已有资料

模型根据收到的信息作出判断

程序检查回答,再交给用户

程序检查要查什么、去哪里查

工具查找或读取通知

程序记录原因,不执行这次查找

程序带上查找结果,再次请求模型判断

假如搜索结果中出现了调整通知,程序还需要读取与问题有关的正文,再将正文连同问题和必要的已有记录交给模型,请它继续判断。这里已经发生了新的一次模型调用:先前的调用提出补查,后续的调用依据查找结果重新判断。一次用户提问,可能需要经过这样的多次调用。

如果工具返回“读取失败”,程序就应把这个结果告诉模型。助手可以向用户说明,目前只读到了旧通知,请用户补充材料。读取失败不能被解释成“没有调整通知”。如果还要尝试其他读取方式,也需要事先规定最多尝试几次、花多长时间,避免一直重试。

即使让模型自己选择下一步,也仍然有这样的分工:模型提出要做什么,程序检查能不能做,安排操作,再把结果告诉模型。

比如,用户没有允许助手读取某个文件夹,即使模型认为里面可能有补充资料,程序也应该拦住这次读取。这项限制需要在程序中落实,不能只靠提醒模型遵守。

在一个帮助修改代码的助手中,也能看到“把操作结果交回模型”的做法:程序先把任务和已有记录交给模型,按模型提出的操作去做,再把结果记下来,供模型判断下一步。再次请模型判断前,程序还会检查操作次数、花费和用时是否已经达到事先设定的限制。

无论是修改代码,还是查找读书会通知,程序都需要把操作结果交给模型。例如,没有读到文件,程序就应该把“读取失败”告诉模型。模型拿到真实结果后,才有依据判断接下来怎么办,但仍然可能选错下一步。

4. 同样是答错,原因可能出在不同环节

回到开头那句错误回答:“今天还能报名,明天才截止。”检查时,可以先区分下面三种情况:

发生了什么应该检查什么
模型只收到旧通知,没有收到调整通知 程序是否找到了调整通知、读到了正文,并把正文交给了模型
模型已经收到两份完整通知,回答仍采用旧日期 要求模型说明判断依据,检查它是否理解了新通知对旧安排的调整;再用类似通知检查它能否答对
模型提出补查,但没有读到文件,回答却声称已核对后续通知 程序是否把读取失败的结果告诉了模型,最终回答是否说明了仍有资料未能核实

如果模型始终没有拿到调整通知,更强的语言理解能力也不能补上其中的具体内容。反过来,两份通知都已交给模型,也不意味着模型一定能理解正确。

程序能做哪些检查,也要具体区分。检查答案是否列出出处、引用的文件是否存在,有明确的判断标准;要判断新通知是否修改了旧通知的安排,还需要核对具体内容。出处链接能够打开,并不代表答案符合通知内容。

如果已经确定了截止日期,任务也只是比较日期先后,用普通程序完成就很合适。当资料写法不一、需要理解不同内容之间的关系时,可以让模型帮助判断和解释;资料不足时,也可以让模型在允许范围内提出继续查找的办法。在决定是否使用模型时,还要考虑增加的等待时间、费用和检查工作。

5. 再看两种情况,哪些工作还没完成?

沿用这两份通知,分别考虑下面两种情况:

情况一: 一次新的查询中,模型只拿到了旧通知的正文,以及搜索工具返回的文件名“9 月 16 日调整通知”。工具没能读到调整通知的正文,模型却说:“新通知把截止时间提前到了 9 月 18 日。”这句话有足够依据吗?

情况二: 模型已经收到两份通知的完整正文,也正确回答了“报名已经截止”。用户随后说:“帮我把这次的截止日期记下来,下次再问时能查到。”助手只回答一句“记住了”,是否就完成了保存?

情况一没有足够依据。仅凭文件名,无法判断截止日期是否改动,更无法确定改成了哪一天。助手需要取得正文或其他可靠证据;如果暂时读不到,就应说明尚未核实新的截止日期。即使模型恰好猜中了日期,也不能说明这次回答有可靠依据。

情况二还要检查信息是否真的保存了下来。只有软件保存了日期,并能在后续提问时查到,才算完成了用户要求的记录。模型回答“记住了”,本身不能证明这些步骤已经完成。

回到最初的报名问题,模型需要理解两份通知的关系,并根据当前日期判断是否还能报名;信息不全时,还可以提出补查。程序则负责提供资料、安排允许执行的操作,再把结果交给模型。助手答错时,检查这些工作分别做到了哪一步,才能找到需要改进的地方。

赞(0)
未经允许不得转载:171主机测评 » Agent 入门 3|大模型在整个系统里负责什么?
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址