【大模型API调用初尝试一】智谱AI 通义千问

大模型API调用初尝试一

  • 调用大模型API能干什么
  • 智谱AI大模型API调用的过程
    • 获取API_KEY
    • GLM_4同步调用
    • GLM_4异步调用
    • 文生图大模型API调用
  • 阿里云通义千问API调用过程
    • 单轮会话
    • 多轮会话

调用大模型API能干什么

大模型的参数非常庞大,功能非常强大,但是训练成本高昂,因此个人或者小企业自己去训练一个大模型是不可能的。我们可以通过直接调用大模型的API,将大模型集成到自己的应用中。 大模型的API就是一个接口,类似MaaS,用户通过调用API访问大模型,获得大模型针对用户prompt(问题)的输出,一般输出是json格式的,然后我们利用这个输出进行后续的操作。
但是大模型是一个已经训练好的模型,类似一个封装好的盒子,其能够运用的知识是有限的,比如chatgpt的知识截至2021年9月,让它提供实时的天气预报是不可行的,因此现在的大模型API中还增加了外部API/函数的调用功能,大模型能够根据用户的prompt确定要去调用的外部API/function–>调用外部API/function并获得结果–>大模型整合结果再输出,如下图所示:
在这里插入图片描述

我们可以参考某一个大模型对应的官方文档,学习如何调用其API。

智谱AI大模型API调用的过程

智谱AI是清华大学计算机系技术成果转化而来的公司,公司产品包括:中英双语千亿级超大规模预训练模型GLM-130B,并基于此推出对话模型ChatGLM;高效率代码模型CodeGeeX;多模态理解模型CogVLM和文生图模型CogView等。

获取API_KEY

调用API首先需要获取API,每个用户需要自己注册申请对应的API。进入智谱AI官网,注册后申请API,复制API_KEY以便后续调用:
在这里插入图片描述
现在打开API调用参考文档:通用大模型和图像大模型,直接复制其代码,看看输出是什么样的!

GLM_4同步调用

同步调用就是创建一个调用任务后,一直运行这个任务直到收到大模型的响应输出;对应的是异步调用,创建调用任务后获得这个任务的request-id,之后可以去干其他事情,后续通过这个任务ID查看模型的输出。

from zhipuai import ZhipuAI  # 先安装ZhipuAI的包 pip install ZhipuAI
client = ZhipuAI(api_key="xxxx") # 填写您自己的APIKey
response = client.chat.completions.create(
    model="glm-4",  # 填写需要调用的模型名称
    messages=[
    # messages是json格式的数据,大模型逐条响应
        {"role": "user", "content": "作为一名营销专家,请为我的产品创作一个吸引人的slogan"},
        {"role": "assistant", "content": "当然,为了创作一个吸引人的slogan,请告诉我一些关于您产品的信息"},
        {"role": "user", "content": "智谱AI开放平台"},
        {"role": "assistant", "content": "智启未来,谱绘无限一智谱AI,让创新触手可及!"},
        {"role": "user", "content": "创造一个更精准、吸引人的slogan"}
    ],
)
# 直接输出response,查看响应的具体内容
print(response)

输出的完整json数据:
在这里插入图片描述
如果只关注最终输出的message的content,可以只取response.choices[0].message.content

上面例子传入大模型的message列表里面,有user的信息,也有assistant的信息,大模型实际响应的只有user对应的content,但是assistant的内容可以为大模型提供一些上下文或者提示。

message只传入用户的输入,并多次问答的例子如下:

from zhipuai import ZhipuAI
 
client = ZhipuAI(api_key="xxxxxx") # 填写您自己的APIKey
# 循环提问/对话
while True:
	# 接收用户输入作为问题
    prompt = input("\nuser:")
    response = client.chat.completions.create(
        model="glm-4",  # 填写需要调用的模型名称
        messages=[
            {"role": "user", "content": prompt}
        ],
    )
    answer = response.choices[0].message.content
    print("\nZhipuAI:",answer) # 只输出大模型响应的message.context

结果:
在这里插入图片描述
上述例子虽然user能够无限次的与大模型进行对话(交互),但由于message中只有用户单次的问题,没有保存上下文的信息,因此如果前后问题有衔接,这样的方式是不行的。应该使用多轮对话,将每轮对话的问答保存在message中,传给大模型为其提供对话的上下文。

GLM_4异步调用

参考官方文档,异步调用获取结果包括两步:①获取模型的响应ID,②根据ID查询响应结果;

import time
from zhipuai import ZhipuAI
client = ZhipuAI(api_key="xxxxxx") # 请填写您自己的APIKey

response = client.chat.asyncCompletions.create(
    model="glm-4",  # 填写需要调用的模型名称
    messages=[
        {
            "role": "user",
            "content": "请你作为童话故事大王,写一篇短篇童话故事,故事的主题是要永远保持一颗善良的心,要能够激发儿童的学习兴趣和想象力,同时也能够帮助儿童更好地理解和接受故事中所蕴含的道理和价值观。"
        }
    ],
)
# 获取响应ID
task_id = response.id
task_status = ''
get_cnt = 0

while task_status != 'SUCCESS' and task_status != 'FAILED' and get_cnt <= 40:
    # 查询响应结果
    result_response = client.chat.asyncCompletions.retrieve_completion_result(id=task_id)
    print(result_response)
    task_status = result_response.task_status

    time.sleep(2)
    get_cnt += 1

运行输出如下:
在这里插入图片描述
可以看到在得到大模型的响应输出前,状态一直是processing;知道大模型响应。

文生图大模型API调用

Cogview是文生图的大模型,直接复制的官方文档的代码:

from zhipuai import ZhipuAI
client = ZhipuAI(api_key="xxxxx") # 请填写您自己的APIKey

response = client.images.generations(
    model="cogview-3", #填写需要调用的模型名称
    prompt="一只可爱的小猫咪",
)
print(response.data[0].url)

结果(0.25一张照片呜呜呜呜呜呜呜)返回图片url:https://sfile.chatglm.cn/testpath/b158178b-e00c-5ea0-92bb-f2962922b877_0.png 👇:
在这里插入图片描述

阿里云通义千问API调用过程

通义千问是阿里云开发的基于QWen模型的聊天模型,QWen模型是开源的。调用API同样需要先获取API_KEY——首先注册阿里云的账号,然后进入灵积平台创建API-KEY:
在这里插入图片描述
之后查看通义千问的官方API调用文档👉快速入门,会话可以分为单轮会话和多轮会话:

单轮会话

可以通过message和prompt两种方式调用API:

import random
from http import HTTPStatus # 通义千问API是通过HTTP调用的 
import dashscope

dashscope.api_key = 'xxxxx' # 设置自己申请的API_KEY; 这个方式设置有泄露api的可能

def call_with_messages():
    prompt = input("user:")
    messages = [{'role': 'system', 'content': 'You are a helpful assistant.'},
                {'role': 'user', 'content': prompt}]
    response = dashscope.Generation.call(
        dashscope.Generation.Models.qwen_turbo, # 选择模型
        messages=messages,
        # set the random seed, optional, default to 1234 if not set
        seed=random.randint(1, 10000),
        result_format='message',  # set the result to be "message" format.
    )
    # 之后HTTPStatus为OK时,才是调用成功
    if response.status_code == HTTPStatus.OK:
        print(response)
    else:
        print('Request id: %s, Status code: %s, error code: %s, error message: %s' % (
            response.request_id, response.status_code,
            response.code, response.message
        ))

# For prerequisites running the following sample, visit https://help.aliyun.com/document_detail/611472.html

def call_with_prompt():
    prompt = input("user:")
    response = dashscope.Generation.call(
        model=dashscope.Generation.Models.qwen_turbo, # 选择模型
        prompt=prompt
    )
    # The response status_code is HTTPStatus.OK indicate success,
    # otherwise indicate request is failed, you can get error code
    # and message from code and message.
    if response.status_code == HTTPStatus.OK:
        print(response.output)  # The output text
        print(response.usage)  # The usage information
    else:
        print(response.code)  # The error code.
        print(response.message)  # The error message.

if __name__ == '__main__':

    call_with_messages()
    print("\n")
    call_with_prompt()

两种方式的单轮会话输出如下:
在这里插入图片描述
这里需要注意通过message和prompt调用,这两种方式对应的输出Json格式是不同的。

多轮会话

通过messages调用API,每轮会话用户的问题(the content of user)和大模型的输出(content of assistant)会存储在messages这个列表中,之后的输出会参考前面的内容,体现了大模型的记忆性!(可以在体验中心,选择多轮会话,注意观察代码中messages的变化):
在这里插入图片描述
观察对应的代码,每轮会话结束后,user的问题和模型的响应都会append在messages中:

在这里插入图片描述
可以用下面的代码调用API实现多轮会话:

from http import HTTPStatus
import dashscope
from dashscope import Generation
from dashscope.api_entities.dashscope_response import Role

dashscope.api_key = 'xxxxx' # 设置API_KEY

def conversation_with_messages():
    messages = [{'role': Role.SYSTEM, 'content': 'You are a helpful assistant.'}  ]
    # 循环实现多轮会话
    while True:
        prompt = input("USER:")
        # 添加新一轮会话用户的问题
        messages.append({'role': Role.USER, 'content': prompt})
        response = Generation.call(
            Generation.Models.qwen_turbo, #选择响应的模型
            messages=messages,
            result_format='message',  # set the result to be "message" format.
        )
        if response.status_code == HTTPStatus.OK:
            print(response)
            # 把模型的输出添加到messages中
            messages.append({'role': response.output.choices[0]['message']['role'],
                             'content': response.output.choices[0]['message']['content']})
        else:
            print('Request id: %s, Status code: %s, error code: %s, error message: %s' % (
                response.request_id, response.status_code,
                response.code, response.message
            ))
            exit()

if __name__ == '__main__':
    conversation_with_messages()

结果如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/454151.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

水肥一体机远程监控解决方案

水肥一体机远程监控解决方案 水肥一体机物联网解决方案&#xff0c;作为现代农业技术的尖端代表&#xff0c;深度融合了物联网、大数据分析以及智能控制等前沿科技手段&#xff0c;为农田灌溉与施肥管理带来了革命性的精准化与智能化升级。该方案的核心理念在于通过实时监测土…

python爬虫实战——小红书

目录 1、博主页面分析 2、在控制台预先获取所有作品页的URL 3、在 Python 中读入该文件并做准备工作 4、处理图文类型作品 5、处理视频类型作品 6、异常访问而被中断的现象 7、完整参考代码 任务&#xff1a;在 win 环境下&#xff0c;利用 Python、webdriver、JavaS…

C/C++链接mysql

下载对应文件 https://dev.mysql.com/downloads/ 选择自己对应的普通进行下载 将下载好的文件上传到机器并解压 tar -zxvf 文件名.tar.gz其中 include 包含所有的方法声明&#xff0c; lib64包含所有的方法实现&#xff08;打包成库&#xff09; 将include文件夹放到/usr/…

zabbix 7.0编译部署教程

zabbix 7.0编译部署教程 2024-03-08 16:50乐维社区 zabbix7.0 alpha版本、beta版本已经陆续发布&#xff0c;Zabbix7.0 LTS版本发布时间也越来越近。据了解&#xff0c;新的版本在性能提升、架构优化等新功能方面有非常亮眼的表现&#xff0c;不少小伙伴对此也已经跃跃欲试。心…

OpenCASCADE开发指南<五>:OCC 内存管理器和异常类

一个软件首先要规定能处理的数据类型&#xff0c; 其次要实现三项最基本的功能——引用管理、内存管理和异常管理。在 OCC 中&#xff0c;这三项功能分别对应基础类中的句柄、内存管理器和异常类。 1 异常类 1. 1 异常类的定义 异常处理机制实现了正常程序逻辑与错误处理的分离…

2024春秋蓝桥杯reverse——crackme01

尝试了下输入没有任何反应 查看——32位——IDA打开 我之前没怎么写过win32&#xff0c;所以我开始在string里面找flag,wrong,right什么的字符&#xff0c;都不行 然后我又在函数里面找main&#xff0c;也什么收获的没有,OK废话完了 在win32里面 关于弹窗的函数&#xff1a;…

移动机器人设计与实践课程进度安排-2023-2024-2

进度安排由人工智能审核制定。 人工智能设计的机器人模型如下&#xff0c;一组三个&#xff1a; 轮式物流小车机器人智慧工厂绘图描述 背景: 绘制一个工厂的大致轮廓&#xff0c;包括工厂大门、围墙和主要的建筑结构。在背景中描绘一些工业设备、生产线和堆放的物料&#xff…

elasticsearch篇

1.初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;可以帮助我们从海量数据中快速找到需要的内容 例如&#xff1a; 在电商网站搜索商品 在百度搜索答案 在打车软件搜索附近…

两个笔记本如何将一个笔记本作为另一个笔记本的拓展屏

需求是有两个笔记本&#xff0c;一个笔记本闲置&#xff0c;另一个笔记本是主力本。想将另一个闲置的笔记本连接到主力本上作为拓展屏使用。网上搜了好久&#xff0c;有一些人提到了&#xff0c;也有一些视频但是文章比较少。简单总结一下吧 上述需求有两种方式 第一种&#x…

Purple Pi OH鸿蒙开发板7天入门OpenHarmony开源鸿蒙教程【六】

今天我们来从OpenHarmony简介、环境搭建、创建第一个OpenHarmony项目等方面开始OpenHarmony应用开发的第一步。 一. OpenHarmony简介 OpenHarmony 是由开放原子开源基金会&#xff08;OpenAtom Foundation&#xff09;孵化及运营的开源项目,目标是面向全场景、全连接、全智能…

BUGKU-WEB No one knows regex better than me

题目描述 题目截图如下&#xff1a; 进入场景看看&#xff1a; 解题思路 看到此类题目&#xff0c;直接代码审计 相关工具 base64 在线加密https://www.mklab.cn/utils/regex 解题步骤 代码审计 <?php error_reporting(0); # 从请求中获取了两个参数&#xff1…

String 底层是如何实现的?

1、典型回答 String 底层是基于数组实现的&#xff0c;并且数组使用了 final 修饰&#xff0c;不同版本中的数组类型也是不同的&#xff1a; JDK9 之前&#xff08;不含JDK9&#xff09; String 类是使用 char[ ]&#xff08;字符数组&#xff09;实现的但 JDK9 之后&#xf…

短视频解析接口分发系统

宝塔面板&#xff1a;Nginx系统 php7.2 Mysql 5.6-5.7 伪静态Thinkphp 上传文件直接访问域名安装即可 可以自备 听说后边要出saas去水印小程序 下载地址&#xff1a;https://pan.xunlei.com/s/VNskSEelfRVIzoSm5P5Rcw34A1?pwdqzhh# 接口演示&#xff1a; 前端演示…

安装PyTorch详细过程

安装anaconda 登录anaconda的官网下载&#xff0c;anaconda是一个集成的工具软件不需要我们再次下载。anaconda官网 跳转到这个页面如果你的Python版本正好是3.8版&#xff0c;那便可以直接根据系统去选择自己相应的下载版本就可以了。 但是如果你的Python版本号不是当前页面…

Spring 面试题及答案整理,最新面试题

Spring框架中的Bean生命周期是什么&#xff1f; Spring框架中的Bean生命周期包含以下关键步骤&#xff1a; 1、实例化Bean&#xff1a; 首先创建Bean的实例。 2、设置属性值&#xff1a; Spring框架通过反射机制注入属性。 3、调用BeanNameAware的setBeanName()&#xff1a…

数据库增删改查以及联合查询——数据库——day1

今天学习了数据库的知识 首先数据库分为关系型数据库和非关系型数据库 关系型数据库:Mysql OracleSqlServerSqlite 非关系型数据库&#xff1a;RedisNoSQL我们首先来看一下数组、链表、文件、数据库的区别 数组、链表: 内存存放数据的方式(代码运行结束、关机数据丢失) …

macOS安装maven

官网下载maven https://maven.apache.org/download.cgi如下图所示&#xff1a; 1.解压并复制到指定的目录中2.配置环境变量 vim ~/.bash_profile进行文件的修改 export M2_HOME/Users/fanfan/company/apache-maven-3.9.6 export PATH$PATH:$M2_HOME/bin3.终端中输入source ~…

echarts绘制 联系词(关键字)

<template><div><div>【关键词条】</div><div ref"target" class"w-full h-full" stylewidth:300px;height:300px></div></div> </template><script setup> import { ref, onMounted,watch } from …

数据结构——通讯录项目

1.通讯录的介绍 顺序表是通讯录的底层结构。 通讯录是将顺序表的类型替换成结构体类型来储存用户数据&#xff0c;通过运用顺序表结构来实现的。 用户数据结构&#xff1a; typedef struct PersonInfo {char name[12];char sex[10];int age;char tel[11];char addr[100]; }…

【C++】C++的初步认识

&#x1f338;博主主页&#xff1a;釉色清风&#x1f338;文章专栏&#xff1a;C&#x1f338;今日语录&#xff1a;自律以修身&#xff0c;自省以观己。自学以长识&#xff0c;自处以蓄力。 &#x1f33b;Hi~大家好&#xff0c;这次文章是C的初步认识&#xff0c;包括从C语言到…