Llama 3.3 70B 函数调用:无缝集成,性能更佳

Llama 3.3 70B 函数调用:无缝集成,性能更佳

重点摘要

功能:执行实时数据检索、系统操作和自动化工作流。

支持该功能的模型:Llama 3 系列、GPT 系列、Gemma 2 和 Mistral nemo。

实现方式:通过 Novita AI 的“模型库”安装 API,然后使用 LangChain 框架实现。

函数调用是一种显著增强大语言模型(LLM)能力的技术,使其能够与外部世界交互。LLM 不仅生成文本,还可以通过函数调用来执行特定任务、访问实时信息并执行复杂操作。本文将探讨函数调用的概念、实际应用,以及 Llama 3.3 70B 等模型如何让这一技术更加易用。

函数调用能解决哪些问题?

  1. 实时信息获取
  • 查询最新股票价格
  • 获取当前天气数据
  • 访问突发新闻
  1. 系统交互
  • 发送邮件
  • 在社交媒体上发帖
  • 查询和写入数据库
  1. 工作流自动化
  • 数据抓取与处理
  • 多步骤任务执行
  • 复杂分析自动化
  1. 数据准确性
  • 确保信息时效性
  • 提供精确的查询结果
  • 减少过时数据错误

什么是函数调用?

函数调用的核心是 LLM 能够识别何时需要外部函数或工具来完成特定任务,然后输出结构化数据(通常为 JSON 格式)来执行该函数。这段结构化数据包含函数名称和必要的参数。本质上,函数调用充当了 AI 广泛知识与具体行动之间的桥梁。它使得 AI 智能体或聊天机器人能够执行特定任务,或访问外部数据和服务。

支持函数调用的模型

许多 LLM 和平台现在都支持函数调用。你可以通过 Novita AI 的“模型库”页面安装 API,并通过 LangChain 实现函数调用。

模型库

  • Llama 3.3: 70B 参数版本在函数调用测试中表现强劲,能够根据用户请求成功识别何时以及调用哪个函数。
  • Mistral: Mistral-Large-2 等模型在 watsonx.ai 等环境中成功实现了函数调用。
  • Gemini: Google 的 Gemini 模型也支持函数调用,并提供了多种使用示例。

函数调用如何工作?

  1. 函数声明: 首先定义可重用的代码块(即函数),并描述其能力、输入和输出。
  2. 提交提示: 用户向 LLM 提交提示,并附带一组函数声明。这告诉模型有哪些工具可用。
  3. 模型分析: LLM 分析提示,确定是否需要调用所提供的任何函数来满足请求。
  4. 结构化输出: 如果需要调用函数,LLM 生成 JSON 格式的结构化输出,其中包含函数名称及其参数值。
  5. 函数调用: 应用程序或系统使用该结构化输出调用指定函数,并传入参数。
  6. 函数执行: 外部服务或 API 使用提供的参数执行函数。
  7. 输出响应: 外部服务向 AI 发送确认或结果。
  8. 模型响应: LLM 接着使用该输出为用户生成自然语言响应,或进行进一步处理。
  • 请注意,模型并不直接调用函数,而是由外部程序使用其结构化输出来完成调用。

https://www.youtube.com/watch?v=Qor2VZoBib0

函数调用 vs. JSON 模式

函数调用 vs. JSON 模式

函数调用的优势

  • 效率提升: 直接调用函数可缩短处理时间、降低延迟,这对于需要立即响应的应用至关重要。
  • 灵活性增强: 开发者可以轻松更新或修改函数,而无需重写整个应用程序,从而更快地适应新需求。
  • 可扩展性: 便于扩展,可在不大量更改现有基础设施的情况下添加新功能。
  • 个性化交互: 支持个性化用户体验,例如访问用户日历以建议不冲突的会议时间。
  • 连接 AI 与现实行动: 使 AI 能够执行实际任务,如代表用户发送电子邮件或短信。
  • 复杂对话智能体: 可创建高级聊天机器人,利用外部 API 和知识库回答复杂问题并提供相关回复。

函数调用的实际应用

  • 对话智能体: 用于高级聊天机器人,利用外部 API 获取最新信息。
  • 自然语言理解: 从文本中提取结构化数据,用于实体识别、情感分析等任务。
  • API 集成: 使 LLM 能够与外部 API 集成,根据用户输入获取数据或执行操作。
  • 金融助手: 构建 AI 理财顾问,访问实时金融数据并提供个性化建议。
  • 工单自动化: 通过上下文感知规则自动处理工单,实现支持工单的自动分配。
  • 知识检索: 通过创建函数总结学术文章,帮助从知识库中检索信息以回答问题并提供引用。
  • 多模态应用: 基于图像、视频、音频和 PDF 触发函数。

如何通过 Novita AI 使用 Llama 3.3 70B 函数调用

第一步:获取 API 密钥并安装!

进入“密钥管理”页面,可以复制如图所示的 API 密钥

API 密钥

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

llama 3.3 70b 代码

注册后,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 云用于构建和扩展。

推荐阅读