重点摘要
功能:执行实时数据检索、系统操作和自动化工作流。
支持该功能的模型:Llama 3 系列、GPT 系列、Gemma 2 和 Mistral nemo。
实现方式:通过 Novita AI 的“模型库”安装 API,然后使用 LangChain 框架实现。
函数调用是一种显著增强大语言模型(LLM)能力的技术,使其能够与外部世界交互。LLM 不仅生成文本,还可以通过函数调用来执行特定任务、访问实时信息并执行复杂操作。本文将探讨函数调用的概念、实际应用,以及 Llama 3.3 70B 等模型如何让这一技术更加易用。
函数调用能解决哪些问题?
- 实时信息获取
- 查询最新股票价格
- 获取当前天气数据
- 访问突发新闻
- 系统交互
- 发送邮件
- 在社交媒体上发帖
- 查询和写入数据库
- 工作流自动化
- 数据抓取与处理
- 多步骤任务执行
- 复杂分析自动化
- 数据准确性
- 确保信息时效性
- 提供精确的查询结果
- 减少过时数据错误
什么是函数调用?
函数调用的核心是 LLM 能够识别何时需要外部函数或工具来完成特定任务,然后输出结构化数据(通常为 JSON 格式)来执行该函数。这段结构化数据包含函数名称和必要的参数。本质上,函数调用充当了 AI 广泛知识与具体行动之间的桥梁。它使得 AI 智能体或聊天机器人能够执行特定任务,或访问外部数据和服务。
支持函数调用的模型
许多 LLM 和平台现在都支持函数调用。你可以通过 Novita AI 的“模型库”页面安装 API,并通过 LangChain 实现函数调用。

- Llama 3.3: 70B 参数版本在函数调用测试中表现强劲,能够根据用户请求成功识别何时以及调用哪个函数。
- Mistral: Mistral-Large-2 等模型在 watsonx.ai 等环境中成功实现了函数调用。
- Gemini: Google 的 Gemini 模型也支持函数调用,并提供了多种使用示例。
函数调用如何工作?
- 函数声明: 首先定义可重用的代码块(即函数),并描述其能力、输入和输出。
- 提交提示: 用户向 LLM 提交提示,并附带一组函数声明。这告诉模型有哪些工具可用。
- 模型分析: LLM 分析提示,确定是否需要调用所提供的任何函数来满足请求。
- 结构化输出: 如果需要调用函数,LLM 生成 JSON 格式的结构化输出,其中包含函数名称及其参数值。
- 函数调用: 应用程序或系统使用该结构化输出调用指定函数,并传入参数。
- 函数执行: 外部服务或 API 使用提供的参数执行函数。
- 输出响应: 外部服务向 AI 发送确认或结果。
- 模型响应: LLM 接着使用该输出为用户生成自然语言响应,或进行进一步处理。
- 请注意,模型并不直接调用函数,而是由外部程序使用其结构化输出来完成调用。
https://www.youtube.com/watch?v=Qor2VZoBib0
函数调用 vs. JSON 模式

函数调用的优势
- 效率提升: 直接调用函数可缩短处理时间、降低延迟,这对于需要立即响应的应用至关重要。
- 灵活性增强: 开发者可以轻松更新或修改函数,而无需重写整个应用程序,从而更快地适应新需求。
- 可扩展性: 便于扩展,可在不大量更改现有基础设施的情况下添加新功能。
- 个性化交互: 支持个性化用户体验,例如访问用户日历以建议不冲突的会议时间。
- 连接 AI 与现实行动: 使 AI 能够执行实际任务,如代表用户发送电子邮件或短信。
- 复杂对话智能体: 可创建高级聊天机器人,利用外部 API 和知识库回答复杂问题并提供相关回复。
函数调用的实际应用
- 对话智能体: 用于高级聊天机器人,利用外部 API 获取最新信息。
- 自然语言理解: 从文本中提取结构化数据,用于实体识别、情感分析等任务。
- API 集成: 使 LLM 能够与外部 API 集成,根据用户输入获取数据或执行操作。
- 金融助手: 构建 AI 理财顾问,访问实时金融数据并提供个性化建议。
- 工单自动化: 通过上下文感知规则自动处理工单,实现支持工单的自动分配。
- 知识检索: 通过创建函数总结学术文章,帮助从知识库中检索信息以回答问题并提供引用。
- 多模态应用: 基于图像、视频、音频和 PDF 触发函数。
如何通过 Novita AI 使用 Llama 3.3 70B 函数调用
第一步:获取 API 密钥并安装!
进入“密钥管理”页面,可以复制如图所示的 API 密钥。

你可以找到 Novita AI 的 “模型库” 页面。使用你编程语言对应的包管理器安装 Novita AI API。

注册后,Novita AI 会提供 $0.5 额度供你入门!
如果免费额度用完,你可以付费继续使用。
第二步:使用 LangChain 实现函数调用
我们将创建一个简单的数学应用,可以执行加法和乘法运算。
💡 虽然本指南使用 LangChain 以便实现,但函数调用并不需要任何特定框架。关键在于设计合适的提示,让模型理解并正确调用函数。此处使用 LangChain 只是为了简化实现过程。
前提条件
首先,安装所需包:
pip install langchain-openai python-dotenv
设置环境
在项目根目录创建 .env 文件,并添加你的 Novita AI API 密钥:
NOVITA_API_KEY=your_api_key_here
实现步骤
1. 定义工具
首先,使用 LangChain 的 @tool 装饰器创建两个简单的数学工具:
from langchain_core.tools import tool
@tool
def multiply(x: float, y: float) -> float:
"""Multiply two numbers together."""
return x * y
@tool
def add(x: int, y: int) -> int:
"""Add two numbers."""
return x + y
tools = [multiply, add]
2. 创建工具执行函数
接下来,实现一个执行工具的函数:
from typing import Any, Dict, Optional, TypedDict
from langchain_core.runnables import RunnableConfig
class ToolCallRequest(TypedDict):
name: str
arguments: Dict[str, Any]
def invoke_tool(
tool_call_request: ToolCallRequest,
config: Optional[RunnableConfig] = None
):
"""Execute the specified tool with given arguments."""
tool_name_to_tool = {tool.name: tool for tool in tools}
name = tool_call_request["name"]
requested_tool = tool_name_to_tool[name]
return requested_tool.invoke(tool_call_request["arguments"], config=config)
3. 设置 LangChain 流水线
创建一个链,使用 Novita AI 的 LLM 来选择和准备工具调用:
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import JsonOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.tools import render_text_description
def create_chain():
"""Create a chain that uses the specified LLM model to select and prepare tool calls."""
model = ChatOpenAI(
model="meta-llama/llama-3.3-70b-instruct",
api_key=os.getenv("NOVITA_API_KEY"),
base_url="https://api.novita.ai/v3/openai",
)
rendered_tools = render_text_description(tools)
system_prompt = f"""\
You are an assistant that has access to the following set of tools.
Here are the names and descriptions for each tool:
{rendered_tools}
Given the user input, return the name and input of the tool to use.
Return your response as a JSON blob with 'name' and 'arguments' keys.
The `arguments` should be a dictionary, with keys corresponding
to the argument names and the values corresponding to the requested values.
"""
prompt = ChatPromptTemplate.from_messages(
[("system", system_prompt), ("user", "{input}")]
)
return prompt | model | JsonOutputParser()
4. 创建主处理函数
实现处理数学查询的主函数:
def process_math_query(query: str):
"""Process a mathematical query by using an LLM to select the appropriate tool and execute it."""
chain = create_chain()
message = chain.invoke({"input": query})
result = invoke_tool(message, config=None)
return message, result
5. 使用示例
以下是实现的使用方法:
if __name__ == "__main__":
message, result = process_math_query(
"meta-llama/llama-3.3-70b-instruct",
"what's 3 plus 1132"
)
print(result) # Output: 1135
总之,函数调用正在迅速改变 AI 系统与环境交互的方式,使应用更加实用、高效和用户友好。像 Llama 3.3 70B 这样的模型正在为更轻松地使用这一强大技术铺平道路,为 AI 开发打开了无数可能性。
常见问题
什么是 LLM 中的函数调用?
函数调用是一种技术,允许大语言模型识别何时需要外部函数或工具来完成特定任务,并生成结构化数据来执行该函数。
使用函数调用的主要优点有哪些?
主要优点包括:提高任务处理效率、增强开发者更新函数的灵活性、在不大量更改现有基础设施的情况下添加新功能的可扩展性,以及个性化的用户交互。
Llama 3.3 支持哪些语言?
英语、法语、德语、印地语、意大利语、葡萄牙语、西班牙语和泰语。
Novita AI 是一个 AI 云平台,为开发者提供通过简单 API 部署 AI 模型的便捷方式,同时提供经济实惠且可靠的 GPU 云用于构建和扩展。
