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

news2025/1/17 0:03:10

大模型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.coloradmin.cn/o/1513438.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入

文章目录 一、ON DUPLICATE KEY UPDATE的介绍二、ON DUPLICATE KEY UPDATE的使用2.1、案例一&#xff1a;根据主键id进行更新2.2、案例二&#xff1a;根据唯一索引进行更新&#xff08;常用&#xff09;2.3、案例三&#xff1a;没有主键或唯一键字段值相同就插入2.4、案例四&am…

C#、C++、Java、Python 选择哪个好?

作者&#xff1a;网博汇智 链接&#xff1a;https://www.zhihu.com/question/298323023/answer/2789627224 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 一个好的程序员不能把自己绑定在一种语言上&#xff0c;不…

element ui 中文离线文档(百度云盘下载)

一般内网开发上不了网&#xff0c;用离线版本比较方便&#xff0c;下载地址&#xff1a; https://download.csdn.net/download/li836779537/88355878?spm1001.2014.3001.5503 下载后里面有个 index.hrml 双击打开就可以用 效果如下&#xff1a;

Android基础开发-选择图片,发送彩信

发送图片彩信案例&#xff1a; 按住加号&#xff0c;选择相册&#xff0c;把相册选择的图片加载的应用中&#xff0c;点击发送彩信&#xff0c;选择短信&#xff0c;发送彩信。 代码如下&#xff1a; package com.example.client;import androidx.activity.result.ActivityRe…

redis-操作数据库

0 序言 一个Redis服务器可以包含多个数据库。在默认情况下&#xff0c;Redis服务器在启动时将会创建16个数据库&#xff1a;这些数据库都使用号码进行标识&#xff0c;其中第一个数据库为0号数据库&#xff0c;第二个数据库为1号数据库&#xff0c;而第三个数据库则为2号数据库…

Prompt进阶3:LangGPT(构建高性能质量Prompt策略和技巧2)--稳定高质量文案生成器

Prompt进阶3:LangGPT(构建高性能质量Prompt策略和技巧2)–稳定高质量文案生成器 1.LangGPT介绍 现有 Prompt 创建方法有如下缺点&#xff1a; 缺乏系统性&#xff1a;大多是细碎的规则&#xff0c;技巧&#xff0c;严重依赖个人经验缺乏灵活性&#xff1a;对他人分享的优质 …

高铁列车员信息宣传向媒体投稿有哪些方法?

作为一名高铁列车工作人员,我肩负着传递高铁精神、展示列车员风采的重要使命。每月,我都要完成单位对外信息宣传的考核任务,通过媒体投稿来发表列车员的信息宣传文章。在这条信息宣传之路上,我经历了从摸着石头过河到智慧投稿的蜕变,其中的心酸与轻松交织,成为了我职业生涯中难…

Android 11 最终 Beta 版发布,正式版即将到来!

Beta 3 中的更新 本次更新包括针对 Pixel 设备和 Android 模拟器的 Android 11 发布候选版本。我们在 Beta 2 时就已经达到了平台稳定性里程碑&#xff0c;即所有面向应用的接口和行为都已敲定&#xff0c;包括 SDK 和 NDK API、面向应用的系统行为&#xff0c;以及对非 SDK 接…

【Linux】常用指令大全 [万字详解!建议收藏记忆!]

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

逆变器专题(21)-并网电压前馈(消除弱电网影响)(1)

在逆变器并网系统中&#xff0c;并网电压前馈是整个系统中较为重要的一环&#xff0c;一方面&#xff0c;他可以在一定程度上增加系统的快速响应能力&#xff0c;另一方面&#xff0c;其可以 消除电网电压中的低次谐波对并网输出电流的影响&#xff0c;使得整个系统的并网电能质…

spring boot 学习

目录 引言&#xff1a; 一、Spring Boot概述 二、Spring Boot的核心特性 1 自动配置 2 起步依赖 3 内嵌容器 4 监控与管理 三、Spring Boot的入门步骤 1 环境安装 2 创建项建 3 编写代码 1 启动类 2 控制器 3服务 4自动装配 5配置属性 6 JPA实体 4 运行与调试…

【Linux】linux的常用命令

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;MQ ⛺️稳中求进&#xff0c;晒太阳 (Linux常用命令) finalShell 1. ls命令 作用&#xff1a;显示当前目录下的文件及文件夹 举例&#xff1a;在用户目录&#xff08;root)使用ls可以查…

【Python】新手入门学习:详细介绍开放封闭原则(OCP)及其作用、代码示例

【Python】新手入门学习&#xff1a;详细介绍开放封闭原则&#xff08;OCP&#xff09;及其作用、代码示例 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyT…

网络通信另个角度的认识(进程间通信),端口号(为什么要有,和pid的关系,分类,如何封装,和进程的定位原理+对应关系),客户端如何拿到服务端的port

目录 另一个角度认识网络通信 端口号 引入 -- 为什么要有端口号 问题 解决 端口号和pid 举例 介绍 分类 知名端口 注册端口 动态端口 客户端如何知道服务端的端口号 封装端口号 定位原理 进程和端口号的对应关系 数据如何被上层进程读到 另一个角度认识网络…

指数函数与三角函数乘积的积分公式

先上公式&#xff0c;公式正确&#xff0c;用欧拉公式即可证明。 数学公式不好打字&#xff0c;我就发截图。 欧拉公式证明如下&#xff1a;

汉诺塔问题代码写法的详细解析

汉诺塔游戏规则&#xff1a; 规则&#xff1a; 汉诺塔问题是一个经典的问题。汉诺塔&#xff08;Hanoi Tower&#xff09;&#xff0c;又称河内塔&#xff0c;源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着…

基于Web的论文管理系统设计

目 录 目 录 III 摘 要 V 关键词 V Abstract VI Key Word VI 第一章 绪论 6 1.1系统设计背景 1 1.2系统设计目的与意义 1 1.3国内外现状 2 1.4本文结构 3 第二章 需求分析 3 2.1系统需求分析 4 2.2系统角色设计 4 第三章 系统开发技术 4 3.1 PHP语言简介和特点 5 3.2 Mysql数据…

代码随想录day18(1)二叉树:二叉树的层序遍历(leetcode102)

题目要求&#xff1a;实现二叉树的层序遍历 思路&#xff1a;实现层序遍历使用队列即可。每个结点遍历结束后&#xff0c;将其左右孩子结点也放入队列。本道题返回的是一个二维数组&#xff0c;即需要将每一层分开&#xff0c;所以还需要size变量记录每层元素个数。注意&#…

程序员来看,你选哪一门编程语言提升自己?

通过多个调查表的分析&#xff0c;发现大家对于GO语言的兴趣和需求非常高。GO语言是一种由Google开发的静态类型、编译型语言&#xff0c;最初于2007年问世。这门语言的设计者是Robert Griesemer、Rob Pike和Ken Thompson&#xff0c;他们的初衷是为了弥补C和Java在大规模软件工…

I2C学习总结

i2c概述 I2C&#xff08;Inter-Intergreted Circuit&#xff09; 是一种串行通信协议&#xff0c;用于集成电路之间完成数据传输&#xff0c;i2c用广泛用以各种领域&#xff0c;包括电子设备、嵌入式系统、工业自动化等&#xff1b; i2c仅仅只是一个数据传输的协议&#xff0c…