当前位置: 首页 > news >正文

2.3 调用智谱 API

调用智谱 API

  • 1 申请调用权限
  • 2 调用智谱 AI API
  • 3 使用 LangChain 调用智谱 AI
  • 参考:

智谱 AI 是由清华大学计算机系技术成果转化而来的公司,致力于打造新一代认知智能通用模型。公司合作研发了双语千亿级超大规模预训练模型 GLM-130B,并构建了高精度通用知识图谱,形成数据与知识双轮驱动的认知引擎,基于此模型打造了 ChatGLM(chatglm.cn)。

ChatGLM 系列模型,包括 ChatGLM-130B 和 ChatGLM-6B 模型,支持相对复杂的自然语言指令,并且能够解决困难的推理类问题。其中,ChatGLM-6B 模型吸引了全球超过 160 万人下载安装,该模型在 Hugging Face (HF) 全球大模型下载榜中连续 12 天位居第一名,在国内外的开源社区中产生了较大的影响。

本章节将指导开发者如何将智谱 AI API 的使用方式,也将介绍如何将其封装成个性化 LLM 嵌入 LangChain 使用。

1 申请调用权限

智谱AI开放平台网址:
https://open.bigmodel.cn/overview
点击“开始使用”或者“开发者工具台”进行注册:
image.png

如果是没有领取过免费试用包的用户,可以领取到 18 元的 token 的试用量;如下图右边绿色框所示。智谱 AI 提供了三种不同的模型 API,ChatGLM-Pro, ChatGLM-Std, ChatGLM-Lite 三种不同的模型分别适用于不同的场景,可以点击蓝色框中的立即体验直接体验。对于需要使用 API key 来搭建应用的话,需要点击右边红框中的查看 API key,就会进入到我们个人的 API 管理列表中。
image.png

在该界面,我们就可以看到我们获取到的 API 所对应的应用名字和 API key 了。
我们可以点击 添加新的 API key 并输入对应的名字即可生成新的 API key。

image.png

2 调用智谱 AI API

智谱 AI 提供了 SDK 和原生 HTTP 来实现模型 API 的调用,建议使用 SDK 进行调用以获得更好的编程体验。
注意,需要在环境中安装配置示例中的所需第三方库

首先我们需要配置秘钥信息:

pip install zhipuai
import zhipuai 
zhipuai.api_key ="your api key"#填写控制台中获取的 APIKey 信息 
model ="chatglm_std"#用于配置大模型版本

智谱的调用传参和其他类似,也需要传入一个列表,列表中包括 role 和 prompt,我们首先定义一个从用户输入 prompt 生成传入参数的函数:

def getText(role, content, text = []):# role 是指定角色,content 是 prompt 内容jsoncon = {}jsoncon["role"] = rolejsoncon["content"] = contenttext.append(jsoncon)return text

接着,我们将一个用户输入 prompt 封装为这样一个传入参数列表:

question = getText("user", "你好")
print(question)

输出:

[{'role': 'user', 'content': '你好'}]

然后再调用 zhipuai SDK 中封装的 invoke 函数即可:

# 请求模型
response = zhipuai.model_api.invoke(model=model,prompt=question
)
print(response)

输出:

{'code': 200, 'msg': '操作成功', 'data': {'request_id': '8023318729410566227', 'task_id': '8023318729410566227', 'task_status': 'SUCCESS', 'choices': [{'role': 'assistant', 'content': '" 你好👋!我是人工智能助手 智谱清言,可以叫我小智🤖,很高兴见到你,欢迎问我任何问题。"'}], 'usage': {'prompt_tokens': 2, 'completion_tokens': 28, 'total_tokens': 30}}, 'success': True}

如下图所示:
image.png

参数说明

  • prompt (list): 调用对话模型时,将当前对话信息列表作为提示输入给模型; 按照 {“role”: “user”, “content”: “你好”} 的键值对形式进行传参; 总长度超过模型最长输入限制后会自动截断,需按时间由旧到新排序。

  • temperature (float): 采样温度,控制输出的随机性,必须为正数取值范围是:(0.0,1.0],不能等于 0,默认值为 0.95 值越大,会使输出更随机,更具创造性;值越小,输出会更加稳定或确定。

  • top_p (float): 用温度取样的另一种方法,称为核取样。取值范围是:(0.0, 1.0) 开区间,不能等于 0 或 1,默认值为 0.7。模型考虑具有 top_p 概率质量 tokens 的结果。例如:0.1 意味着模型解码器只考虑从前 10% 的概率的候选集中取 tokens。

  • request_id (string): 由用户端传参,需保证唯一性;用于区分每次请求的唯一标识,用户端不传时平台会默认生成

  • return_type (string): 用于控制每次返回内容的类型,空或者没有此字段时默认按照 json_string 返回。json_string 返回标准的 JSON 字符串。text 返回原始的文本内容

  • 建议您根据应用场景调整 top_p 或 temperature 参数,但不要同时调整两个参数

3 使用 LangChain 调用智谱 AI

我们同样可以通过 LangChain 框架来调用智谱 AI 大模型,以将其接入到我们的应用框架中。
同文心大模型类似,原生的 LangChain 是不支持智谱 AI 调用的,我们需要自定义一个 LLM。
此处,我们可以直接调用已自定义好的 ZhipuAILLM:

如果你使用的是pycharm来进行验证:可以看到zhipuai_ll.py的文件在projects/llm 文件夹下:
image.png

然后使用下面代码进行测试:

import zhipuai
zhipuai.api_key = "e28ddd64e1512ad698784a8cc5aab4f7.XVQXyxle4TdGXJpN"
from zhipuai_llm import ZhipuAILLM
zhipuai_model = ZhipuAILLM(model="chatglm_std", temperature=0, zhipuai_api_key= zhipuai.api_key)
print(zhipuai_model.generate(['你好']))

输出:

generations=[[Generation(text='" 你好👋!我是人工智能助手 智谱清言,可以叫我小智🤖,很高兴见到你,欢迎问我任何问题。"', generation_info=None)]] llm_output=None run=[RunInfo(run_id=UUID('cdc23164-cc74-4c32-be38-6ab5bc8d6756'))]

问题1:
可能是自己python版本的问题:
需要 至少要python版本 大于3.8; 把自己的python版本升级一下就ok了。

image.png
image.png

参考:

【datawhale-动手学大模型应用开发】
https://datawhalechina.github.io/llm-universe/#/C2/5.%20%E8%B0%83%E7%94%A8%E6%99%BA%E8%B0%B1%20AI(ChatGLM)

相关文章:

  • 【数据分享】2023年我国省市县三级的专精特新“小巨人”企业数量(Excel/Shp格式)
  • C#中.NET 6.0 控制台应用通过EF访问新建数据库
  • 竞赛 题目:基于机器视觉opencv的手势检测 手势识别 算法 - 深度学习 卷积神经网络 opencv python
  • 云原生微服务架构图
  • 计算属性与watch的区别,fetch与axios在vue中的异步请求,单文本组件使用,使用vite创建vue项目,组件的使用方法
  • openGauss通过VIP实现的故障转移
  • 汽车 CAN\CANFD数据记录仪
  • 情报收集工具的编写
  • 无需添加udid,ios企业证书的自助生成方法
  • Linux:firewalled服务常规操作汇总
  • Linux服务器挂载另一台服务器的文件夹(mount)
  • 【C++】plog
  • HTML5学习系列之网页图像
  • SELinux零知识学习十八、SELinux策略语言之类型强制(3)
  • JVM bash:jmap:未找到命令 解决
  • ES6指北【2】—— 箭头函数
  • (三)从jvm层面了解线程的启动和停止
  • 【Amaple教程】5. 插件
  • 07.Android之多媒体问题
  • C++11: atomic 头文件
  • CentOS从零开始部署Nodejs项目
  • Javascript Math对象和Date对象常用方法详解
  • MySQL的数据类型
  • Python_OOP
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 爱情 北京女病人
  • 创建一个Struts2项目maven 方式
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 记一次和乔布斯合作最难忘的经历
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 少走弯路,给Java 1~5 年程序员的建议
  • 算法之不定期更新(一)(2018-04-12)
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​Java并发新构件之Exchanger
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #《AI中文版》V3 第 1 章 概述
  • $forceUpdate()函数
  • (C++17) optional的使用
  • (ZT)一个美国文科博士的YardLife
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • ***利用Ms05002溢出找“肉鸡
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .net mvc 获取url中controller和action
  • .Net6使用WebSocket与前端进行通信
  • .net下简单快捷的数值高低位切换