杠精派
派聪明
0/512

热门评论

粗心的超短裙 2026年07月28日 00:37
引用原文:但一个字的正文都没进来
这表述半天没看懂
点赞
回复1 取消回复
鱼腥草 2026年08月10日 21:44
就是只把skill的索引和描述先加到prompt里,用户输入后作判断选取skill的正文到缓冲区,下一次构建消息列表的时候加到user前面,做到了省token的效果,就是渐进式加载的目的,一步一步注入到消息历史里
点赞
回复 取消回复

6 条评论

活力的抽屉 2026年09月07日 21:06
引用原文:命令黑名单、路径守卫、高危操作人工确认、审计日志
@派聪明 这些分别在哪里实现了?提供一下代码来源
点赞
回复1 取消回复
活力的抽屉 2026年09月07日 23:10
@派聪明
点赞
回复 取消回复
活力的抽屉 2026年09月07日 20:59
引用原文:另一个是流式场景下工具调用的参数是分片到达的,要按序号把参数片段拼接完整,再解析成 JSON 交给执行器,拼早了就是半截 JSON,直接解析失败。
@派聪明 这句话如何理解?是要等到所有的工具调用返回再统一解析?
点赞
回复1 取消回复
派聪明 2026年09月07日 20:59
# 流式场景下工具调用参数分片拼接的理解## 这句话的核心含义**不是等所有工具调用返回,而是等“单个工具调用”的参数完整后,才解析这一个调用。** ##为什么要拼接? LLM 以流式(streaming)方式返回内容时,文本是逐段到达的,不是一次性到达。一个工具调用的参数(JSON)也不例外,会被切成多个片段: ``` 片段1: {"command": "gi片段2: t stat片段3: us"} ``` 这是同一个工具调用,但分了3次到达。 ## 关键逻辑:按序号拼接每个参数片段带有序号(index),用来标识它属于哪个工具调用: - **同一个序号的片段** →按到达顺序拼接,属于同一次调用- **不同序号的片段** → 属于不同的工具调用,不能混拼所以正确的做法是: 1. 收到片段,按序号归类缓存2. 流式传输结束(收到 finish信号) 3.每个序号对应的拼接结果才是完整 JSON,此时才解析并交给执行器## 为什么“拼早了”会失败? ``` 收到片段1: {"command": "gi ←立刻解析结果: JSON 解析失败❌(半截字符串) ``` JSON必须完整才能被 `json.loads()`之类的解析器处理,缺一个引号或括号都不行。 ## 回答你的疑问| 问题 |答案 | |------|------| | 要等所有工具调用返回再统一解析吗? | 不需要 | | 正确做法 | 以**单个工具调用**为单位,等它自己的所有分片到齐、流式结束,就解析它、执行它 | | 多个工具调用能否并行? | 可以,不同调用的分片互不干扰,各自拼完整后各自执行(如文中只读工具4路并发) | **一句话总结**:粒度是“单个工具调用”,不是“所有工具调用”。流式结束的标志才是触发解析的时机。
点赞
回复 取消回复
粗心的超短裙 2026年07月28日 00:37
引用原文:但一个字的正文都没进来
这表述半天没看懂
点赞
回复1 取消回复
鱼腥草 2026年08月10日 21:44
就是只把skill的索引和描述先加到prompt里,用户输入后作判断选取skill的正文到缓冲区,下一次构建消息列表的时候加到user前面,做到了省token的效果,就是渐进式加载的目的,一步一步注入到消息历史里
点赞
回复 取消回复

目录