北京时间2024年1月16日,智谱AI正式推出GLM-4新一代基座大模型,整体性能相比GLM3全面提升60%,根据实际测试,GLM-4在以中文为主的应用场景中实际性能逼近GPT-4的95%,在一些中文对齐的测试中,甚至超过GPT-4表现,逼近GPT-4-turbo模型。 此外,GLM-4支持128K对话上下文,并且支持更强的多模态功能、支持更快推理速度,更多并发,大大降低推理成本;同时GLM-4增强了智能体(Agent)和Retrieval(检索)功能。并且,经过一段时间的实际使用发现,GLM-4相比ChatGLM3有明显进步,这也进一步增加了我们对国产大模型未来发展的期待。
以下是一些关键概念的介绍
以下为从官方文档中截取的部分适用场景:
语言模型:
多模态模型:
向量模型:
其他模型:
pip install --upgrade zhipuai
from zhipuai import ZhipuAI
client = ZhipuAI(api_key="") # 请填写您自己的APIKey
response = client.chat.completions.create(
model="glm-4", # 请填写您要调用的模型名称
messages=[
{"role": "user", "content": "作为一名营销专家,请为我的产品创作一个吸引人的口号"},
{"role": "assistant", "content": "当然,要创作一个吸引人的口号,请告诉我一些关于您产品的信息"},
{"role": "user", "content": "智谱AI开放平台"},
{"role": "assistant", "content": "点燃未来,智谱AI绘制无限,让创新触手可及!"},
{"role": "user", "content": "创作一个更精准且吸引人的口号"}
],
)
print(response.choices[0].message)
输出:
content='"激活想象,智谱AI平台,让每一刻都是创新的起点!"' role='assistant' tool_calls=None
常用参数:
参数列表如下:
异步调用: 除了调用的函数不同,请求参数与同步API调用是相同的。
from zhipuai import ZhipuAI
client = ZhipuAI(api_key="") # 请填写您自己的APIKey
response = client.chat.asyncCompletions.create(
model="glm-4", # 请填写您要调用的模型名称
messages=[
{
"role": "user",
"content": "
作为童话之王,请以始终保持一颗善良的心为主题,写一篇简短的童话故事。故事应能激发孩子们的学习兴趣和想象力,同时帮助他们更好地理解和接受故事中蕴含的道德和价值观。"
}
],
)
print(response)
import time
from zhipuai import ZhipuAI
client = ZhipuAI(api_key="") # 请填写您自己的APIKey
response = client.chat.asyncCompletions.create(
model="glm-4", # 请填写您要调用的模型名称
messages=[
{
"role": "user",
"content": "
作为童话之王,请以始终保持一颗善良的心为主题,写一篇简短的童话故事。故事应能激发孩子们的学习兴趣和想象力,同时帮助他们更好地理解和接受故事中蕴含的道德和价值观。"
}
],
)
task_id = response.id
task_status = ''
get_cnt = 0
while 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_status
time.sleep(2)
get_cnt += 1
通用搜索:网络搜索功能默认为关闭状态(False)。当启用搜索(设置为 True)时,系统会自动判断是否需要进行网络检索,并调用搜索引擎获取相关信息。
from zhipuai import ZhipuAI
client = ZhipuAI(api_key="您的APIKey")
tools = [{
"type": "web_search",
"web_search": {
"enable": True #默认为关闭状态(False) 禁用:False,启用:True。
# "search_query": "自定义搜索的关键词"
# "search_result": True
}
}]
messages = [{
"role": "user",
"content": "中国 2024 年一季度的GDP是多少 "
}]
response = client.chat.completions.create(
model="glm-4",
messages=messages,
tools=tools
)
print(response.choices[0].message)
输出:
content='根据您提供的参考信息,中国2024年一季度的GDP为296299亿元人民币。这个数据是根据国家统计局的初步核算,按不变价格计算得出的同比增长率5.3%。' role='assistant' tool_calls=None
Tools字段传入可以调用的函数列表:
备注:
from zhipuai import ZhipuAI
client = ZhipuAI(api_key="")
messages = []
tools = [
{
"type": "function",
"function": {
"name": "get_flight_number",
"description": "根据始发地、目的地和日期,查询对应日期的航班号",
"parameters": {
"type": "object",
"properties": {
"departure": {
"description": "出发地",
"type": "string"
},
"destination": {
"description": "目的地",
"type": "string"
},
"date": {
"description": "日期",
"type": "string",
}
},
"required": [ "departure", "destination", "date" ]
},
}
},
{
"type": "function",
"function": {
"name": "get_ticket_price",
"description": "查询某航班在某日的票价",
"parameters": {
"type": "object",
"properties": {
"flight_number": {
"description": "航班号",
"type": "string"
},
"date": {
"description": "日期",
"type": "string",
}
},
"required": [ "flight_number", "date"]
},
}
},
]
messages = []
# messages.append({"role": "system", "content": "不要假设或猜测传入函数的参数值。如果用户的描述不明确,请要求用户提供必要信息"})
messages.append({"role": "user", "content": "帮我查询从2024年1月20日,从北京出发前往上海的航班"})
response = client.chat.completions.create(
model="glm-4", # 填写需要调用的模型名称
messages=messages,
tools=tools,
# tool_choice={"type": "function", "function": {"name": "get_ticket_price"}},
)
print(response.choices[0].message)
messages.append(response.choices[0].message.model_dump())
输出: 根据以下输出,我们可以看到模型成功调用了函数,并且传入了参数。
content=None role='assistant' tool_calls=CompletionMessageToolCall(id='call_9106867304118456432', function=Function(arguments='{"date":"2024-01-20","departure":"北京","destination":"上海"}', name='get_flight_number'), type='function')
函数实现:
def get_flight_number(date:str , departure:str , destination:str):
flight_number = {
"北京":{
"上海" : "1234",
"广州" : "8321",
},
"上海":{
"北京" : "1233",
"广州" : "8123",
}
}
return { "flight_number":flight_number[departure][destination] }
def get_ticket_price(date:str , flight_number:str):
return {"ticket_price": "1000"}
def parse_function_call(model_response,messages):
# 处理函数调用结果,根据模型返回参数,调用对应的函数。
# 调用函数返回结果后构造tool message,再次调用模型,将函数结果输入模型
# 模型会将函数调用结果以自然语言格式返回给用户。
if model_response.choices[0].message.tool_calls:
tool_call = model_response.choices[0].message.tool_calls[0]
args = tool_call.function.arguments
function_result = {}
if tool_call.function.name == "get_flight_number":
function_result = get_flight_number(**json.loads(args))
if tool_call.function.name == "get_ticket_price":
function_result = get_ticket_price(**json.loads(args))
messages.append({
"role": "tool",
"content": f"{json.dumps(function_result)}",
"tool_call_id":tool_call.id
})
response = client.chat.completions.create(
model="glm-4", # 填写需要调用的模型名称
messages=messages,
tools=tools,
)
print(response.choices[0].message)
messages.append(response.choices[0].message.model_dump())
from zhipuai import ZhipuAI
client = ZhipuAI(api_key="") # 请填写您自己的APIKey
result = client.knowledge.create(
embedding_id=3,
name="knowledge name",
description="knowledge description"
)
print(result.id)
单文件问答示例:
from zhipuai import ZhipuAI
from pathlib import Path
import json
# 填写您自己的APIKey
client = ZhipuAI(api_key="your_api_key_here")
# 格式限制:.PDF .DOCX .DOC .XLS .XLSX .PPT .PPTX .PNG .JPG .JPEG .CSV .PY .TXT .MD .BMP .GIF
# 大小:单个文件50M、总数限制为100个文件
file_object = client.files.create(file=Path("aaa.pdf"), purpose="file-extract")
# 获取文本内容
file_content = json.loads(client.files.content(file_id=file_object.id).content)["content"]
# 生成请求消息
message_content = f"请对\n{file_content}\n的内容进行分析,并撰写一份论文摘要。"
response = client.chat.completions.create(
model="glm-4-long",
messages=[
{"role": "user", "content": message_content}
],
)
print(response.choices[0].message)
多文件问答示例
from zhipuai import ZhipuAI
from pathlib import Path
import json
# 填写您自己的APIKey
client = ZhipuAI(api_key="your_api_key_here")
# 上传并提取文本内容
file_01 = client.files.create(file=Path("aaa.pdf"), purpose="file-extract")
content_01 = json.loads(client.files.content(file_01.id).content)["content"]
# 上传并提取文本内容
file_02 = client.files.create(file=Path("bbb.pdf"), purpose="file-extract")
content_02 = json.loads(client.files.content(file_02.id).content)["content"]
# 生成请求消息,将不同文件的内容放入消息中
message_content = (
"请对以下论文进行分析,并且生成一份论文综述:\n\n"
"第一篇论文内容如下:\n"
f"{content_01}\n\n"
"第二篇论文内容如下:\n"
f"{content_02}"
)
response = client.chat.completions.create(
model="glm-4-long",
messages=[
{"role": "user", "content": message_content}
],
)
print(response.choices[0].message)
删除文件: 每个用户最多可以上传100个文件,建议在提取数据后删除文件,并将文件抽取内容存储到本地,避免重复上传。
from zhipuai import ZhipuAI
client = ZhipuAI(api_key="") # 请填写您自己的APIKey
result = client.files.delete(
file_id="文件id" #支持retrieval、batch、fine-tune、file-extract文件
)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。