【大模型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 ZhipuAIclient = 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.contentprint("\nZhipuAI:",answer) # 只输出大模型响应的message.context

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

GLM_4异步调用

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

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

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

文生图大模型API调用

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

from zhipuai import ZhipuAI
client = ZhipuAI(api_key="xxxxx") # 请填写您自己的APIKeyresponse = 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 dashscopedashscope.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 setseed=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.htmldef 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 textprint(response.usage)  # The usage informationelse: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 Roledashscope.api_key = 'xxxxx' # 设置API_KEYdef 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.mzph.cn/news/746944.shtml

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

相关文章

node:internal/crypto/hash:69 this[kHandle] = new _Hash(algorithm, xofLen);

npm 打包报错 原因就是npm版本太高了&#xff0c;用的18版本&#xff0c;切换成16版本就好了。

UI 学习 二 可访问性 模式

教程&#xff1a;Accessibility – Material Design 3 一 颜色对比 颜色和对比度可以用来帮助用户看到和理解应用程序的内容&#xff0c;与正确的元素交互&#xff0c;并理解操作。 颜色可以帮助传达情绪、语气和关键信息。可以选择主色、辅助色和强调色来支持可用性。元素之…

H5 流光分割个人主页源码

源码名称&#xff1a;流光分割个人主页源码 源码介绍&#xff1a;一款流光分割特效个人主页源码&#xff0c;源码带大量跳转个人联系方式按钮和朋友按钮。同时带有个人介绍。 需求环境&#xff1a;H5 下载地址&#xff1a; https://www.changyouzuhao.cn/10241.html

电机参数辨识算法(2)——基于高频注入的磁链辨识策略

电机参数辨识算法&#xff08;1&#xff09;——基于高频注入的电感辨识策略-CSDN博客https://blog.csdn.net/m0_46903653/article/details/136722750?spm1001.2014.3001.5501上一期已经讲过了电感辨识方法。 今天这是参数辨识的第二期&#xff0c;今天来简单看看磁链的辨识。…

【数学建模】熵权法

之前我们学了层次分析法和topsis法&#xff0c;但是主观性十分强&#xff0c;有没有科学的方法得出权重呢&#xff1f;今天&#xff0c;我们来学习熵权法&#xff01; 基本概念&#xff1a; 熵权法&#xff0c;物理学名词&#xff0c;按照信息论基本原理的解释&#xff0c;信息…

SpringBoot+vue3打造企业级一体化SaaS系统

SpringBootvue3打造企业级一体化SaaS系统 简介&#xff1a;    全面提升前后端技术水平&#xff0c;独立完成全栈项目开发能力&#xff0c;快速进击全栈工程师&#xff0c;最终在面试中脱颖而出。整合后端主流技术&#xff08;Spring Boot、物理数据库隔离、加载动态权限、多…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Flex)

以弹性方式布局子组件的容器组件。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。Flex组件在渲染时存在二次布局过程&#xff0c;因此在对性能有严格要求的场景下建议使用Column、Row代替。Flex组…

Vue3基础笔记(1)模版语法 属性绑定 渲染

Vue全称Vue.js是一种渐进式的JavaScript框架&#xff0c;采用自底向上增量开发的设计&#xff0c;核心库只关注视图层。性能丰富&#xff0c;完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用&#xff0c;适用于场景丰富的web前端框架。灵活性和可逐步集成…

149.乐理基础-七和弦的第一转位、第二转位、第三转位

内容参考于&#xff1a;三分钟音乐社 上一个内容&#xff1a;148.常用的7个七和弦结构与简称 上一个内容里练习的答案&#xff1a; 前置内容&#xff1a;必须看过 140.音程的转位 和 146.三和弦的第一转位、第二转位这两个 现在还是狭义上、理论上的转位&#xff0c;下面用C…

高校实验室科研仪器开放共享存在的问题及对策建议

随着科技的迅速发展和高校科研水平的提高&#xff0c;高校实验室科研仪器的开放共享已经成为推动科研进步和创新发展的重要手段。然而&#xff0c;在实际操作中&#xff0c;我们也面临着诸多问题和挑战。本文将分析高校实验室科研仪器开放共享存在的问题&#xff0c;并提出相应…

杂七杂八111

MQ 用处 一、异步。可提高性能和吞吐量 二、解耦 三、削峰 四、可靠。常用消息队列可以保证消息不丢失、不重复消费、消息顺序、消息幂等 选型 一Kafak:吞吐量最大&#xff0c;性能最好&#xff0c;集群高可用。缺点&#xff1a;会丢数据&#xff0c;功能较单一。 二Ra…

javaEE7

1. <% page pageEncoding"UTF-8"%><% page import"java.io.*"%> <% page import"java.util.*"%> <% page import"java.math.*"%> <html> <head><title>网站计数器</title></head&…

【软件测试基础篇】第二节.黑盒测试中常见方法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言⼀、等价类法&#xff08;解决穷举问题&#xff09;二、边界值法&#xff08;解决边界限制问题&#xff09;三、正交表法&#xff08;解决多条件依赖问题&#…

媒体发稿:澳门媒体发稿7个流程

推广平台澳门是一个重要的度假旅游娱乐终点&#xff0c;都是媒体领域热议的话题。对于澳门的媒体发稿营销推广要求&#xff0c;大家提供了一个简单易用的套餐系统软件&#xff0c;帮助大家在澳门媒体上发表推广文章。下面我们就根据7个阶段&#xff0c;详解构建这一套餐推广平台…

echarts tooltip提示组件框自定义浮窗内容

echarts tooltip提示组件框自定义浮窗内容 tooltip提示组件框 有三种浮窗展示方法 第一种&#xff1a;默认展示 第二种&#xff1a;字符串模板 第三种&#xff1a;回调函数 第二种 formatter&#xff08;字符串模板&#xff09; 模板变量有 {a}, {b}&#xff0c;{c}&#xff0…

C++ 作业 24/3/14

1、成员函数版本实现算术运算符的重载&#xff1b;全局函数版本实现算术运算符的重载 #include <iostream>using namespace std;class Test {friend const Test operator-(const Test &L,const Test &R); private:int c;int n; public:Test(){}Test(int c,int n…

LeetCode 热题 100 | 回溯(二)

目录 1 39. 组合总和 2 22. 括号生成 3 79. 单词搜索 菜鸟做题&#xff0c;语言是 C&#xff0c;感冒快好版 关于对回溯算法的理解请参照我的上一篇博客&#xff1b; 在之后的博客中&#xff0c;我将只分析回溯算法中的 for 循环。 1 39. 组合总和 题眼&#xff1a;c…

VBA_MF系列技术资料1-400

MF系列VBA技术资料1-400 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧&#xff0c;我参考大量的资料&#xff0c;并结合自己的经验总结了这份MF系列VBA技术综合资料&#xff0c;而且开放源码&#xff08;MF04除外&#xff09;&#xff0c;其中MF01-0…

Java复习02 IO流

Java复习02 IO流 首先&#xff0c;“IO”在计算机里面代表的是“输入/输出”&#xff08;Input / Output&#xff09;&#xff0c;简单来说&#xff0c;就是计算机与外部世界进行数据交流的过程。比如&#xff0c;你在键盘上敲字&#xff0c;数据就输入到计算机里了&#xff0…

FastAPI 是什么?深入解析

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建基于 Python 的 API。它是一个开源项目&#xff0c;基于 Starlette 和 Pydantic 库构建而成&#xff0c;提供了强大的功能和高效的性能。 FastAPI 官网地址&#xff1a;fastapi.tiango…