关于这个提一个我以为很多人都知道,但在公司讲课过程中发现其实大家不知道的agent开发的重点技巧:tool-call,无论是function_calling还是MCP调用,都是分显式和隐式两种的。
1️⃣隐式调用:现代化的自动工具执行
最近的LLM都内置了自动工具调用能力。比如Gemini(你可以通过au
tomatic_function_calling这个flag来控制这个特性)。由于官方文档和示例都以隐式调用为主,如果你是最近两个月才开始接触MCP开发,你使用的很可能一直都是隐式模式。
在隐式模式下,整个工具调用流程对开发者来说是黑盒的。LLM自动判断是否需要调用工具,自动选择合适的工具和参数,自动执行工具并整合结果。开发者只需要提供工具列表,然后就能直接获得最终的自然语言回答。
隐式是更新的技术,也是未来的趋势,随着大模型能力的进化,这种也应该会成为主流。
聪明的同学应该猜到了,夸完了,转折就来了。没错,隐式有着暂时难以避免的缺点。

马东锡 NLP
@dongxi_nlp
07-15
Kimi K2 的一大亮点,是将文本任务里基于 token 的处理思路,成功迁移到 Agentic 场景中的 tool-call 级别:在 Agentic 任务中,tool call 就相当于“行动 token”。
什么意思呢?解释如下:
在文本任务中:
CoT 是一串 token
而在Agentic 场景中:
CoT 是一段 tool-call 序列,即planning

3️⃣显式调用:精确控制的手动解析模式
相对的,显式调用模式需要开发者手动处理工具调用的每个环节。你需要在系统提示中明确告诉LLM如何格式化工具调用请求,然后手动解析LLM回答中的工具调用指令,执行对应的工具,最后将结果整合到最终回答中。
这是古法调用MCP的方法(虽然也就传统了半年而已),隐式只是把这部分也由LLM进行处理。
不过实际上现在实际开发里使用的显式调用,也并不是完全古法的。
4️⃣ 半自动回填式显示调用
方法名称是我乱起的。具体做法很简单,你需要在MCP Client中,对于用户的查询,给LLM工具列表后,要求它不是自己调用工具,而是返回需要调用的工具的名称。
接下来,你需要让Client手动调用MCP Server。由于这部分数据很可能就是普通的API返回的格式化好的JSON data,因此你可以把这个和LLM的应答一起封装起来返回。
这个方法适应范围并不那么宽泛,因为这要求多轮LLM对话,比单次对话还是要麻烦不少的。同时你的MCP HOST最好不是什么都管的那种完全通用的chat客户端,这个更适合固定的服务。
但好处就是有了raw data后,你可以完全自由处理数据,数据处理和UI显示等代码直接复用以前服务里的部分即可。而且这种方法兼容并没有自动工具调用的LLM。我们公司由我主导的新服务就是采用的这种方法,反响不错。
另外有没有其他方法,想听听各位大佬的经验:
@dotey @chaowxyz @hylarucoder @yihong0618 @pangyusio
Substack 版本:open.substack.com/pub/web3rove...…
Quaily:
quaily.com/cryptonerdcn/p/disc...…
@lyricwai @QuailyQuaily
一些关于各种误解的回应:

CryptoNerdCn
@cryptonerdcn
07-16
其实何止大模型输入需要在上下文里提供足够的信息呢,人类也是需要的。昨天我因为在这贴里忘了付上公司讲课时分享的前半段,就被几位质疑,又是觉得我在说“LLM有执行能力”,又是“我还以为是什么行业突破,没想到是细枝末节”😂 x.com/cryptonerdcn/s…
来自推特
免责声明:以上内容仅为作者观点,不代表Followin的任何立场,不构成与Followin相关的任何投资建议。
喜欢
收藏
评论
分享






