Novita Kimi K2 API 现已支持函数调用!

Novita Kimi K2 API 现已支持函数调用!

Kimi K2 代表了 AI 代理的新时代,将专业领域的顶尖性能与性价比和开源灵活性相结合。Kimi K2 拥有 320 亿激活参数和 1 万亿总参数,在 STEM、编程和工具使用方面展现出独特的专长。

本文探讨了函数调用如何增强 Kimi K2 的代理能力,该功能的具体含义,以及它如何使 Kimi K2 成为 AI 代理未来发展的领导者。

Kimi K2 的代码代理能力

  1. STEM 与编程能力

    • Kimi K2 在 STEM 和编程基准测试(包括 LiveCodeBenchOJBench)中取得了 ** 最先进(SOTA)的性能**。
    • 它能够精确地生成复杂代码、调试问题并模拟复杂的算法。
  2. 工具使用专长

    • Kimi K2 已在数百个领域的 多轮工具使用场景 上进行了训练。
    • 它能够识别何时需要工具并执行多步骤工作流,使其成为一个高度实用的编程助手。
  3. 用于任务执行的强化学习

    • 通过利用 基于规则的自评估 ** 和 ** 在线学习,Kimi K2 不断改进其判断和决策能力。

来自 Kimi

Kimi K2 的代理能力依赖于函数调用

虽然 Kimi K2 在编程和工具使用方面的固有优势令人印象深刻,但其 代理能力在很大程度上依赖于函数调用。没有这一功能,它与外部工具和系统交互的能力将受到严重限制。

什么是函数调用?

函数调用是一种结构化机制,允许大语言模型(LLM)与外部系统、工具或 API 进行交互。支持函数调用的 LLM 不仅仅是生成文本,它能够分析用户提示,识别何时需要外部操作,并生成结构化的 JSON 调用来执行特定功能。

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

函数调用如何工作

  1. 提示分析:LLM 解释用户的请求,并确定是否需要函数调用。
  2. 生成 JSON 调用:它生成一个包含函数名称和必要参数的结构化 JSON 对象。
  3. 由外部系统执行:外部系统接收 JSON 调用,执行函数并返回结果。
  4. 生成响应:LLM 利用返回的数据向用户提供最终响应。

对于多步骤或复杂任务,此循环可以重复,从而使模型能够充当动态且交互式的代理。

为什么函数调用至关重要

  • 将知识转化为行动:函数调用使 Kimi K2 从“知识提供者”转变为“任务执行者”。
  • 真实世界交互:它使 Kimi K2 能够与 API、数据库和外部系统交互,从而有效自动化日程安排、数据检索和物联网控制等任务。
  • 多步骤工作流:Kimi K2 可以链式调用多个函数来执行复杂工作流,例如获取数据、处理数据并存储结果。

函数调用与 SDK

**特性 ** ** 函数调用 ** SDK
定义 一种结构化机制,允许 LLM 触发外部函数或 API。 一种简化与 API 和外部系统交互的工具包。
目的 通过生成函数调用(例如 JSON)实现任务的直接执行。 提供预构建的工具和库,便于 API 集成。
灵活性 高度动态,允许模型与任何定义的函数交互。 受限于 SDK 支持的特性和端点。
实现 需要手动定义函数、模式并处理响应。 抽象了 API 逻辑,提供即插即用的体验。
使用场景 适用于多步骤任务自动化和实时决策。 最适合快速开发预定义工作流。
开发者工作量 需要更多设置来定义和管理函数调用。 工作量最小;使用预构建方法简化 API 使用。

Kimi K2 + 函数调用能实现什么?

Kimi K2 的优势与函数调用能力相结合,解锁了广泛的现实应用:

1. 现实任务执行

  • 自动化:自动执行重复任务,如预约、提交表单或生成报告。
  • 物联网控制:与物联网设备交互以执行操作,如调节室温或开关灯。

2. 访问实时数据

  • 动态更新:通过 API 调用获取实时数据(例如天气、股票价格)。
  • 增强响应:将实时信息整合到答案中,提高准确性和相关性。

3. 高级多模态应用

  • 图像与视频处理:触发外部工具执行图像编辑或视频裁剪等任务。
  • 跨格式集成:处理来自文本、图像和音频的输入以执行复杂任务。

4. 复杂工作流与管道

  • 链式调用多个函数以执行数据管道,例如:
    • 获取数据 → 分析数据 → 存储结果。
  • 实现与数据库和分析工具的无缝集成,用于高级工作流。

5. 开发者友好解决方案

  • 自定义 API:开发者可以微调 Kimi K2 以与专有 API 和工具交互。
  • 可扩展集成:轻松添加新函数以扩展能力,无需重大基础设施变更。

展示 Kimi K2 函数调用的演示

  1. 我的总预算是 10,000 美元,这应包括所有费用,包括交通、住宿和门票。请提供整个行程的详细预算分解。我的主要评估标准是:交通便利性、门票可获得性以及当地景点的质量。

  2. 请参考我上面提到的总预算。

  3. 除了上述总预算外,我正在寻找能提供地道本地体验的住宿,因此我倾向于 Airbnb。

  4. 查看我的 Google Mail 并在 Google 日历中创建条目。

kimi k2 演示

kimi k2 演示

Novita Kimi K2 API 支持函数调用

本指南演示如何使用函数调用获取用户指定位置的当前天气信息。我们将通过一个完整的 Python 代码示例进行讲解。

关于函数调用的具体 API 格式,请参考 文档

novita ai 上的 kimik2

立即尝试 Kimi K2!

  • 初始化客户端

首先,您需要使用 Novita API 密钥初始化客户端。

from openai import OpenAI
import json

client = OpenAI(
    base_url="https://api.novita.ai/v3/openai",
    # 从 https://novita.ai/settings/key-management 获取 Novita AI API 密钥。
    api_key="<YOUR Novita AI API Key>",
)

model = "moonshotai/kimi-k2-instruct"
  • 定义待调用函数

接下来,定义模型可以调用的 Python 函数。在本例中,它是一个获取天气信息的函数。

# 模拟获取天气数据的示例函数。
def get_weather(location):
    """检索指定位置的当前天气。"""
    print("正在调用 get_weather 函数,位置参数:", location)
    # 在实际应用中,此处应调用外部天气 API。
    # 这里是一个简化示例,返回硬编码数据。
    return json.dumps({"location": location, "temperature": "60 华氏度"})
  • 构造包含工具和用户消息的 API 请求

现在,创建对 Novita 端点的 API 请求。该请求包含 tools 参数,定义了模型可以使用的函数,以及用户的消息。

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "获取某个位置的天气,用户应先提供位置信息",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "城市和州,例如 San Francisco, CA",
                    }
                },
                "required": ["location"]
            },
        }
    },
]

messages = [
    {
        "role": "user",
        "content": "旧金山的天气怎么样?"
    }
]

# 发送请求并打印响应。
response = client.chat.completions.create(
    model=model,
    messages=messages,
    tools=tools,
)

# 请在生产环境中检查响应是否包含 tool_calls。
tool_call = response.choices[0].message.tool_calls[0]
print(tool_call.model_dump())
  • 输出
{'id': '0', 'function': {'arguments': '{"location": "San Francisco, CA"}', 'name': 'get_weather'}, 'type': 'function'}
  • 用函数调用结果进行响应并获取最终答案

下一步是处理函数调用,执行 get_weather 函数,并将结果发送回模型以生成对用户的最终响应。

# 确保 tool_call 已从前一步定义
if tool_call:
    # 将助手的 tool_call 消息添加到对话历史
    messages.append(response.choices[0].message)

    function_name = tool_call.function.name
    if function_name == "get_weather":
        function_args = json.loads(tool_call.function.arguments)
        # 执行函数并获取响应
        function_response = get_weather(
            location=function_args.get("location"))
        # 将函数响应追加到消息列表
        messages.append(
            {
                "tool_call_id": tool_call.id,
                "role": "tool",
                "content": function_response,
            }
        )

    # 从模型获取最终响应,现在包含函数结果
    answer_response = client.chat.completions.create(
        model=model,
        messages=messages,
        # 注意:此处不要包含 tools 参数。
    )
    print(answer_response.choices[0].message)
  • 输出
{'id': '0', 'function': {'arguments': '{"location": "San Francisco, CA"}', 'name': 'get_weather'}, 'type': 'function'}

Novita AI 现已提供与 Anthropic SDK 的兼容性

Kimi K2 与 Claude Code 的结合已成为 AI 社区的热门话题,为实际应用提供了无与伦比的代理能力。为使这一集成更加无缝,Novita AI 现已提供与 Anthropic SDK 的兼容性,使您能够通过熟悉的 Claude Code 界面轻松利用 Kimi K2 的强大功能。

您可以查看此 文档 获取更多详情!

1. 安装 Anthropic SDK

pip install anthropic

2. 初始化客户端

Anthropic SDK 设计为从环境变量中读取 API 密钥和基础 URL:ANTHROPIC_API_KEYANTHROPIC_BASE_URL。您也可以在初始化 Anthropic 客户端时直接提供这些参数。

您可以在 设置页面 查看和管理您的 API 密钥。

  • 使用环境变量
export ANTHROPIC_BASE_URL="https://api.novita.ai/anthropic"
export ANTHROPIC_API_KEY="<YOUR_NOVITA_API_KEY>"
  • 在初始化 Anthropic 客户端时设置参数
import anthropic

client = anthropic.Anthropic(
    base_url="https://api.novita.ai/anthropic",
    api_key="<YOUR_NOVITA_API_KEY>"
)

3. 调用 API

import anthropic

# 初始化客户端,如果已在环境变量中设置了 `ANTHROPIC_BASE_URL` 和 `ANTHROPIC_API_KEY`,
# 则可以省略 `api_key` 和 `base_url` 参数。
client = anthropic.Anthropic(
    base_url="https://api.novita.ai/anthropic",
    api_key="<YOUR_NOVITA_API_KEY>"
)

message = client.messages.create(
    model="moonshotai/kimi-k2-instruct",
    max_tokens=1000,
    temperature=1,
    system="你是一位世界级的诗人。仅使用短诗进行回复。",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "text",
                    "text": "为什么海水是咸的?"
                }
            ]
        }
    ]
)

print(message.content)

Kimi K2 对 函数调用 ** 的支持,使其从一个高性能 LLM 升级为 ** 下一代 AI 代理,能够进行现实世界的交互和任务执行。结合其在 STEM 和编程领域的主导地位,这一功能将 Kimi K2 定位为开发实用且动态 AI 系统的经济高效的专业解决方案。

通过在知识与行动之间架起桥梁,Kimi K2 不仅提升了用户体验,还使先进 AI 能力的获取更加民主化。其开源特性和性价比使其成为 AI 领域的一股颠覆性力量,为广泛创新和采用铺平了道路。

常见问题解答

在大语言模型(LLM)的语境下,什么是函数调用?

函数调用是一种技术,允许大语言模型识别何时特定任务需要外部函数或工具,并生成结构化数据来执行该函数。

使用函数调用的主要好处是什么?

主要好处包括:提高处理任务的效率、增强开发人员轻松更新函数的灵活性、无需大量更改即可添加新功能的可扩展性,以及个性化的用户交互。

Kimi K2 能否取代 GPT-4 或 Claude 等专有模型?

Kimi K2 并非旨在取代通用模型。相反,它专注于成为 **专业代理 ,在 STEM、编程和工具使用方面具有优势,并辅以 ** 函数调用能力

Novita AI 是一个一站式云平台,助您实现 AI 雄心。集成 API、无服务器、GPU 实例 —— 您所需的成本节约型工具。消除基础设施,免费开始,让您的 AI 愿景成为现实。

推荐阅读