#417·parlant

[增强] 推测性工具执行

作者: mc-kfir创建于 2025年6月9日更新于 2025年6月24日
标签enhancement

理由

有些工具不需要用户提供参数,并且可以更快、更便宜地运行 - 典型的例子是 FAQ/Q&A 查询。对于这些情况,我们希望采用推测执行:

  • 立即执行。使用完整的 loadedContext(交互历史、客户、代理等)后,引擎会运行工具,而不需要推断是否应该评估结果。执行完成后,检查返回的 ToolResult,并决定是否保留它或丢弃它(#416)。
  • 示例:一个 Q&A 工具生成了非常详细的答案。但是,我们有一个 指导原则 要提出一个后续问题,但 Q&A 工具提供的额外信息可能会使指导原则不再像没有这些信息一样有效。 推测执行是与生命周期标志(#416) 平行的 - 无参数的工具仍然可以标记其结果为 responsesession,并且引擎会同时应用两个决策 - 首先是“接受或拒绝”,然后是“保存多久”(两个位)。

解决方案建议

如果一个工具没有参数且没有重叠 - 它将在不进行评估的情况下运行。

  • 将为这种类型的工具调用创建一个新的工具批处理类:InstantToolBatch
  • InstantToolBatch 将立即创建一个没有参数、空见解和空 GenerationInfo 的工具调用。
  • 由于工具候选人没有经过 LLM 评估,因此必须通过程序比较已上传的工具调用,以确保它不会以 完全相同的参数 两次运行。为此,在 execute_tool_calls 之前将添加一个新的过滤函数:
python
async def remove_duplicate_executions(
    tool_calls: list[ToolCall],
    staged_events: Sequence[EngineEvent],
) -> list[ToolCall]
  • 此函数返回经过过滤后的输入工具调用,去除了所有相同的工具调用(具有相同的参数)。此函数还将用作 LLM 评估的工具调用的安全措施(对于 LLM 未能识别此类重复调用的情况)。

讨论

更改动机为仅减少延迟

新的解决方案建议

如 #319 中所述,基本的推测执行与指导原则匹配同时进行。但是,对其有一些更改。

mermaid
---
title: Speculative Tool Execution
config:
  mirrorActors: false
  theme: base
---
sequenceDiagram
participant  Engine
participant  GM  as  GuidelineMatcher
participant  TC  as  ToolCaller
participant  TB  as  SpeculativeRunner
Engine  -)  TB  : Populate speculative-enabled tools
activate  TB
Engine  -->>  TB  : Begin inference of speculative-enabled tools
TB  ->>  TC  : Speculatively infer tool calls
activate TC
Engine  -->>  GM  : Propose relevant guidelines
activate  GM
TC-->>TB : 
deactivate TC
TB->>TC  : Execute speculative tools
activate TC
GM  -->>  Engine: Guidelines
deactivate  GM
TC-->>TB : ToolResult
deactivate TC
Engine  ->>  TC  : Infer and execute tool calls (from activated guidelines)
TC  ->>  TB  : Get results
TB  -->>  TC  : ToolsResults
deactivate  TB
activate  TC
TC  ->>  TC  :
…

内容来源: emcie-co/parlant