大模型编程(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 订机票不就依葫芦画瓢了吗?那也太简单了,你们评论区实现下吧。

目录
相关文章
|
23天前
|
机器学习/深度学习 人工智能 自动驾驶
企业内训|AI大模型在汽车行业的前沿应用研修-某汽车集团
本课程是TsingtaoAI为某汽车集团高级项目经理设计研发,课程全面系统地解析AI的发展历程、技术基础及其在汽车行业的深度应用。通过深入浅出的理论讲解、丰富的行业案例分析以及实战项目训练,学员将全面掌握机器学习、深度学习、NLP与CV等核心技术,了解自动驾驶、智能制造、车联网与智能营销等关键应用场景,洞悉AI技术对企业战略布局的深远影响。
170 97
|
12天前
|
机器学习/深度学习 人工智能 测试技术
PsycoLLM:开源的中文心理大模型,免费 AI 心理医生,支持心理健康评估与多轮对话
PsycoLLM 是合肥工业大学推出的中文心理大语言模型,基于高质量心理数据集训练,支持心理健康评估、多轮对话和情绪识别,为心理健康领域提供技术支持。
153 51
PsycoLLM:开源的中文心理大模型,免费 AI 心理医生,支持心理健康评估与多轮对话
|
9天前
|
存储 人工智能 自然语言处理
|
3天前
|
弹性计算 人工智能 自然语言处理
OS Copilot——面向未来的AI大模型
阿里云的智能助手`OS Copilot`是一款基于大模型构建的操作系统智能助手,支持自然语言问答、辅助命令执行、系统运维调优等功能。
27 8
OS Copilot——面向未来的AI大模型
|
4天前
|
数据采集 人工智能 安全
1000多个智能体组成,AI社会模拟器MATRIX-Gen助力大模型自我进化
在人工智能领域,大型语言模型(LLMs)的发展迅速,但如何提升其指令遵循能力仍是一大挑战。论文提出MATRIX-Gen,一个基于多智能体模拟的AI社会模拟器。MATRIX-Gen通过模拟智能体交互生成多样化的现实场景,不依赖预定义模板,从而合成高质量指令数据。它包括MATRIX模拟器和MATRIX-Gen指令生成器,能生成监督微调、偏好微调及特定领域的数据集。实验表明,使用MATRIX-Gen合成的数据集微调后的模型在多个基准测试中表现出色,显著优于现有方法。然而,该方法也面临智能体和场景规模对数据质量的影响等挑战。
45 33
|
15天前
|
数据采集 人工智能 搜索推荐
SocraticLM:通过 AI 提问引导学生主动思考,中科大与科大讯飞联合推出苏格拉底式教育大模型
SocraticLM 是由中科大和科大讯飞联合开发的苏格拉底式教学大模型,通过提问引导学生主动思考,提供个性化教学,显著提升教学效果。
61 9
SocraticLM:通过 AI 提问引导学生主动思考,中科大与科大讯飞联合推出苏格拉底式教育大模型
|
6天前
|
人工智能 自然语言处理 API
用AI Agent做一个法律咨询助手,罗老看了都直呼内行 feat.通义千问大模型&阿里云百炼平台
本视频介绍如何使用通义千问大模型和阿里云百炼平台创建一个法律咨询助手AI Agent。通过简单配置,无需编写代码或训练模型,即可快速实现智能问答功能。演示包括创建应用、配置知识库、上传民法典文档、构建知识索引等步骤。最终,用户可以通过API调用集成此AI Agent到现有系统中,提供专业的法律咨询服务。整个过程简便高效,适合快速搭建专业领域的小助手。
93 21
|
21天前
|
人工智能 自然语言处理 测试技术
DeepSeek V3:DeepSeek 开源的最新多模态 AI 模型,编程能力超越Claude,生成速度提升至 60 TPS
DeepSeek V3 是深度求索公司开源的最新 AI 模型,采用混合专家架构,具备强大的编程和多语言处理能力,性能超越多个竞争对手。
298 4
DeepSeek V3:DeepSeek 开源的最新多模态 AI 模型,编程能力超越Claude,生成速度提升至 60 TPS
|
3天前
|
机器学习/深度学习 存储 人工智能
淘天算法工程师玩转《黑神话》,多模态大模型如何成为天命AI
淘天集团未来生活实验室的算法工程师们以ARPG游戏《黑神话:悟空》为平台,探索多模态大模型(VLM)在仅需纯视觉输入和复杂动作输出场景中的能力边界。他们提出了一种名为VARP的新框架,该框架由动作规划系统和人类引导的轨迹系统组成,成功在90%的简单和中等难度战斗场景中取得胜利。研究展示了VLMs在传统上由强化学习主导的任务中的潜力,并提供了宝贵的人类操作数据集,为未来研究奠定了基础。
|
4天前
|
人工智能 弹性计算 JSON
AI大模型复习“搭子”—部署流程演示
本文主要介绍文档智能,介绍利用大模型构建知识库和AI学习助手的部署流程,主要包括以下几方面的内容: 1.什么是文档智能 2.文档智能 & RAG 3.基于文档智能和百炼平台的RAG应用案例

热门文章

最新文章