2.3 调用智谱 API

news/2024/7/20 19:52:34 标签: python, 人工智能, 深度学习, 大模型

调用智谱 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 生成传入参数的函数:

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

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

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

输出:

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

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

python"># 请求模型
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)


http://www.niftyadmin.cn/n/5192946.html

相关文章

Python uiautomation获取微信内容!聊天记录、聊天列表、全都可获取

Python uiautomation 是一个用于自动化 GUI 测试和操作的库,它可以模拟用户操作来执行各种任务。 通过这个库,可以使用Python脚本模拟人工点击,人工操作界面。本文使用 Python uiautomation 进行微信电脑版的操作。 以下是本次实验的版本号。…

Flutter笔记:Matrix4矩阵变换与案例

Flutter笔记 Matrix4矩阵变换及其案例 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/details/134474764 【简介…

怎样助力IT运维团队更专业、更协作、更高效

在数字化转型的浪潮中,IT系统的稳定性和可靠性是企业成功的关键因素之一。然而,随着IT环境的日益复杂和多变,传统的运维方法已经无法满足企业的需求,面临着各种挑战和困难,如: - 数据量巨大,难…

聊聊httpclient的validateAfterInactivity

序 本文主要研究一下httpclient的validateAfterInactivity validateAfterInactivity org/apache/http/pool/AbstractConnPool.java Contract(threading ThreadingBehavior.SAFE_CONDITIONAL) public abstract class AbstractConnPool<T, C, E extends PoolEntry<T, …

axios的使用,cancelToken取消请求

get请求 // 为给定 ID 的 user 创建请求 axios.get("/user?ID12345").then(function (response) {console.log(response);}).catch(function (error) {console.log(error);}); // 上面的请求也可以这样做 axios.get("/user", {params: {ID: 12345,},}).t…

LeetCode501. Find Mode in Binary Search Tree

文章目录 一、题目二、题解 一、题目 Given the root of a binary search tree (BST) with duplicates, return all the mode(s) (i.e., the most frequently occurred element) in it. If the tree has more than one mode, return them in any order. Assume a BST is def…

肖sir__linux讲解(2.1)

linux命令 cp 复制命令 a、cp 原文件名称 新文 件名称&#xff08;不存在的文件&#xff09; 案例&#xff1a;cp a k 截图&#xff1a; b.cp 原文件名称 原有文 件名称&#xff08;存在的文件&#xff09; 案例:cp a b 截图&#xff1a; c、cp 指定路径复制 格式&#xff…

dataspace

{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"adcode":654223,"name":"沙湾市","center":[85.622508,44.329544],"centroid":…