工具列表顺序确实不稳定,每次请求的工具顺序都不一样!对大模型 prefix 缓存命中率有影响
根因:manager_tools.go 第 148 行 for _, registeredTool := range m.tools 直接遍历 map,顺序随机。而 SDK 自己定义的 toolsOrder []string(第 39 行,注释写着 "Track insertion order of tools")在 getTools() 中完全没有被使用。
修复:把 getTools() 改为按 toolsOrder 遍历即可:
func (m *toolManager) getTools() []*Tool {
m.mu.RLock()
defer m.mu.RUnlock()
tools := make([]*Tool, 0, len(m.toolsOrder))
for _, name := range m.toolsOrder {
if rt, ok := m.tools[name]; ok && rt != nil && rt.Tool != nil {
tools = append(tools, rt.Tool)
}
}
return tools
}
工具列表顺序确实不稳定,每次请求的工具顺序都不一样!对大模型 prefix 缓存命中率有影响
根因:manager_tools.go 第 148 行 for _, registeredTool := range m.tools 直接遍历 map,顺序随机。而 SDK 自己定义的 toolsOrder []string(第 39 行,注释写着 "Track insertion order of tools")在 getTools() 中完全没有被使用。
修复:把 getTools() 改为按 toolsOrder 遍历即可:
func (m *toolManager) getTools() []*Tool {
m.mu.RLock()
defer m.mu.RUnlock()
}