最近在做一个能查数据库的AI Agent,用的是ReAct那套思路。但发现一个很头疼的问题:如果把工具的描述(比如每个函数的参数、返回值格式)全塞进System Prompt里,模型有时候会忽略,尤其是在多轮对话后。但要是放在User的每轮输入里,又特别占token,而且感觉模型会混淆当前任务和工具说明。看了LangChain和AutoGPT的源码,它们做法也不一样。想问问有实际落地经验的老哥,工具定义到底放哪层更稳?有没有什么结构化的写法能兼顾稳定性和成本?
最近在做一个能查数据库的AI Agent,用的是ReAct那套思路。但发现一个很头疼的问题:如果把工具的描述(比如每个函数的参数、返回值格式)全塞进System Prompt里,模型有时候会忽略,尤其是在多轮对话后。但要是放在User的每轮输入里,又特别占token,而且感觉模型会混淆当前任务和工具说明。看了LangChain和AutoGPT的源码,它们做法也不一样。想问问有实际落地经验的老哥,工具定义到底放哪层更稳?有没有什么结构化的写法能兼顾稳定性和成本?
我之前也踩过这个坑,工具说明放System确实容易被多轮对话稀释,后来改成System里只放工具名和一句话用途,详细的参数schema用结构化JSON单独走一个tool定义字段,模型反而更稳。你用的框架如果支持原生function calling,就别硬塞prompt里了,省token还准。