使用 OpenAI Function Calling 原生工具
作者:程序员马丁
Ragent AI —— 从 0 到 1 纯手工打造企业级 Agentic RAG,拒绝 Demo 玩具!AI 时代,助你拿个offer。
上一篇咱们把系统提 示词从最小版升级到了结构化的完整版:角色与边界、格式锚定、Few-shot 示例、注意事项四个模块一上,格式稳定性从 60% 拉到了 95%+。大脑现在基本能稳定地按 Thought: / Action: / Action Input: 格式输出了。
但你有没有注意到一个事实——从第 05 篇到现在,咱们一直在跟文本解析较劲。第 05 篇写了 parseAction() 按行扫描提取工具名和参数,第 06 篇为了支持多行 JSON 入参把解析器改成了多行收集版,第 07 篇又花了大半篇幅打磨提示词来锚定输出格式。三篇文章、三轮加固,本质上都是在给同一个问题打补丁:大模型的输出是自由文本,而你需要从里面精确提取结构化数据。
这一篇,咱们换个思路——不再从文本里提取结构化数据,而是让模型直接返回结构化数据。这就是 Function Calling。
升级到 Function Calling 之后,TinyAgent 的循环模式和 Spring AI、LangChain4j 等主流框架完全一致——这就是现代工具调用 Agent 的工业主路径。它保留了 ReAct 的 Act → Observe → Loop 工程骨架,但模型的推理过程(Thought)从显式的文本标签变成了隐式的内部决策。换句话说,大脑还在想,只是不一定把想法写出来了。如果你的场景需要把推理过程显式拿回来做审计或调试,可以在 Function Calling 框架内加上可观测的推理通道。
本项目中具体代码已上传 GitHub TinyAgent,大家 Clone 项目后,将代码分支切换到 1.3.x,默认主分支是最新代码。运行前复制
.env.example为.env,把自己的 API Key 填进去,默认阿里云百炼平台;.env已加入.gitignore