大模型编程(3)让 AI 帮我调接口

简介: 这是大模型编程系列第三篇,分享学习某云大模型工程师ACA认证免费课程的笔记。本文通过订机票和查天气的例子,介绍了如何利用大模型API实现函数调用,解决实际业务需求。课程内容详实,推荐感兴趣的朋友点击底部链接查看原文,完全免费。通过这种方式,AI可以主动调用接口并返回结果,极大简化了开发流程。欢迎在评论区交流实现思路。

这是大模型编程系列的第三篇,也是我学习 某云大模型工程师ACA认证免费课程 的笔记,这课真不错,太香了必须强烈推荐👍🏻。对课程有兴趣请点击底部的查看原文。

上一篇里面我们实现了大模型API的循环调用调用,来完成我们实际的业务需求。

老板的需求

作为一个牛马,随时要接受老板的安排,今天老板早上说等会晚点帮我订一张机票,时间和地点我还没确定,等会确定了我和你说。
嘴上答应没问题,内心一万个不愿意,什么时候给我发消息啊,我那会一定在电脑前面吗,想到这点就烦,要是 AI 能做这事就好了。

AI 的实现 function call

订机票有点复杂了,换个简单的,参考 某云大模型工程师ACA认证免费课程 查天气吧。

我们知道大语言模型的本质概括来说是根据给定的文本预测下一个token。对我们来说,看似像在对大模型提问,但实际上是给了大模型一串提示文本,让它可以对后续的文本进行推理。(图看不懂可以先忽略)

image.png

具体可以学习这篇课程认识大模型

所以当我们问大模型今天会议室的空闲状态,今天的天气的时候,他是不知道的,但是我们是可以调用接口查询到的(先不考虑后面 RAG 的方案,假设要查天气只能通过接口查询,不能通过搜索网页查询)。

捋捋这个思路就是 最难的点就在于,如果大模型能主动调用接口,再把接口调用的结果整理之后返回给我们就好了。 如下:

image.png

还别说 openai 早给我们设计好了这样的插件机制,参考 function call 示例

程序设计的话,流程如下:

  1. 用户输入:用户向你的应用发送一条消息,比如 "北京今天天气怎样"。
  2. 处理用户请求:你的应用程序接收到这条消息后,可以使用 OpenAI 的 API 来解析用户的意图,并识别出他们想查询的是伦敦当天的天气情况。
  3. 函数调用 (Function Call):基于 OpenAI API 的响应,如果你的应用程序需要查询具体的天气数据,它可以调用预先定义好的函数,例如 get_weather(city: str),这个函数会使用第三方天气 API 来获取最新的天气信息。
  4. 获取天气信息:get_weather() 函数将向第三方天气 API 发送请求,传入城市名作为参数,并接收包含天气信息的响应。
  5. 整合信息并回应用户:一旦获得了天气信息,你的应用程序就可以格式化这些信息,并使用 OpenAI 的 API 生成一个自然语言的回答给用户,比如 "今天北京市的天气是雨天。请带好雨具,出行注意安全。"
from openai import OpenAI
import os
import json

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

# 定义工具列表,模型在选择使用哪个工具时会参考工具的name和description
tools = [
    {
   
        "type": "function",
        "function": {
   
            "name": "get_current_weather",
            "description": "当你想查询指定城市的天气时非常有用。",
            "parameters": {
    
                "type": "object",
                "properties": {
   
                    # 查询天气时需要提供位置,因此参数设置为location
                    "location": {
   
                        "type": "string",
                        "description": "城市或县区,比如北京市、杭州市、余杭区等。"
                    }
                }
            },
            "required": [
                "location"
            ]
        }
    }
]

# 模拟天气查询工具。返回结果示例:“北京今天是雨天。”
def get_current_weather(location):
    return f"{location}今天是雨天。 "


# 封装模型响应函数
def get_response(messages):
    completion = client.chat.completions.create(
        model="qwen-plus",
        messages=messages,
        tools=tools
        )
    return completion.model_dump()

def call_with_messages():
    print('\n')
    messages = [
            {
   
                "content": input('请输入:'),  # 提问示例: "北京天气如何?"
                "role": "user"
            }
    ]
    print("-"*60)
    # 模型的第一轮调用
    i = 1
    first_response = get_response(messages)
    assistant_output = first_response['choices'][0]['message']
    print(f"\n第{i}轮大模型输出信息:{first_response}\n")

    # 如果不需要调用工具,则直接返回最终答案
    if assistant_output['tool_calls'] == None:  # 如果模型判断无需调用工具,则将assistant的回复直接打印出来,无需进行模型的第二轮调用
        print(f"无需调用工具,我可以直接回复:{assistant_output['content']}")
        return

    messages.append(assistant_output)

    # 如果判断需要调用查询天气工具,则运行查询天气工具
    if assistant_output['tool_calls'][0]['function']['name'] == 'get_current_weather':
        tool_info = {
   "name": "get_current_weather", "role":"tool"}
        # 提取位置参数信息
        location = json.loads(assistant_output['tool_calls'][0]['function']['arguments'])['location']
        tool_info['content'] = get_current_weather(location)
    print(f"工具输出信息:{tool_info['content']}\n")
    print("-"*60)
    messages.append(tool_info)
    assistant_output = get_response(messages)['choices'][0]['message']
    if  assistant_output['content'] is None:
        assistant_output['content'] = ""
    messages.append(assistant_output)
    i += 1
    print(f"第{i}轮大模型输出信息:{assistant_output}\n")
    print(f"最终答案:{assistant_output['content']}")

if __name__ == '__main__':
    call_with_messages()

里面有很多调试的信息,方便我们学习,比如第一轮对话会返回的数据如下

{
   
    "id": "chatcmpl-233f4cc2-3e69-9b97-b348-27ec1867d694",
    "choices": [
        {
   
            "finish_reason": "tool_calls",
            "index": 0,
            "logprobs": "None",
            "message": {
   
                "content": "",
                "refusal": "None",
                "role": "assistant",
                "audio": "None",
                "function_call": "None",
                "tool_calls": [
                    {
   
                        "id": "call_a53c36f740d14e1fb6fd80",
                        "function": {
   
                            "arguments": "{\"location\":\"北京市\"}",
                            "name": "get_current_weather"
                        },
                        "type": "function",
                        "index": 0
                    }
                ]
            }
        }
    ],
    "created": 1735797998,
    "model": "qwen-plus",
    "object": "chat.completion",
    "service_tier": "None",
    "system_fingerprint": "None",
    "usage": {
   
        "completion_tokens": 18,
        "prompt_tokens": 184,
        "total_tokens": 202,
        "completion_tokens_details": "None",
        "prompt_tokens_details": {
   
            "audio_tokens": "None",
            "cached_tokens": 0
        }
    }
}

也就是说告诉我们需要调用工具方法,并且已经帮我们把工具的参数已经组装好了,这也太神奇了‼️
我这里只是一些笔记,完整课程请点击底部的查看原文,完全免费的。

这个思路有了,AI 订机票不就依葫芦画瓢了吗?那也太简单了,你们评论区实现下吧。

目录
相关文章
|
24天前
|
人工智能 数据可视化 定位技术
不会编程也能体验的 AI 魔法,外滩大会代码原生地等你解锁
不会编程也能体验的 AI 魔法,外滩大会代码原生地等你解锁
319 39
|
18天前
|
存储 消息中间件 人工智能
【03】AI辅助编程完整的安卓二次商业实战-本地构建运行并且调试-二次开发改注册登陆按钮颜色以及整体资源结构熟悉-优雅草伊凡
【03】AI辅助编程完整的安卓二次商业实战-本地构建运行并且调试-二次开发改注册登陆按钮颜色以及整体资源结构熟悉-优雅草伊凡
55 3
|
6天前
|
人工智能 缓存 监控
使用LangChain4j构建Java AI智能体:让大模型学会使用工具
AI智能体是大模型技术的重要演进方向,它使模型能够主动使用工具、与环境交互,以完成复杂任务。本文详细介绍如何在Java应用中,借助LangChain4j框架构建一个具备工具使用能力的AI智能体。我们将创建一个能够进行数学计算和实时信息查询的智能体,涵盖工具定义、智能体组装、记忆管理以及Spring Boot集成等关键步骤,并展示如何通过简单的对话界面与智能体交互。
114 1
|
6天前
|
人工智能 Java API
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
本文介绍AI大模型的核心概念、分类及开发者学习路径,重点讲解如何选择与接入大模型。项目基于Spring Boot,使用阿里云灵积模型(Qwen-Plus),对比SDK、HTTP、Spring AI和LangChain4j四种接入方式,助力开发者高效构建AI应用。
312 122
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
|
25天前
|
人工智能 算法 小程序
再见 Cursor,Qoder 真香!这波要改写 AI 编程格局
真心建议大家去使用一下这段时间最新推出的一款 AI 编程工具:Qoder 。真的是太好用了,一点也不比 Cursor 差。
534 10
|
24天前
|
机器学习/深度学习 人工智能 计算机视觉
让AI真正"看懂"世界:多模态表征空间构建秘籍
本文深入解析多模态学习的两大核心难题:多模态对齐与多模态融合,探讨如何让AI理解并关联图像、文字、声音等异构数据,实现类似人类的综合认知能力。
184 6
|
9天前
|
机器学习/深度学习 人工智能 自然语言处理
AI Compass前沿速览:Qwen3-Max、Mixboard、Qwen3-VL、Audio2Face、Vidu Q2 AI视频生成模型、Qwen3-LiveTranslate-全模态同传大模型
AI Compass前沿速览:Qwen3-Max、Mixboard、Qwen3-VL、Audio2Face、Vidu Q2 AI视频生成模型、Qwen3-LiveTranslate-全模态同传大模型
102 13
AI Compass前沿速览:Qwen3-Max、Mixboard、Qwen3-VL、Audio2Face、Vidu Q2 AI视频生成模型、Qwen3-LiveTranslate-全模态同传大模型
|
18天前
|
存储 消息中间件 人工智能
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
99 10
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
|
18天前
|
存储 消息中间件 人工智能
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
64 11
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡

热门文章

最新文章