from openai import OpenAI
import os
# format output
from IPython.display import Markdown
from pprint import pprint
= OpenAI(
client = os.getenv("ZHIPUAI_API_KEY"),
api_key="https://open.bigmodel.cn/api/paas/v4/"
base_url )
8 智谱开放平台
智谱 AI 开放平台提供一系列具有不同功能和定价的大模型,包括通用大模型、超拟人大模型、图像大模型、向量大模型等,并且支持使用您的私有数据对模型进行微调。
8.1 模型清单
智谱AI 开放平台提供了包括通用大模型、图像大模型、超拟人大模型、向量大模型等多种模型。
8.1.1 语言模型
模型 | 描述 | 上下文 | 最大输出 |
---|---|---|---|
GLM-4-Plus | 高智能旗舰: 性能全面提升,长文本和复杂任务能力显著增强 | 128K | 4K |
GLM-4-0520 | 高智能模型:适用于处理高度复杂和多样化的任务 | 128K | 4K |
GLM-4-Long | 超长输入:专为处理超长文本和记忆型任务设计 | 1M | 4K |
GLM-4-AirX | 极速推理:具有超快的推理速度和强大的推理效果 | 8K | 4K |
GLM-4-Air | 高性价比:推理能力和价格之间最平衡的模型 | 128K | 4K |
GLM-4-Flash | 免费调用:智谱AI首个免费API,零成本调用大模型。 | 128K | 4K |
GLM-4V | 图像理解:具备图像理解能力和推理能力 | 2K | 1k |
GLM-4-AllTools | Agent模型:自主规划和执行复杂任务 | 128K | 4K |
GLM-4 | 旧版旗舰:发布于2024年1月16日,目前已被GLM-4-0520取代 | 128K | 4K |
8.1.2 多模态模型
模型 | 描述 | 最大输入 | 输出分辨率 |
---|---|---|---|
GLM-4V-Plus | 视频和图像理解:具备视频内容和多图片的理解能力 | 8K | - |
GLM-4V | 图像理解:具备图像理解能力和推理能力 | 2K | - |
CogVideoX | 视频生成:输入文本或图片即可轻松制作视频 | 0.5K | 1440x960 |
CogView-3.5 | 图片生成:根据用户文字描述生成高质量图像,支持多图片尺寸 | 1k | 1024x1024 768x1344 864x1152 等 |
CogView-3 | 图片生成:根据用户文字描述快速、精准生成图像 | 1k | 1024x1024 |
8.1.3 向量模型
模型 | 描述 | 最大输入 | 向量维度 |
---|---|---|---|
Embedding-3 | 最新模型:支持自定义向量维度 | 8K | 2048 |
Embedding-2 | 旧版模型:目前已被Embedding-3取代 | 8K | 1024 |
8.1.4 其他模型
模型 | 描述 | 上下文 | 最大输出 |
---|---|---|---|
ChatGLM-3 | 拟人模型:适用于情感陪伴和虚拟角色。 | 4K | 2K |
Emohaa | 心理模型:具备专业咨询能力,帮助用户理解情感并应对情绪问题。 | 8K | 4k |
CodeGeeX-4 | 代码模型:适用于代码自动补全任务 | 128K | 4k |
GLM
GLM 全名 General Language Model ,是一款基于自回归填空的预训练语言模型。ChatGLM系列模型,支持相对复杂的自然语言指令,并且能够解决困难的推理类问题。该模型配备了易于使用的 API 接口,允许开发者轻松将其融入各类应用,广泛应用于智能客服、虚拟主播、聊天机器人等诸多领域。
Embedding
Embedding 是一种将数据(如文本)转化为向量形式的表示方法,这种表示方式确保了在某些特定方面相似的数据在向量空间中彼此接近,而与之不相关的数据则相距较远。通过将文本字符串转换为向量,使得数据能够有效用于搜索、聚类、推荐系统、异常检测和分类等应用场景。
Token
Token 是模型用来表示自然语言文本的基本单位,可以直观的理解为“字”或“词”;通常 1 个中文词语、1 个英文单词、1 个数字或 1 个符号计为 1 个token。
一般情况下 ChatGLM 系列模型中 token 和字数的换算比例约为 1:1.8 ,但因为不同模型的分词不同,所以换算比例也存在差异,每一次实际处理 token 数量以模型返回为准,您可以从返回结果的 usage 中查看。
8.2 语言模型
GLM-4 提供了多款模型,适用于各种应用场景。
模型编码:glm-4-plus
、glm-4-0520
、glm-4
、glm-4-air
、glm-4-airx
、glm-4-long
、 glm-4-flash
。
8.2.1 使用 OpenAI SDK
使用 OpenAI SDK 创建 Client,示例如下:
以下代码是 GLM-4 的对话调用示例,请注意:
temperature
:参数的区间为(0,1)
do_sample = False (temperature = 0)
:在 OpenAI 调用中并不适用
# 提交对话请求
= client.chat.completions.create(
completion ="GLM-4-Flash",
model=[
messages
{"role": "system",
"content": "你是一个聪明且富有创造力的小说作家"
},
{"role": "user",
"content": (
"请你作为童话故事大王,写一篇短篇童话故事,"
"故事的主题是要永远保持一颗善良的心,要能够"
"激发儿童的学习兴趣和想象力,同时也能够帮助"
"儿童更好地理解和接受故事中所蕴含的道理和价值观。"
)
}
],=0.7,
top_p=0.9
temperature
)
print(completion.choices[0].message.content)
标题:《星星的魔法书》
从前,在一个遥远的星星王国里,住着一群拥有星星光芒的孩子们。他们每天在夜空中闪烁,为人们带来温暖和希望。在这个王国里,有一颗特别明亮的星星,名叫小星。小星不仅光芒璀璨,还拥有一本神奇的魔法书。
这本魔法书里记载着无数的智慧和故事,它能够把书中的文字变成真实的世界。小星的魔法书是星星王国的宝藏,而小星是这本书的守护者。
有一天,小星在翻阅魔法书时,发现了一个新故事。故事讲述了一个名叫小兔的森林小动物,它因为善良和勇敢,得到了星星的祝福,拥有了神奇的力量。
小星被这个故事深深吸引,它决定将这个故事变成现实,让森林里的孩子们都能感受到善良的力量。于是,小星将魔法书中的文字召唤到现实世界,创造了一个充满奇幻色彩的森林。
森林里,小兔和它的朋友们住在一座美丽的小木屋里。他们每天在森林里玩耍,帮助其他小动物解决问题。小兔总是用心倾听,用善良的行动温暖着每一个朋友的心。
有一天,森林里的小河被一块巨大的石头堵住了,水无法流淌,小动物们都非常苦恼。小兔想起了小星的魔法书,它决定去寻找帮助。
小兔来到了小星的森林,它请求小星帮助解决河流的问题。小星微笑着告诉小兔,真正的帮助来自于内心的善良和勇气。于是,小星给了小兔一本小书,书中记载着如何用善良的力量去改变世界。
小兔带着小书回到了森林,它用自己的善良感染了每一个动物。大家齐心协力,用树枝和叶子搭建了一个小桥,让河水重新流淌起来。
森林里的动物们为小兔的善良欢呼,他们开始明白,每个人都有能力用善良的心去改变世界。小兔的故事在森林里传开了,每个孩子都受到了启发。
星星王国的孩子们也被这个故事感动,他们纷纷效仿小兔,用自己的善良去帮助他人。小星的魔法书成为了他们学习和成长的指南。
从此,星星王国的孩子们在夜空中闪烁着更加明亮的光芒,他们用善良的心照亮了整个世界。而小星的魔法书,也成为了永恒的传说,激励着每一个孩子永远保持一颗善良的心。
故事结束,但善良的力量永远流传。愿每一个孩子都能在成长的道路上,拥有这样一颗光芒四射的善良之心。
8.2.2 使用智谱AI SDK
使用智谱AI SDK 可以更方便的创建 client 和使用模型提供的附加功能。
from zhipuai import ZhipuAI
= ZhipuAI(api_key=os.getenv("ZHIPUAI_API_KEY")) # 请填写您自己的APIKey
client
= [{
tools "type": "web_search",
"web_search": {
"enable": True #默认为关闭状态(False) 禁用:False,启用:True。
}
}]
= [{
messages "role": "user",
"content": "中国 2024 年一季度的GDP是多少 "
}]
= client.chat.completions.create(
response ="GLM-4-Flash",
model=messages,
messages=tools
tools
)
print(response.choices[0].message)
CompletionMessage(content='中国2024年一季度的国内生产总值(GDP)为296299亿元人民币。这一数据是根据国家统计局的初步核算得出的,按不变价格计算,同比增长5.3%,比上年四季度环比增长1.6%。', role='assistant', tool_calls=None)
8.3 多模态模型
8.3.1 文生视频
CogVideoX 是由智谱AI开发的视频生成大模型,具备强大的视频生成能力、只需输入文本或图片就可以轻松完成视频制作。本指南将教您如何系统地构建提示词,从而生成专业级别的视频作品。
提示词的精确度与细节水平直接影响视频内容的质量。采用结构化提示词可以极大提升视频内容的符合度和专业性。以下是构建提示词的关键组成部分:
提示词 = (镜头语言 +景别角度+ 光影) + 主体 (主体描述) + 主体运动 +场景 (场景描述) + (氛围)
镜头语言:通过镜头的各种应用以及镜头之间的衔接和切换来传达故事或信息,并创造出特定的视觉效果和情感氛围。如镜头平移,推近、拉远、升降拍摄、摇摄、跟随拍摄、手持拍摄、无人机航拍等;
景别角度:控制相机与被摄对象之间距离和角度,实现不同的视觉效果和情感表达。如大全景、中景、近景 、鸟瞰视角 、跟随视角、鱼眼效果等;
光影:光影是赋予摄影作品灵魂的关键元素,光影的运用可以使照片更具深度,更具情感,我们可以通过光影创造出富有层次感和情感表达力的作品。如自然光、丁达尔效应、柔和散射、硬光直射 、逆光剪影、三点布光等;
主体:主体是视频中的主要表现对象。如儿童、狮子、向日葵,汽车、城堡等;
主体描述:对主体外貌细节和肢体姿态等的描述,如人物的服饰、动物的毛色、植物的颜色、物体的状态和建筑的风格;
主体运动:对主体运动状态的描述,包括静止和运动等,运动状态不宜过于复杂,符合6s视频内可以展现的画面即可,
场景: 场景是主体所处的环境,包括前景、背景等;
场景描述:对主体所处环境的细节描述。如都市环境、乡村风光、工业区等;
氛围:对预期视频画面的氛围描述。如喧嚣繁忙、悬疑惊悚、宁静舒适等;
8.3.2 图生视频
CogVideoX 可以将用户提供的静态图像转化为 6 秒的动态视频。为达到最佳效果,推荐上传比例为3:2的图片,并且文件格式为 PNG 或 JPEG,文件大小不超过5MB。提示词建议使用“主体(背景)+ 运动描述”的表达方式。
8.3.3 文生图片
CogView-3-Plus使用Transformer架构训练扩散模型,优化了效果并验证了参数量提升的效益。我们还构建了高质量图像微调数据集,使模型生成更符合指令且美学评分更高的图像,效果接近MJ-V6和FLUX等一流模型。
8.3.4 图片视频理解
GLM-4V-Plus 集图像理解与视频理解能力于一体的多模态模型。
8.4 增强检索
通过在大语言模型生成答案之前,先从知识库中检索相关知识,然后将相关知识作为背景信息输入给大模型,有效地提升内容的准确性和相关性。
8.4.1 创建知识库
用于管理文件,支持上传多个文件,并通过关联知识库 ID 后进行调用。
= client.knowledge.create(
knowledgeDB =3,
embedding_id="default",
name="the default knowledge database"
description
)print(knowledgeDB.id)
1835987442205917184
8.4.2 请求知识库文件列表
# 请求知识库文件列表
= client.knowledge.document.list(
knowledge_files ="retrieval", #支持retrieval
purpose=knowledgeDB.id
knowledge_id
)print(knowledge_files)
DocumentPage(list=[DocumentData(id='1835992620149698560', custom_separator=['\n'], sentence_size=202, length=123750, word_num=1469, name='Kraken2.pdf', url='https://cdn-enterprise-document.bigmodel.cn/knowledge/93037CDE114D4C72A23FC15189EF8FBD.pdf?e=1727637428&token=YsX0TFbWddOwmx008e_eINoC4Oe-PFD_fGIbivRa:WTwlabzg5hvea03zmdUBsqKl5WU=', embedding_stat=1, failInfo=None, knowledge_type=1, parse_image=0), DocumentData(id='1835989396608970752', custom_separator=['\n'], sentence_size=202, length=123750, word_num=1469, name='Kraken2.pdf', url='https://cdn-enterprise-document.bigmodel.cn/knowledge/CBC4FE6CDC1D41B090CA8670F85CB092.pdf?e=1727637428&token=YsX0TFbWddOwmx008e_eINoC4Oe-PFD_fGIbivRa:6sCGlbkbuPA8uv0u9zws8Rd7618=', embedding_stat=1, failInfo=None, knowledge_type=1, parse_image=0)], object=None, total=2)
8.4.3 上传文件
支持将doc、docx、pdf、xlsx类型文件上传到知识库,支持自定义文件切片的大小和规则。文件大小不得超过 50 MB,总数为 100 个文件。
#| output: asis
= client.knowledge.document.create(
resp file=open("example/Kraken2.pdf", "rb"),
="retrieval",
purpose=knowledgeDB.id,
knowledge_id=202,
sentence_size=["\n"]
custom_separator
)
print(resp)
DocumentData(id='1835992620149698560', custom_separator=['\n'], sentence_size=202, length=123750, word_num=1469, name='Kraken2.pdf', url='https://cdn-enterprise-document.bigmodel.cn/knowledge/93037CDE114D4C72A23FC15189EF8FBD.pdf?e=1727637428&token=YsX0TFbWddOwmx008e_eINoC4Oe-PFD_fGIbivRa:WTwlabzg5hvea03zmdUBsqKl5WU=', embedding_stat=1, failInfo=None, knowledge_type=1, parse_image=0)
8.4.4 文件内容提取
文件内容提取仅适用于以 purpose="file-extract"
为目的上传的文件。
# 文件内容抽取
= client.files.content(file_id=knowledge_files.list[0].id)
file_content print(file_content)
8.4.5 检索知识库
= client.knowledge.query(
knowledge_list =1,
page=10,
size
) pprint(knowledge_list.model_dump())
{'list': [{'background': 'blue',
'bucket_id': None,
'customer_identifier': '',
'description': 'the default knowledge database',
'document_size': 2,
'embedding_id': 3,
'icon': 'question',
'id': '1835987442205917184',
'length': 247500,
'name': 'default',
'word_num': 2938}],
'object': None,
'total': 1}
创建知识库后,您将获得一个知识库ID。调用模型服务时,传入知识库ID,使大模型能获取相关内容以响应用户查询。
8.4.6 调用知识库
创建知识库后,您将获得一个知识库ID。调用模型服务时,传入知识库ID,使大模型能获取相关内容以响应用户查询。
= "Kraken2的安装方法"
question = "默认知识库"
knowledge = client.chat.completions.create(
response ="GLM-4-Flash", # 填写需要调用的模型名称
model=[
messages"role": "user", "content": question},
{
],=[
tools
{"type": "retrieval",
"retrieval": {
"knowledge_id": knowledgeDB.id,
"prompt_template": "从文档“{{knowledge}}” 中找问题“{{question}}”的答案,找到答案就仅使用文档语句回答问题,找不到答案就用自身知识回答并且告诉用户该信息不是来自文档。\n不要复述问题,直接开始回答。"
}
}
],=False,
stream
)
0].message.content) Markdown(response.choices[
Kraken2是一款广泛使用的基因比对软件,适用于将序列与参考基因组进行比对。以下是安装Kraken2的步骤,以Linux操作系统为例:
8.4.7 1. 安装依赖
Kraken2需要一些依赖库,首先需要安装这些依赖。
# 安装依赖
sudo apt-get update
sudo apt-get install -y automake autoconf libtool libboost-all-dev zlib1g-dev libssl-dev libncurses5-dev libbz2-dev
8.4.8 2. 下载Kraken2
从Kraken2的GitHub页面下载最新版本的源代码。
# 下载源代码
git clone https://github.com/DerrickWood/Kraken2.git
cd Kraken2
8.4.9 3. 编译安装
在下载的源代码目录中,运行以下命令进行编译和安装。
# 配置编译
./configure --prefix=/usr/local/kraaken2
# 编译
make
# 安装
sudo make install
8.4.10 4. 检查安装
确保Kraken2已经正确安装,可以通过以下命令检查。
# 检查Kraken2版本
kraken2 --version
8.4.11 5. 使用Kraken2
安装完成后,您可以使用Kraken2进行基因比对。以下是一个简单的示例:
# 使用Kraken2进行比对
kraken2 -t 4 -o output kraken_db/kraaken_db.kdb reads.fna
这里,-t 4
表示使用4个线程,-o output
指定输出文件的目录,kraken_db/kraaken_db.kdb
是Kraken2的参考数据库,reads.fna
是您要比对的序列文件。
8.4.12 注意事项
- 根据您的系统环境,可能需要调整依赖安装命令。
- 如果您需要将Kraken2安装到其他路径,可以在
configure
命令中指定--prefix
。
希望这些步骤能够帮助您成功安装和使用Kraken2!
8.4.13 删除文件
= client.files.delete(
result ="文件id" #支持retrieval、batch、fine-tune、file-extract文件
file_id )
8.4.14 删除知识库
使用下面的语句删除知识库。
= client.knowledge.delete(
result ="xxxxxxxxxxxx"
knowledge_id )
8.4.15 用量查询
= client.knowledge.used()
result = 72) pprint(result.model_dump_json(), width
‘{“used”:{“word_num”:2938,“length”:247500},“total”:{“word_num”:5000000,“length”:1073741824}}’
8.5 基于文件的问答
GLM-4-Long
最长支持200万字符上下文,结合文件问答功能。
from pathlib import Path
import json
# 上传并提取文本内容
= client.files.create(file=Path("example/Kraken2.pdf"), purpose="file-extract")
file_01 = json.loads(client.files.content(file_01.id).content)["content"]
content_01
# 上传并提取文本内容
= client.files.create(file=Path("example/gaoch-cv.md"), purpose="file-extract")
file_02 = json.loads(client.files.content(file_02.id).content)["content"]
content_02
# 生成请求消息,将不同文件的内容放入消息中
= (
message_content "请对以下论文进行分析,并且生成一份论文综述:\n\n"
"第一篇论文内容如下:\n"
f"{content_01}\n\n"
"第二篇论文内容如下:\n"
f"{content_02}"
)
= client.chat.completions.create(
response ="glm-4-long",
model=[
messages"role": "user", "content": message_content}
{
],
)
print(response.choices[0].message)
8.5.1 删除文件
请求文件列表,然后利用 file_id
删除文件。
# 请求文件列表
= client.files.list(
result ="file-extract", #支持batch、file-extract、fine-tune
purpose
) pprint(result)
= client.files.delete(
result ="文件id" #支持retrieval、batch、fine-tune、file-extract文件
file_id )