AI系列:大语言模型的function calling(上)

大语言模型(LLM) 的function calling

大语言模型(LLM)可以使用自然语言与人类对话。但在使用它完成某项复杂工作时,很多时候必须依赖其他外部工具,这包括但不限于:

  • 训练的知识库和提示词以外的知识。包括某些垂直细分领域以及非公开的数据。
  • 计算任务。相信我,即使它给出的结果看起来很像样,你也不能相信它在计算方面的能力;它无法保证100%的准确性。
  • 实时数据。需要外部工具提供。

能识别需要使用的外部工具,能根据其结果数据完成对话的功能叫做function calling。

实验:OpenAI之function calling

OpenAI的GPT作为LLM的代表作,我们将给它提出如下问题:

问题:一共有3个人,每个人有15个苹果,10个鸭梨,一共有多少苹果?
注: 这个简单的逻辑和算数题只作为实验用途;实际应用中可以扩展到复杂的计算。

我们将给GPT提供两个function/tool。一个是乘法,一个是加法。
注: 其中加法用来迷惑GPT。

我们期待的结果:GPT能判断使用乘法及其参数,并使用乘法function calling给出的结果数据,最终返回正确答案:
三个人一共有45个苹果。

序列图:function calling如何工作

我们的代码和GPT将怎样完成这个过程呢?这里将整个过程描绘在下面的时序图中:

<think>好的,用户现在想了解如何通过函数调用的方式与大型语言模型进行交互,也就是Function Calling的方法和示例。首先,我需要回忆一下相关的知识,确保信息准确。Function Calling允许大模型执行外部函数,比如获取实时数据或与数据库交互,这扩展了模型的能力。 首先,应该解释Function Calling的基本概念,可能引用已有的参考资料,比如用户提供的引用[1]和[2]。然后,分步骤说明如何实现,比如定义函数、构建提示、解析响应和执行函数。用户可能需要具体的示例,所以需要准备一个代码示例,比如获取天气的函数。要注意代码的正确性,使用Python且语法正确。 另外,用户的问题可能还涉及到应用场景和注意事项,比如错误处理、权限控制等。需要确保回答结构清晰,分点说明,每个步骤都有例子或说明。同时,生成的相关问题要围绕Function Calling的扩展,比如优化方法、安全措施等。 检查是否遵循了系统级指令,比如数学公式的格式是否正确,使用中文回答,引用标识是否正确添加。最后,确保回答真实可靠,没有编造的信息,引用来源正确。</think>### 通过函数调用与大模型交互的方法 #### 1. **核心原理** 函数调用Function Calling)通过将外部工具能力与大模型结合,扩展其功能边界。大模型根据用户输入**自动判断何时调用函数**,将自然语言参数转换为结构化请求,例如: - 用户输入:“北京今天气温多少?” - 模型响应:触发`get_weather(location: str)`函数调用,参数为`{"location": "北京"}`[^2] #### 2. **实现步骤** ##### 步骤1:定义函数清单 ```python functions = [ { "name": "get_stock_price", "description": "获取指定股票实时价格", "parameters": { "type": "object", "properties": { "symbol": {"type": "string", "description": "股票代码,如 AAPL"} }, "required": ["symbol"] } } ] ``` ##### 步骤2:构建提示词 系统提示需包含函数描述: ``` 你是一个财经助手,可以调用以下功能: - get_stock_price:输入股票代码,返回实时价格 ``` ##### 步骤3:解析模型响应 当模型返回函数调用请求时,提取结构化参数: ```json { "function_call": { "name": "get_stock_price", "arguments": "{\"symbol\": \"AAPL\"}" } } ``` ##### 步骤4:执行函数反馈 ```python def execute_function(function_name, arguments): if function_name == "get_stock_price": return fetch_api(f"https://api.stocks.com/{arguments['symbol']}") ``` #### 3. **完整交互示例** ```python import openai response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": "苹果公司当前股价是多少?"}], functions=functions, function_call="auto" ) if response.choices[0].message.get("function_call"): func_args = json.loads(response.choices[0].message.function_call.arguments) result = execute_function(response.function_call.name, func_args) # 将结果返回给模型生成最终回复 ``` #### 4. **关键应用场景** - **实时数据查询**:股票/天气/交通信息 - **业务系统集成**:CRM系统客户数据查询 - **复杂计算委托**:将微积分计算交给SymPy等数学库 - **多模态扩展**:调用图像生成API实现文生图 #### 5. **注意事项** - **错误处理**:需捕获API调用超时/参数错误 - **权限控制**:敏感函数需进行身份验证 - **成本优化**:通过函数描述压缩减少token消耗 - **参数校验**:对模型输出的参数进行类型检查 $$ \text{交互流程} = \text{用户输入} \rightarrow \text{模型解析} \rightarrow \text{函数调用} \rightarrow \text{结果反馈} \rightarrow \text{最终输出} $$
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liyane

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值