首先我们要明白api是什么东西,这里我们可以去看一下百度上官方的解释,当然,其实不看也行,我们只要能用即可。api其实就是一个封装的函数,比如你可以直接去gpt网站用,也可以利用api写代码用,其实就是一把钥匙而已。
本文主要基于智谱开放平台的开源文档来向大家进行介绍,国内的毕竟还是比较容易弄一些,也不需要做别的什么操作,只需要去智谱清言官网注册账号即可。注册账号会赠送100万个tokens,足够我们进行调用api使用大模型的练习了。上篇文章介绍的只是在官网上输入prompt,获得我们想要的东西,这篇呢主要展示如何调用api结合prompt的使用,返回我们想要的结果。当然,这也知识基础,后续我们可以结合比如for循环实现多次调用api返回大量内容亦或者实现一些大模型与大模型之间的交互调用实现对话等等。
开放平台:智谱AI开放平台 (bigmodel.cn)注册完即可使用。
进入网站并注册完成之后,点击开发资源即可看到相关开源文档,在控制台点击账户管理,即可进入如下界面,点击apikey即可看到专属于自己的api,后续的api就需要设置为这里你的api。
调用方式包括两种,SDK调用和HTTP调用,SDK就是需要去下载库,http呢就是用url进行调用即可。
(一)SDK调用
首先,第一步,pip install zhipuai,等待下载完成即可,然后按照官网跑一跑即可,这个比较简单(这部分代码我就不粘在文章后面了)。
(二)HTTP调用
即使用网址调用大模型。支持标准的http调用,请求头包含的内容有
Content-Type
: application/json
Authorization
: 鉴权token
content-type这个字段很好弄,Authorization直接放自己的api还不行,在用之前需要先用自己的api,跑一个接口鉴权的代码,获得鉴权token,才可以用http调用。
代码如下(官网开源文档也有,这里只粘上我的图片比较容易看一些,代码我放在文章最后):
输出的token_ability就是我们可以用的了。
下面直接开始使用!我们直接用最新的(glm-4),表格里的请求地址看到了没,可以拿来用了。
再用之前可以在往下翻翻,看一看glm-4涉及到的参数有哪些,我们可以做一些设置。非必须要填的参数,当然不设置也行,毕竟只是做个练习。
当然,model和messages是必须的,总不能不告诉别人你用啥模型和发送啥信息吧。另外可以加上temperature和top_p这两个参数,一般调模型的时候可以试着对其进行调整,我们这里都调整为0.9进行练习。
首先需要构建请求的headers。
框框这里放上刚刚生成的鉴权token
url就很简单了,表格里有。
然后,定义我们的payload(传输的信息,具体看模型包含哪些参数,你可以进行设置,必要的一定要设置好,非必须的当然可以默认),这里我们的message里面放的很简单,就是对大模型说了句你好。文章后面会进行扩充。
然后,我们可以进行请求,调用glm-4大模型,获取它返回的内容。
调用成功!成功获取了glm-4的返回结果。
这里由于返回的response是json格式,所以我们需要用到json.loads() 函数,将其转换为可以在Python中操作的格式。这在处理API响应时特别有用,因为许多API返回的数据是JSON格式的。
我们只需要result部分就可以了,因为我们可以打印一下response.text看一下具体返回的内容:
显然,我们这里练习就需要它的文本回复就行了,所以转换完格式后,我们直接将content部分提取出来,放在result变量当中,就是我们想要的内容。
上述就是两种调用方式的展示,其实平时简单的调用选择SDK即可,但是想要更复杂或者更大量的,HTTP就用的比较多了。
下面再展示一个简单的例子,也就是我们上文的提取文本中的关键信息,prompt比较长的话我们可以单独拎出来到一个变量当中,如下所示:
prompt="""
根据给出的文本内容按照以下步骤实体和三元组抽取,并严格按照3要求的格式要求输出抽取结果,不要输出多余内容,不要输出多于内容;
1.文本内容为{【摘要】 肺癌在中国的发病率和死亡率均位于恶性肿瘤中的第 1位。为进一步规范中国肺癌的防治措施、提高肺癌的诊疗水平、改善患者的预后、为各级临床医务人员提供专业的循证医学建议,中华医学会肿瘤学分会组织呼吸内科、肿瘤内科、胸外科、放疗科、影像科和病理科专家,以国家批准的应用指征为原则,以国内实际可应用的药品为基础,结合国际指南推荐意见和中国临床实践现状,整合近年来肺癌筛查、诊断、病理、基因检测、免疫分子标志物检测和治疗手段以及随访等诊治方面的最新循证医学证据,经过共识会议制定了中华医学会肿瘤学分会肺癌临床诊疗指南(2022 版),旨在为各级临床医师、影像、检验、康复等专业人员提供合理的推荐建议。【关键词】 肺肿瘤; 诊断; 治疗; 指南原发性支气管肺癌简称肺癌,是我国及世界各国发病率和死亡率较高的恶性肿瘤之一}
2.设定待抽取的实体类型有: 疾病、症状、科室、检查指标、检查指标结果、检查项目;
3.从上述文本中按照设定的实体类型信息抽取出对应的实体,实体抽取结果的输出格式:
{"entity":
{ "disease":[],
"symptom":[],
"drug ":[],
"department":[],
"index":[],
"result":[],
"check":[] } }
4.请严格按照步骤3中的要求输出,且只输出要求的内容,不要输出其他多余内容。
"""
这就提取到了我们要的信息了。当然,之后你可以把result写入某个excel文件进行保存,那这么说结合文件读取操作我们是不是可以从把一列或者说很多个工作表中需要提取的关键信息都提取出来呢,当然是可行的,只是加上一点文件处理和文本处理操作罢了,这里就不再做演示了。
HTTP调用部分的代码如下:
import time
import jwt
def generate_token(apikey: str, exp_seconds: int):
try:
id, secret = apikey.split(".")
except Exception as e:
raise Exception("invalid apikey", e)
payload = {
"api_key": id,
"exp": int(round(time.time() * 1000)) + exp_seconds * 1000,
"timestamp": int(round(time.time() * 1000)),
}
return jwt.encode(
payload,
secret,
algorithm="HS256",
headers={"alg": "HS256", "sign_type": "SIGN"},
)
if __name__ == "__main__":
# 为了拿到token鉴权
apikey = "这里放你的api"
exp_seconds = 100000
token_ability = generate_token(apikey,exp_seconds)
print(token_ability)
url="https://open.bigmodel.cn/api/paas/v4/chat/completions"
#要请求的内容
headers={
"Content-Type":"application/json",
"Authorization":"Bearer 放你的鉴权token"
}
payload = {
"model":"glm-4",
"messages":[{"role": "user","content": "你好"}],
"top_p":0.9,
"temperature":0.9
}
response = requests.post(url,json=payload,headers=headers)
# response.text
data = json.loads(response.text)
result=data['choices'][0]['message']['content']
print(result)
url="https://open.bigmodel.cn/api/paas/v4/chat/completions"
#要请求的内容
headers={
"Content-Type":"application/json",
"Authorization":"Bearer 放你的鉴权token"
}
payload = {
"model":"glm-4",
"messages":[{"role": "user","content": ""}],
"top_p":0.9,
"temperature":0.9
}
prompt="""
根据给出的文本内容按照以下步骤实体和三元组抽取,并严格按照3要求的格式要求输出抽取结果,不要输出多余内容,不要输出多于内容;
1.文本内容为{【摘要】 肺癌在中国的发病率和死亡率均位于恶性肿瘤中的第 1位。为进一步规范中国肺癌的防治措施、提高肺癌的诊疗水平、改善患者的预后、为各级临床医务人员提供专业的循证医学建议,中华医学会肿瘤学分会组织呼吸内科、肿瘤内科、胸外科、放疗科、影像科和病理科专家,以国家批准的应用指征为原则,以国内实际可应用的药品为基础,结合国际指南推荐意见和中国临床实践现状,整合近年来肺癌筛查、诊断、病理、基因检测、免疫分子标志物检测和治疗手段以及随访等诊治方面的最新循证医学证据,经过共识会议制定了中华医学会肿瘤学分会肺癌临床诊疗指南(2022 版),旨在为各级临床医师、影像、检验、康复等专业人员提供合理的推荐建议。【关键词】 肺肿瘤; 诊断; 治疗; 指南原发性支气管肺癌简称肺癌,是我国及世界各国发病率和死亡率较高的恶性肿瘤之一}
2.设定待抽取的实体类型有: 疾病、症状、科室、检查指标、检查指标结果、检查项目;
3.从上述文本中按照设定的实体类型信息抽取出对应的实体,实体抽取结果的输出格式:
{"entity":
{ "disease":[],
"symptom":[],
"drug ":[],
"department":[],
"index":[],
"result":[],
"check":[] } }
4.请严格按照步骤3中的要求输出,且只输出要求的内容,不要输出其他多余内容。
"""
payload['messages'][0]['content']=prompt
response = requests.post(url,json=payload,headers=headers)
# response.text
data = json.loads(response.text)
result=data['choices'][0]['message']['content']
print(result)