关键亮点
是或否: Llama 3.2 3B 模型是一个轻量但功能强大的语言模型,** 支持函数调用**。
它能做什么: 函数调用允许模型与外部工具和 API 交互,从而扩展其超出基本文本生成的能力。
如何实现? 通过 Novita AI 的 “LLM Playground” 安装 API,然后使用 Langchain 框架实现。
在当前人工智能领域,许多人在积极讨论 Llama 3.2 3B 模型是否能实现函数调用能力。大量用户和开发者在论坛和社交媒体上分享他们使用 Llama 3.2 3B 进行函数调用的经验。一些用户报告在使用模型进行工具调用时取得了良好效果,成功率约为 80%。然而,也有用户反映在某些情况下模型可能误解上下文,导致函数调用不准确或失败。今天,我们将深入探讨 Llama 3.2 的函数调用特性。
Llama 3.2 是否支持函数调用?
是的!
Llama 3.2 模型(包括 3B 变体)支持函数调用。该能力使模型能够检测何时需要调用函数,并输出包含参数的 JSON 来调用该函数。这一功能是 Llama 3.2 系列的关键特性,模型针对它进行了微调。Llama 3.2 3B 模型因其轻量化设计特别适合设备端应用,同时仍然支持函数调用等强大功能。

什么是函数调用?
函数调用是一种使 LLM 能够 与外部系统、API 和工具交互 的方法。通过为 LLM 配备一组函数或工具,以及如何使用它们的详细信息,模型可以智能地选择并执行适当的函数来完成特定任务。这种能力将 LLM 的功能扩展到基本文本生成之外,使其能够执行操作、控制设备和访问数据库。
支持函数调用的模型
现在许多 LLM 和平台都支持函数调用。您可以通过 Novita AI 的 “LLM Playground” 页面安装 API,并通过 langchain 实现函数调用。
- Llama 3.3: 700 亿参数版本在函数调用测试中表现强劲,能根据用户请求成功识别何时调用以及调用哪些函数。
- Mistral: 如 Mistral-Large-2 等模型在 watsonx.ai 等环境中展示了成功的函数调用能力。
- Gemini: Google 的 Gemini 模型也支持函数调用,并提供多种使用示例。
如果您想了解更多信息,可以查看这个网站!

来源:Berkeley Function-Calling Leaderboard
函数调用是如何工作的?
函数调用通常包含两个步骤:
- 将用户提示映射 到正确的函数和输入参数。LLM 评估是否有任何可用工具与用户的查询相关。
- 处理函数的输出 以生成最终连贯的响应。如果适用,LLM 会构建一个格式化的请求来调用工具。
- 然后分析工具的输出并将其整合到最终响应中。
函数调用的实际应用
使用 Llama 3.2 3B 模型进行函数调用有众多现实世界应用:
- 客户支持聊天机器人:自动化需要计算或信息查找的响应。
- 数据处理:与后端系统交互以获取或更新数据。
- 虚拟助手:通过使助手能够执行调度或计算等操作来改善用户交互。
- API 交互:将自然语言转换为 API 调用。
- 数据库查询:创建将自然语言转换为有效数据库查询的应用程序。
- 智能家居控制:通过使用自然语言命令设置温度或切换灯光来控制智能家居设备。
- 对话式知识检索引擎:与知识库交互。
- 电子商务平台:基于库存数据库提供实时产品建议、跟踪订单或管理客户支持工单。
- 医疗保健:安排预约或检索患者信息。
- 旅行:检索航班信息、预订或管理预订。
- 金融:提供最新的账户余额和处理交易。
如何通过 Novita AI 使用 Llama 3.2 3B 函数调用
步骤 1:获取 API 密钥
进入 “Keys” 页面,您可以复制如图所示的 API 密钥。

注册后,Novita AI 会提供 $0.5 的赠金让您开始使用!
如果免费赠金用完,您可以付费继续使用。
步骤 2:使用 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.2-3b-instruct",
"what's 3 plus 1132"
)
print(result) # Output: 1135
常见问题与故障排除
函数调用中遇到的常见问题包括:
- 函数调用错误:模型可能误解上下文,导致调用错误的函数。
- 高延迟:响应缓慢,可能影响用户体验。
- 无法识别的函数:模型可能无法识别有效的函数名称或参数,导致运行时错误。
- 模型幻觉:模型可能生成错误的输出或参数,导致意外行为。
- 参数传递不一致:参数可能以意外格式传递,导致函数执行期间出错。
- 网络问题:外部 API 依赖可能会引入延迟或失败,如果网络连接不稳定。
- 解析失败:模型的输出可能不符合预期格式(例如无效 JSON),导致解析错误。
优化函数调用的最佳实践
为了优化函数调用:
- 解决函数调用错误:微调模型针对与函数调用相关的特定提示,增强上下文理解,减少函数调用中的错误。
- 缓解高延迟:通过减少提示中的 token 数量或实现异步函数调用来优化响应时间,以提升性能。
- 解决无法识别的函数:在调用函数之前验证函数名称和参数,确保它们被正确识别,从而防止运行时错误。
- 管理模型幻觉:实施谨慎的错误处理策略来处理模型生成的不正确输出或参数,确保为意外结果提供回退机制。
- 确保参数传递一致:为参数格式建立明确的指引,并执行严格的验证检查,以实现在函数执行过程中参数传递的一致性。
- 处理网络问题:为与外部 API 交互时的网络相关问题开发稳健的错误处理策略,包括针对瞬时故障的重试机制。
- 防止解析失败:利用输出验证技术确保模型输出符合预期格式(例如有效 JSON),并对解析错误实施错误处理以保持系统稳定性。
总之,函数调用能力代表了大型语言模型功能方面的重大进步,使它们能够有效地与外部工具和 API 交互。尽管存在常见挑战,如函数调用错误、高延迟、无法识别的函数和模型幻觉,但实施最佳实践和稳健的错误处理可以增强其可靠性和性能。随着开发者继续探索和完善这一特性,其在各个领域的潜在应用很可能会扩展,使 Llama 3.2 成为处理现实世界任务的多功能工具。
常见问题
为什么函数调用对 AI Agent 至关重要?
它使 AI Agent 能够自主执行需要外部数据或操作的任务,在动态环境中提高效率。
函数调用如何提升 LLM 性能?
它通过允许实时数据检索、任务执行以及通过外部工具做出明智决策来提高准确性。
Novita AI 是一个一体化云平台,助力您的 AI 雄心。集成 API、无服务器、GPU 实例 —— 你所需的低成本高效工具。无需基础设施,免费开始,让您的 AI 愿景成为现实。
