AI Prompt Engineering · 课时

函数调用与 API 集成

掌握如何提示 LLM 调用外部函数或 API,使其能够与现实世界的系统交互

第 1 / 3 课11 个步骤

函数调用与 API 集成 是 CoddyKit 上的免费 AI Prompt Engineering 课时。 这是第 1 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AI Prompt Engineering 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AI Prompt Engineering 课程共包含 3 节课。

调用外部工具

LLM 很强大,但它们主要存在于文本世界中。如果它们需要现实世界的信息或需要执行操作,该怎么办?

函数调用让 LLM 能够与外部工具和应用程序接口互动!这弥合了语言与行动之间的差距,使人工智能能够:

  • get 当前信息(天气、股价)
  • 执行操作(发送电子邮件、预约)
  • 连接到数据库或自定义工具

这为人工智能系统解锁了新的可能性。

LLM 的角色:提出调用建议

启用函数调用后,您需要向 LLM 提供可用工具(函数)的说明。

LLM 可能不会直接回答,而是判断某个工具能够提供帮助。然后,它会输出一个结构化的函数调用“建议”,其中包括函数名称及其参数。

重要提示:LLM 不会自行执行函数。它只会告诉您的应用程序应调用哪个函数,以及应向其提供哪些输入。

定义您的工具

要使用函数调用,您必须以 LLM 能够理解的方式定义工具(函数)。这通常包括提供以下内容:

  • 函数的名称(例如:get_current_weather)
  • 函数功能的描述(这对 LLM 正确选择函数至关重要)
  • 函数接受的参数,包括参数的类型和描述(例如:location: string)

这个“架构”会告诉 LLM 提出有效调用所需的一切信息。

天气工具定义

下面是一个天气工具的概念性 Python 定义。请注意其中清晰的描述和参数。这就是您会向 LLM 公开的内容。

这个函数代表了 LLM 在概念上会“调用”的外部工具。

def get_current_weather(location: str, unit: str = "celsius"):
    """
    Get the current weather in a given location.
    Args:
        location (str): The city and state, e.g. "London, UK"
        unit (str): The unit of temperature, "celsius" or "fahrenheit"
    Returns:
        dict: Weather information.
    """
    # In a real app, this would call a weather API
    if location == "London, UK":
        return {"temperature": "15", "unit": unit, "forecast": "cloudy"}
    elif location == "New York, USA":
        return {"temperature": "20", "unit": unit, "forecast": "sunny"}
    else:
        return {"temperature": "N/A", "unit": unit, "forecast": "unknown"}

为工具编写提示词

要促使 LLM 使用您的工具,提示词需要清楚地说明用户的意图。然后,LLM 会判断工具是否能够提供帮助。

您不需要明确告诉 LLM“调用 get_weather”。相反,您可以提出一个暗示这一需求的问题:

  • “伦敦的天气怎么样?”
  • “您能帮我预订明天的会议吗?”

LLM 掌握工具描述后,就会推断出需要进行函数调用。

LLM 的调用建议

当 LLM 决定使用工具时,它不会直接给出 answer。相反,它会返回一个结构化对象(通常为 JSON),指出要调用的函数及其参数。

然后,您的应用程序会解析这一输出。

如果有人询问“伦敦的天气怎么样?”,LLM 可能会提出如下建议:

{
  "tool_calls": [
    {
      "id": "call_abc123",
      "function": {
        "name": "get_current_weather",
        "arguments": "{\"location\": \"London, UK\", \"unit\": \"celsius\"}"
      },
      "type": "function"
    }
  ]
}

您的应用程序运行工具

收到 LLM 的函数调用建议后,您的应用程序会接手处理:

  1. 识别所请求的函数(例如:get_current_weather)。
  2. 提取参数(例如:"London, UK")。
  3. 在应用程序环境中执行实际的 Python 函数(或发出应用程序接口调用)。

现实世界中的操作就是在这里发生的,而不是在 LLM 内部发生。

LLM 处理工具输出

应用程序执行函数后,会收到一个结果(例如:{"temperature": "15", ...})。

随后,系统会将这一结果连同原始对话历史和函数调用请求一起传回 LLM。

然后,LLM 会利用这些新信息,针对用户最初的查询生成自然语言回复。

端到端互动

让我们把整个过程串起来。这个示例展示了这样一个流程:用户的问题触发 LLM 提出函数调用建议,您的应用程序执行该调用,然后 LLM 给出最终 answer。

这是对互动循环的简化表示。

def get_current_weather(location, unit="celsius"):
    if location == "London, UK":
        return {"temp": "15", "unit": unit, "forecast": "cloudy"}
    return {"temp": "N/A", "unit": unit, "forecast": "unknown"}

def simulate_llm_response(user_query):
    # LLM 'thinks' and decides to call a tool
    if "weather in London" in user_query:
        return {
            "type": "tool_call",
            "function": "get_current_weather",
            "args": {"location": "London, UK"}
        }
    return {"type": "text", "content": "I cannot help with that."}

def simulate_llm_final_response(tool_output):
    # LLM processes tool output and gives natural language
    temp = tool_output.get("temp", "N/A")
    forecast = tool_output.get("forecast", "unknown")
    return f"The weather in London is {temp} degrees and {forecast}."

def main():
    user_input = "What is the weather in London, UK?"
    print(f"User: {user_input}")

    llm_output = simulate_llm_response(user_input)

    if llm_output["type"] == "tool_call":
        func_name = llm_output["function"]
        func_args = llm_output["args"]
        print(f"LLM suggested calling: {func_name}({func_args})")

        # Execute the function
        tool_result = get_current_weather(**func_args)
        print(f"Tool output: {tool_result}")

        # Feed result back to LLM
        final_answer = simulate_llm_final_response(tool_result)
        print(f"LLM's final answer: {final_answer}")
    else:
        print(f"LLM: {llm_output['content']}")

if __name__ == "__main__":
    main()

函数调用检查

假设 LLM 返回了一个函数调用请求。您的应用程序接下来应立即采取的下一步是什么?

回顾:工具的实际应用

在本课中,我们探讨了 LLM 如何通过函数调用和应用程序接口集成与现实世界互动。

我们了解到:

  • 您可以通过描述和参数定义工具(函数)。
  • LLM 会建议调用哪个工具以及使用哪些参数。
  • 您的应用程序会执行实际的工具,并将结果传回。
  • 然后,LLM 会利用结果组织出最终且信息充分的回复。

这一强大技术让 LLM 不再局限于文本生成,还能执行操作并获取最新信息。

免费开始

用 AI 导师学习 AI Prompt Engineering — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
53
课程
199

常见问题解答

「函数调用与 API 集成」课时是免费的吗?

是的 — 「函数调用与 API 集成」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AI Prompt Engineering 课程的其余内容,请升级到 CoddyKit PRO。 AI Prompt Engineering 课程共包含 3 节课。

「函数调用与 API 集成」这节课中我会学到什么?

掌握如何提示 LLM 调用外部函数或 API,使其能够与现实世界的系统交互 你通过在浏览器中直接运行的动手代码来练习 AI Prompt Engineering,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 AI Prompt Engineering 需要有经验吗?

无需任何先前经验。CoddyKit 上的 AI Prompt Engineering 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 3 节。

「函数调用与 API 集成」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 AI Prompt Engineering 课中编写并运行代码吗?

能。每节 AI Prompt Engineering 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 函数调用与 API 集成
  2. 多智能体提示系统
  3. LLM 的自定义工具与插件
← 返回 AI Prompt Engineering