谈谈Function Calling

本文涉及的产品
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_高级版,每接口累计50万次
视觉智能开放平台,视频资源包5000点
简介: Function Calling赋予大语言模型调用外部工具的能力,弥补其缺乏行动力、信息滞后等缺陷。它像“指挥家”般,理解用户意图,选择合适的工具执行操作,并将结果反馈给用户,从而连接虚拟与现实。这一机制让大语言模型如虎添翼,更好地服务于人类。

👻 大模型分发助手,分发你的Prompt,助你学习AIGC
👻 LLM-HUB: Distribute Your Prompt, Unlock AIGC's Power

Function Calling,这个让大语言模型 (LLM) 如虎添翼的利器,正逐渐成为人工智能领域的一大热点。它究竟是什么?如何运作?又能为我们带来哪些改变?让我们一起深入探索 Function Calling 的奥秘,揭开其背后的“魔法”,并展望其无限的未来!

1. 大语言模型的困境:有“脑”却无“手”,空有知识却无法行动

大语言模型,例如 GPT-4,拥有强大的知识储备和语言理解能力,能够进行流畅的对话、创作精彩的故事,甚至编写代码。然而,它们也面临着一些难以克服的困境,就像一个空有知识却无法行动的巨人:

  • 缺乏行动力: 就像被困在虚拟世界中的大脑,只能提供信息,无法直接与现实世界互动。例如,它可以告诉你如何煮咖啡,但无法帮你磨咖啡豆、煮咖啡、甚至递给你一杯咖啡。 这就好比一位博学的教授,可以讲解复杂的理论知识,但却无法在实验室进行实际操作。
  • 信息滞后: 知识库的更新速度有限,无法获取最新的实时信息,例如天气、股价等。这意味着它可能告诉你昨天的天气,或者一个小时前的股价,而这些信息可能已经过时了。就像一本印刷好的百科全书,内容固定,无法实时更新。
  • 缺乏个性化: 无法根据用户的特定需求提供个性化服务,例如预订航班、安排会议等。它只能提供通用的信息,而无法根据你的个人喜好或行程安排提供定制化的服务。如同一个没有情感的机器人,只能按照预设的程序执行任务,无法理解和满足用户的个性化需求。
  • 无法处理复杂任务: 许多现实世界的任务需要多个步骤和工具的协同配合,而大语言模型自身无法完成这些复杂的操作。例如,它无法帮你安排一次旅行,因为它需要预订机票、酒店、安排行程等等,这些都需要调用不同的工具和服务。就像一个只会单一技能的工匠,无法胜任需要多种技能协作的复杂工程。
  • 容易产生“幻觉”: 大语言模型有时会生成不准确或虚构的信息,这被称为“幻觉”。 这是因为它们是基于统计概率进行预测,而不是真正的理解语言的含义。 就像一个擅长模仿的演员,可以惟妙惟肖地扮演各种角色,但却并不真正理解角色的内心世界。

换一种说法,大语言模型,就像一介白面书生,聪慧无比,每天在家里读书,大门不出,二门不迈,两耳不闻窗外事,眼高手低。你让他给你做碗面条,他告诉你100种面条的做法,但是就不给你做;你让他给你洗衣服,他能告诉你洗衣机的前世今生,说的好厉害,但就不给你洗。所以如何给这个书生,搭配各种助手,发挥他的价值,就成了一件非常有意义的事情。

2. Function Calling 横空出世:为大语言模型插上翅膀,连接虚拟与现实

为了解决这些问题,Function Calling 应运而生。它就像为大语言模型配备了“手脚”,让它们能够调用外部工具 (Tools,早先叫Function Calling,后来改成了Tools,一个意思),执行实际操作,与现实世界互动。

Function Calling 的核心思想是: 将大语言模型的语言理解能力与外部工具的功能结合起来,让大语言模型能够理解用户的意图,并调用合适的工具来完成任务。

这就像为一个知识渊博的大脑连接上了能够执行操作的四肢,让它能够将知识转化为行动,真正地为人类服务。

例如,通过 Function Calling,大语言模型可以:

  • 调用天气 API 获取实时天气信息: 不再局限于提供过时的天气预报,而是可以告诉你此时此刻的天气状况,就像你打开手机上的天气应用一样。
  • 调用订票网站 API 预订机票: 不再只是告诉你如何订票,而是可以直接帮你完成订票操作,就像一个专业的旅行代理一样。
  • 调用日历 API 安排会议: 不再只是提醒你会议时间,而是可以直接帮你安排会议,并发送邀请给参会者,就像一个高效的私人助理一样。
  • 调用数据库查询信息: 可以访问和查询数据库中的信息,例如产品信息、用户信息等,就像一个专业的数据库管理员一样。
  • 调用代码执行程序: 可以执行代码来完成各种任务,例如数据分析、图像处理等,就像一个经验丰富的程序员一样。

3. Function Calling 的运作机制:像“指挥家”一样协调工作,将意图转化为行动

Function Calling 的运作机制可以概括为以下几个步骤,就像一个精密的“齿轮系统”,每个步骤都环环相扣,协同工作:

  1. 用户提出需求: 用户用自然语言描述他们想要完成的任务,例如“帮我预订明天从北京到上海的机票”。 就像用户向一个智能助手发出指令一样。
  2. LLM 理解意图: 大语言模型分析用户的语言,理解其意图,并将其转化为结构化的请求。例如,它会识别出用户想要预订机票,并提取出关键信息,如出发地、目的地、日期等。 就像一个专业的翻译,将用户的自然语言翻译成机器能够理解的指令。
  3. 选择合适的工具: 大语言模型根据用户的需求,从预先定义好的工具库中选择合适的工具来完成任务。例如,它会选择一个订票网站的 API 来完成机票预订。 就像一个经验丰富的工匠,根据不同的任务选择合适的工具。
  4. 调用工具执行操作: 大语言模型将用户的需求转化为工具能够理解的参数,并调用工具执行操作。例如,它会将出发地、目的地、日期等信息传递给订票网站的 API,并请求预订机票。 就像一个熟练的操作员,操作机器完成特定的任务。
  5. 返回结果: 工具执行完成后,将结果返回给大语言模型,再由大语言模型将结果以自然语言的形式呈现给用户。例如,订票网站 API 会返回预订结果,大语言模型会将结果整理成用户友好的语言,例如“已成功为您预订明天从北京到上海的机票”。 就像一个专业的播报员,将结果清晰地传达给用户。

落地到应用上面,基本流程如下:

functioncall3.png

  1. 用户发起一个Prompt,如:今天天气如何?
  2. 应用会携带用户的Prompt,以及多个函数的定义(里面带有天气函数定义),一起发送给大模型。
  3. 大模型收到请求后,会自动判断是否需要调用这些函数,如果发现需要调用,则会将函数定义中规定的参数,返回给应用,如:“location”,即哪个地方的天气,或者其他更多的参数。
  4. 应用收到这些参数后,会调用自己的方法,可能是API,也可能是一个计算逻辑,最终形成对这个函数的输出,如:10°。
  5. 应用得到函数的输出以后,会再将结果和函数定义一起,一并再次发送给大模型。
  6. 大模型会根据函数调用结果,返回给应用自然语言的回答。
  7. 应用将大模型的自然语言回答,返回给用户。

我们直接基于大模型分发助手平台,来更直观的看下这个流程。

由于大模型分发助手,定位在学习Prompt,本身不是一个整合后的对话产品,所以,对应图中的角色,可以将用户和应用合为一个,即:不需要步骤17

  1. 我们直接开始关注步骤2,发送Prompt和Function定义,在大模型分发助手中,填写用户消息,并定义一个查询天气的函数,我们本次只选择一个大模型,DeepSeek(大模型间的Function Calling回复语法,很多存在差异,无法兼容)。

query.png
function.png

  1. 点击执行后,我们会收到大模型的回复

function-response.png

可以看到,大模型从我的提问中,了解到当前要查询天气,并且要查询的地区(location)是北京,所以返回给了我函数名称和地区

  1. 按照前面Function Calling流程图中的逻辑,我们该执行第4步“调用函数”了,就如前面说的,大模型分发助手并非是一款大模型应用,是协助学习的,这里自己将大模型的回复发送上去,并填上温度即可,而实际应用中使用时,需要调用API去获取这个信息。相当于我们直接完成了步骤45

functioncall2.png

  1. 点击执行后,我们会再次收到大模型的回复,这时,就已经完成了整个Function Calling的整个流程。

response-2.png

  1. 我们在大模型分发助手的页面,再看下完整的发送和回复图。

all.png

4. Function Calling 的优势:突破局限,释放潜能,开启 AI 新时代

Function Calling 为大语言模型带来了诸多优势,使其能够突破自身的局限,释放更大的潜能,开启人工智能的新时代:

  • 扩展能力边界: 让大语言模型不再局限于提供信息,而是可以执行实际操作,解决更多实际问题。这就像为大语言模型打开了一扇通往现实世界的大门,让它能够参与到人类的日常生活中,成为一个真正的助手,而不是一个只能纸上谈兵的“书呆子”。
  • 提升效率: 通过调用外部工具,大语言模型可以更高效地完成任务,节省时间和资源。例如,它可以自动完成一些重复性的工作,例如填写表格、发送邮件等,从而提高工作效率,将人类从繁琐的重复劳动中解放出来。
  • 增强用户体验: 让用户能够更方便地与大语言模型交互,获得更便捷的服务。例如,用户可以通过语音或文字指令,让大语言模型完成各种任务,而无需手动操作,就像拥有一个贴心的私人助理,随时随地为你服务。
  • 实时信息获取: 通过调用外部 API,大语言模型可以获取最新的实时信息,例如天气、股价等。这使得大语言模型能够提供更加准确和及时的信息,更好地满足用户的需求,就像一个永远在线的新闻播报员,随时为你提供最新的资讯。
  • 个性化服务: 通过调用不同的工具和 API,大语言模型可以根据用户的特定需求提供个性化服务。例如,它可以根据用户的喜好推荐餐厅、电影等,或者根据用户的行程安排提供旅行建议,就像一个了解你一切的私人定制师,为你打造专属的服务。
  • 解决“幻觉”问题: 通过调用外部工具获取可靠的信息,可以减少大语言模型产生“幻觉”的可能性,提高其输出结果的准确性和可靠性。 这就像为大语言模型配备了一个“事实核查员”,帮助它识别和纠正错误信息。

5. Function Calling 的应用场景:无所不能的 AI 助手,渗透到生活的方方面面

Function Calling 的应用场景非常广泛,它就像一个无所不能的 AI 助手,渗透到生活的方方面面:

  • 智能助手: 例如 Siri、Alexa 等,可以通过 Function Calling 完成订餐、订票、设置闹钟等任务,成为用户生活中的得力助手,让生活更加便捷和智能。
  • 客户服务: 例如自动回复机器人,可以通过 Function Calling 解答用户问题、提供技术支持等,提高客户服务效率和满意度,例如 24 小时在线客服,可以随时解答用户疑问,解决问题。
  • 数据分析: 例如数据分析平台,可以通过 Function Calling 调用不同的数据分析工具,进行数据分析和可视化,帮助用户更好地理解数据,例如自动生成报表、图表等,帮助用户快速分析数据,发现规律。
  • 教育领域: 例如在线教育平台,可以通过 Function Calling 提供个性化的学习资源和辅导,帮助学生提高学习效率,例如根据学生的学习进度和水平,推荐合适的学习资料和练习题。
  • 医疗领域: 例如医疗诊断系统,可以通过 Function Calling 访问医疗数据库,辅助医生进行诊断和治疗,例如根据病人的症状和病史,查询相关的医学文献和案例,辅助医生做出更准确的诊断。
  • 金融领域: 例如智能投顾平台,可以通过 Function Calling 分析市场数据,为用户提供投资建议,例如根据用户的风险偏好和投资目标,推荐合适的投资产品。

logo-3-removebg-preview.png


大模型分发助手 LLM-HUB
https://www.llm-hub.cn?s=EE4V
分发你的Prompt,助你学习AIGC

相关文章
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
探索未来AI趋势:掌握Function Calling技巧,解锁大模型精度提升的秘密武器,让你的数据科学项目事半功倍!
【10月更文挑战第6天】随着深度学习技术的发展,神经网络模型日益复杂,Function Calling作为一种机制,在提升大模型准确度方面发挥重要作用。本文探讨Function Calling的概念及其在大模型中的应用,通过具体示例展示如何利用其优化模型性能。Function Calling使模型能在运行过程中调用特定函数,提供额外的信息处理或计算服务,增强模型表达能力和泛化能力。例如,在文本生成模型中,根据上下文调用词性标注或实体识别等功能模块,可使生成的文本更自然准确。通过合理设计条件判断逻辑和功能模块权重,Function Calling能显著提升模型整体表现。
56 3
|
7月前
|
存储 JSON 开发框架
给开源大模型带来Function Calling、 Respond With Class
OpenAI 在他的多个版本的模型里提供了一个非常有用的功能叫 Function Calling,就是你传递一些方法的信息给到大模型,大模型根据用户的提问选择合适的方法,然后输出给你,你再来执行。
|
7月前
|
SQL 人工智能 JSON
【AI大模型应用开发】2.2 Function Calling连接外部世界 - 【实战】查询数据库
【AI大模型应用开发】2.2 Function Calling连接外部世界 - 【实战】查询数据库
170 0
|
7月前
|
人工智能 JSON 自然语言处理
【AI大模型应用开发】2.1 Function Calling连接外部世界 - 入门与实战(1)
【AI大模型应用开发】2.1 Function Calling连接外部世界 - 入门与实战(1)
557 0
|
12天前
|
中间件 Docker Python
【Azure Function】FTP上传了Python Function文件后,无法在门户页面加载函数的问题
通过FTP上传Python Function至Azure云后,出现函数列表无法加载的问题。经排查,发现是由于`requirements.txt`中的依赖包未被正确安装。解决方法为:在本地安装依赖包到`.python_packages/lib/site-packages`目录,再将该目录内容上传至云上的`wwwroot`目录,并重启应用。最终成功加载函数列表。
|
2月前
|
JavaScript
箭头函数与普通函数(function)的区别
箭头函数是ES6引入的新特性,与传统函数相比,它有更简洁的语法,且没有自己的this、arguments、super或new.target绑定,而是继承自外层作用域。箭头函数不适用于构造函数,不能使用new关键字调用。
|
2月前
|
数据可视化 开发者 索引
详解Wireshark LUA插件函数:function p_myproto.dissector(buffer, pinfo, tree)
在 Wireshark 中,LUA 插件通过 `function p_myproto.dissector(buffer, pinfo, tree)` 扩展协议解析能力,解析自定义应用层协议。参数 `buffer` 是 `PacketBuffer` 类型,表示原始数据包内容;`pinfo` 是 `ProtoInfo` 类型,包含数据包元信息(如 IP 地址、协议类型等);`tree` 是
74 1
|
2月前
|
JavaScript
箭头函数与普通函数(function)的区别
箭头函数是ES6引入的新语法,相比传统函数表达式更简洁,且没有自己的this、arguments、super或new.target绑定,而是继承自外层作用域。这使得箭头函数在处理回调和闭包时更加灵活方便。
|
2月前
|
C++ 容器
函数对象包装器function和bind机制
函数对象包装器function和bind机制
21 0
|
4月前
【Azure Durable Function】PowerShell Activity 函数遇见 Newtonsoft.Json.JsonReaderException: The reader's MaxDepth of 64 has been exceeded.
【Azure Durable Function】PowerShell Activity 函数遇见 Newtonsoft.Json.JsonReaderException: The reader's MaxDepth of 64 has been exceeded.