目前,绝大多数小型本地开源大语言模型以及部分商用大模型接口通常不支持稳定的 tool calling 功能。现有的解决方案多为微调 LLM,但会浪费大量时间和算力。有一种新的方法,即仅使用提示词工程和精巧的代码设计,就能让 LLM 获得稳定的 tool calling 能力。
通过多个不具备 tool calling 能力的 LLM 进行实验,结果显示所有模型都能成功执行调用工具这一步,并正确输出能被正则表达式抓取的字典。但在使用 python 解释器任务上,ollama 量化版本的 llama38b 和 mistral7b 模型受限于代码生成水平,不能很好地输出正确代码,导致无法稳定完成计算任务。在搜索知识图谱任务上,所有模型都能让工具返回相关知识,但 ollama 量化版本的 qwen27b 和 mistral7b 模型受限于逻辑理解能力,不能稳定理解知识图谱中多个关系边之间的逻辑关系。实验证明提示词工程可让 LLM 获得 tool calling 能力,但能否利用工具返回的信息解决用户问题,仍受 LLM 自身智能水平限制,较大的模型(如 gemma29b)对工具返回结果的利用能力更稳定。
在大模型请求中,最大的两个变量是 Messages 和 Tools。Messages 里放的是 sys prompt、memory、user query;Tools 里放的是一些能力的 Json Scheme,两者组合形成整个完全的 Prompt。Agent 应用开发的本质是动态 Prompt 拼接,通过工程化手段将业务需求转述成新的 prompt。短期记忆是 messages 里的历史 QA 对,长期记忆是 summary 之后的文本再塞回 system prompt。RAG 是向量相似性检索,可放在 system prompt 里或通过 tools 触发检索。Action 是触发 tool_calls 标记,进入请求循环,拿模型生成的请求参数进行 API request,再把结果返回给大模型进行交互,没有 tool_calls 标记则循环结束。Multi Agents 则是更换 system prompt 和 tools。当然,想做深做好肯定还有很多坑需要踩。
2025-02-27