千问LLM之LLM的特工行动:工具召唤功能实战案例?Agent 到底是什么?

学术   2025-01-06 22:43   江苏  

智能体Agent新鲜吗?并不新鲜,因为我们之前处理LLM的输出的时候,代码中也会有一些判断是否可以采用LLM的输出,还是需要调用别的信息。

不过Agent把之前hardcode部分的调用变为自动决定调用哪些信息了。这也是不小的让LLM自主思考的尝试。
 

01

为什么LLM需要 Tool Calling?


还记得LLM傻傻分不清9.9和9.11哪个更大的问题吗?截至2024年12月25日,chatgpt-4o 依然傻傻分不清。

 

这个问题如何结合python代码跑一个运算岂不是很容易就算出来了?小学生都会的问题LLM却不会。 



结合上面的问题来看,LLM并非是万能的。

但如果我们能够巧妙地结合搜索信息和Python代码的魔力,那么LLM的输出就能变得精准无比。

想象一下,LLM在面对一个复杂问题时,突然灵光一闪,决定召唤它的特工——Python代码,来执行一次“tool calling”。这就像是在说:“嘿,Python,这个问题交给你了!”

而Python代码,就像是一个随时待命的特工,只需要LLM传入正确的参数,就能迅速执行任务并返回结果。

这样的合作,让LLM在解决问题时变得更加得心应手。LLM不再是孤军奋战,而是有了Python这个强大的盟友。要知道LLM的盟友可以有很多,绝不止python。

那么LLM具体是如何招呼自己的特工的呢?下面以llama3.1来说明。 

02

如何做Tool Calling

如何做Tool Calling呢?需要通过 构造 prompt 来实现。具体来说有如下三种方式:

  • Built-in Tools (Brave, Wolfram)
  • JSON-based Tool Calling
  • User-defined Custom Tool Calling
上述的三种方式最终都要以构造Prompt方式传送给LLM,那么我们需要把相关信息放在哪个role里面,都有哪些role呢:

Llama3.1新增加了ipython 角色,这个角色可以用于返回tool-calling的结果。

另外llama3.1都有哪些新的tag呢?

1)<|eom_id|> 通常这个tag 表示模型需要调用相应的tool。


2)<|python_tag|> 用于表示模型的 python代码输出。

下面我们看看通过 build-in tools的方式构造prompt:

如果需要 code interpreter 构造的prompt和LLM的输出为:

注意LLM并不会直接调用 code interpreter 去执行相应的代码,需要我们自己写相应的代码去执行这个python代码或者内置的相应的函数tool-call函数。

之后把 python执行的结果以及tool call 函数的输出组成新的Prompt 发送给LLM,然后等LLM给出最终的答案,就像如下:

我们看一下相应的流程图:
这样就更清楚了。简单来说要做一个智能 Agent或者说 Agent 到底是什么?我觉得 Agent 至少应有如下三个特征:
1)首先 LLM 知道什么时候该call 什么 tool。
2) 有一个Executor去真正实现call tool。
3) Executor 返回的结果再次传给LLM,LLM根据结果给出准确答案。


03

总结

Llama3.1以后的版本已经让模型内置了支持agent的潜能,让我们的LLM根据实际需要能够做一些简单的决策了,这让LLM更加的智能和准确了,同时做Agent的门槛也降低了。

参考https://www.llama.com/docs/model-cards-and-prompt-formats/llama3_1/


进技术交流群请添加AINLP小助手微信(id: ainlp2)

请备注具体方向+所用到的相关技术点

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括LLM、预训练模型、自动生成、文本摘要、智能问答、聊天机器人、机器翻译、知识图谱、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLP小助手微信(id:ainlp2),备注工作/研究方向+加群目的。

AINLP
一个有趣有AI的自然语言处理公众号:关注AI、NLP、大模型LLM、机器学习、推荐系统、计算广告等相关技术。公众号可直接对话双语聊天机器人,尝试对对联、作诗机、藏头诗生成器、自动写作等,查询相似词,测试NLP相关工具包。
 最新文章