Python
概述
- 调用智谱清言智能体API返回结果
调用智谱清言智能体API返回结果
TIP
需要配置 API 密钥变量和 API 密钥,设置助手 ID ,设置输入文件路径与输出路径
api_key = ' '
api_secret = ' '
assistant_id = " "
input_txt_file = ' '
output_csv_file = ' '
python
# 导入requests库,用于发起网络请求
import requests
# 导入json库,用于处理json数据格式
import json
import csv
# 定义函数get_access_token,用于获取访问令牌
def get_access_token(api_key, api_secret):
# 请求的URL地址
url = "https://chatglm.cn/chatglm/assistant-api/v1/get_token"
# 请求的数据体,包含API密钥和密钥
data = {
"api_key": api_key,
"api_secret": api_secret
}
# 向服务器发送POST请求,并将结果存储在response变量中
response = requests.post(url, json=data)
# 解析服务器返回的JSON数据
token_info = response.json()
# 从解析后的数据中提取access_token并返回
return token_info['result']['access_token']
# 定义函数handle_response,用于处理服务器响应的数据
def handle_response(data_dict):
# 从数据字典中获取消息内容
message = data_dict.get("message")
# 如果消息内容存在
if len(message) > 0:
content = message.get("content")
# 如果内容存在
if len(content) > 0:
# 获取响应类型
response_type = content.get("type")
# 根据不同的响应类型处理并返回结果
if response_type == "text":
text = content.get("text", "No text provided")
return f"{text}"
elif response_type == "image":
images = content.get("image", [])
# 将图片URL合成一个字符串
image_urls = ", ".join(image.get("image_url") for image in images)
return f"{image_urls}"
elif response_type == "code":
return f"{content.get('code')}"
elif response_type == "execution_output":
return f"{content.get('content')}"
elif response_type == "system_error":
return f"{content.get('content')}"
elif response_type == "tool_calls":
return f"{data_dict['tool_calls']}"
elif response_type == "browser_result":
# 将内容转换为JSON对象
content = json.loads(content.get("content", "{}"))
# 返回浏览器结果的标题和URL
return f"Browser Result - Title: {content.get('title')} URL: {content.get('url')}"
# 定义函数send_message,用于向服务器发送消息并获取响应
def send_message(assistant_id, access_token, prompt, conversation_id=None, file_list=None, meta_data=None):
# 请求的URL地址
url = "https://chatglm.cn/chatglm/assistant-api/v1/stream"
# 设置请求头
headers = {
"Authorization": f"Bearer {access_token}", # 设置授权令牌
"Content-Type": "application/json" # 设置内容类型为JSON
}
# 请求的数据体,包含助手ID和提示信息
data = {
"assistant_id": assistant_id,
"prompt": prompt,
}
# 如果提供了会话ID、文件列表或元数据,添加到数据体中
if conversation_id:
data["conversation_id"] = conversation_id
if file_list:
data["file_list"] = file_list
if meta_data:
data["meta_data"] = meta_data
# 使用上下文管理器发送POST请求,并处理响应
with requests.post(url, json=data, headers=headers) as response:
# 如果状态码为200,表示请求成功
if response.status_code == 200:
# 遍历响应的行
for line in response.iter_lines():
# 如果行包含数据
if line:
# 解码行数据
decoded_line = line.decode('utf-8')
# 如果行数据以"data:"开头
if decoded_line.startswith('data:'):
# 解析JSON数据
data_dict = json.loads(decoded_line[5:])
# 处理并获取输出结果
output = handle_response(data_dict)
# 如果请求失败,返回失败信息和状态码
else:
return "Request failed", response.status_code
# 输出处理结果
print(output)
return output
def process_prompt_and_save_to_csv(input_txt_file, output_csv_file, assistant_id, access_token):
# 创建一个CSV文件用来保存结果
with open(output_csv_file, mode='w', newline='', encoding='gb18030') as csv_file:
# 定义CSV列名
fieldnames = ['prompt', 'response']
# 创建CSV写入器
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
# 写入列名作为CSV文件的头部
writer.writeheader()
# 打开包含prompt的txt文件
with open(input_txt_file, 'r', encoding='utf-8') as txt_file:
# 逐行读取prompt
for prompt in txt_file:
# 移除行尾的换行符
prompt = prompt.strip()
# 如果行不为空,则处理
if prompt:
# 调用之前定义的函数发送消息并获取响应
response = send_message(assistant_id, access_token, prompt)
# 写入原始prompt和获得的响应到CSV文件中
writer.writerow({'prompt': prompt, 'response': response})
# 设置API密钥变量和API密钥
api_key = ' '
api_secret = ' '
# 设置助手ID和访问令牌变量
assistant_id = " "
# 调用函数获取访问令牌
token = get_access_token(api_key, api_secret)
access_token = token
input_txt_file = './1.txt' # 存储prompt的txt文件
output_csv_file = './output_responses2.csv' # 存储结果的csv文件
# 调用函数处理数据并保存到CSV
process_prompt_and_save_to_csv(input_txt_file, output_csv_file, assistant_id, token)
# 设置提示信息
#prompt = "Meanest monster ? Lots Of Laugh . It does not support 4G+ and the screen broke on literally first fall from just a metre above the ground . Streaming and performance is highly dissatisfactory . The only positives i found was the battery life and camera . This was never expected from such a brand"
# 调用函数发送消息并获取结果
#result = send_message(assistant_id, access_token, prompt)
# 输出结果变量
#result