首页 > 编程语言 >python调用扣子coze智能体示例

python调用扣子coze智能体示例

时间:2024-11-14 18:18:41浏览次数:1  
标签:示例 python jwt json access headers token coze id

"""
版本号:1.0
日期:2024/11/14
描述:
"""
import uuid

import jwt
import time
import requests

# OAuth应用的相关信息,需从扣子平台获取并替换
APP_ID = ""  # auth应用id
PUBLIC_KEY_FINGERPRINT = ""  # 公钥
PRIVATE_KEY_PATH = "private_key.pem" # 私钥文件路径

# 扣子API的Endpoint
API_ENDPOINT = "api.coze.cn"


def generate_jwt():
    """
    生成JWT
    """
    # 读取私钥文件
    with open(PRIVATE_KEY_PATH, 'r') as f:
        private_key = f.read()

    # JWT头部信息
    header = {
        "alg": "RS256",
        "typ": "JWT",
        "kid": PUBLIC_KEY_FINGERPRINT
    }

    # JWT负载信息
    payload = {
        "iss": APP_ID,
        "aud": API_ENDPOINT,
        "iat": int(time.time()),
        "exp": int(time.time()) + 86400,  # 这里设置JWT过期时间为1小时,可根据需求调整
        "jti": uuid.uuid4().hex  # 需替换为真正的随机字符串,每次生成JWT时应不同
    }

    # 生成JWT
    jwt_token = jwt.encode(payload, private_key, algorithm='RS256', headers=header)
    return jwt_token


def get_access_token(jwt_token):
    """
    使用JWT获取访问令牌
    """
    url = "https://api.coze.cn/api/permission/oauth2/token"
    headers = {
        "Content-Type": "application/json",
        "Authorization": f"Bearer {jwt_token}"
    }
    data = {
        "grant_type": "urn:ietf:params:oauth:grant-type:jwt-bearer",
        "duration_seconds": 86399  # 可根据需求调整有效期,最大为86399秒(24小时)
    }

    response = requests.post(url, headers=headers, json=data)
    if response.status_code == 200:
        return response.json()["access_token"]
    else:
        print(f"获取访问令牌失败,错误码: {response.status_code},错误信息: {response.text}")
        return None


def get_conversion_id(access_token):
    create_url = ' https://api.coze.cn/v1/conversation/create'
    headers = {
        'Authorization': f'Bearer {access_token}',
        'Content-Type': 'application/json'
    }

    res = requests.post(create_url, headers=headers)
    return res.json()['data']['id']


def chat_with_bot(access_token, conversation_id):
    url = 'https://api.coze.cn/v3/chat?conversation_id='+conversation_id
    headers = {
        'Authorization': f'Bearer {access_token}',
        'Content-Type': 'application/json'
    }
    data = {
        "bot_id": "",  # 智能体id,就是智能体详情url后面的那个id
        "user_id": '1234566758',
        "stream": False,
        "auto_save_history": True,
        "additional_messages": [
            {"role": "user", "content": "你是", "content_type": "text"}
        ]
    }
    res = requests.post(url, headers=headers, json=data)
    print(res.json())

    return res.json()['data']['id']


def get_chat_content(i, c, a):
    url = 'https://api.coze.cn/v3/chat/retrieve'
    headers = {
        'Authorization': f'Bearer {a}',
        'Content-Type': 'application/json'
    }
    data = {
        "conversation_id": i,
        "chat_id": c
    }
    res = requests.get(url, headers=headers, json=data)
    print(res.json())




if __name__ == "__main__":
    jwt_token = generate_jwt()
    print(f"生成的JWT: {jwt_token}")
    access_token = get_access_token(jwt_token)
    if access_token:
        print(f"获取的访问令牌: {access_token}")

    # access_token = 'czs_85DxsJ631VZ7owpzB2ucDmo0iiT0cs3UifDhuvD3yRUEhaDH4GU2pbvWXY4aiNwm'

    conversion_id = get_conversion_id(access_token)

    chat_id = chat_with_bot(access_token, conversion_id)
    time.sleep(1)
    get_chat_content(conversion_id, chat_id, access_token)

 

标签:示例,python,jwt,json,access,headers,token,coze,id
From: https://www.cnblogs.com/air/p/18546548

相关文章

  • <Project-23 Navigator Portal> Python flask web 网站导航应用 可编辑界面:添加图片、UR
    目的:浏览器的地址簿太厚,如下图:开始,想给每个Web应用加icon来提高辨识度,发现很麻烦:createimage,resize,还要挑来挑去,重复性地添加代码。再看着这些密密麻麻的含有重复与有规则的字符,真刺眼!做这个PortalWeb应用来进行网站应用导航,docker部署后,占用端口:9999,可以在ap......
  • 第八课 Python自动化之selenium
    python+seleniumselenium是一个第三方库,python有很多库;1、什么是ui自动化?通过模拟手工操作用户ui页面的方式,用代码去实现自动化操作和验证的行为。2、ui自动化的优点?(1)解决重复性的功能测试和验证(2)减少测试人员在回归测试时用例漏测和验证点的漏测(3)减少冒烟测试,回归测试的......
  • Python __dict__属性:查看对象内部所有属性名和属性值组成的字典
    在Python中,每个对象都有一个__dict__属性,这个属性是一个字典,用于存储对象的属性和对应的值。对于自定义的类实例和大多数内置对象类型,你都可以通过访问__dict__属性来查看对象内部的所有属性名和属性值。以下是一些示例,展示了如何使用__dict__属性:示例1:自定义类实例class......
  • 23.Python基础篇-模块和包
    模块(Module)模块的定义:模块是包含Python代码的.py文件,可包含变量、函数、类等代码单元。每个Python文件本质上就是一个模块。两种使用方式import与from...import...importmath#导入整个模块frommathimportpi,sqrt#导入模块中的特......
  • python——多线程、多进程接口测试multiprocessing
    一、线程、进程的区别https://www.zhihu.com/question/25532384二、实际使用场景登录3个用户,然后用这3个用户的session,进行10个进程,或者10个线程的操作(因为登录后没有退出登录,也没有被其他地方登录挤掉账号,所以session在一段时间内有效。且当前系统允许使用同一个session进行多......
  • python自动化之selenium
    python+seleniumselenium是一个第三方库,python有很多库;1、什么是ui自动化?通过模拟手工操作用户ui页面的方式,用代码去实现自动化操作和验证的行为。2、ui自动化的优点?(1)解决重复性的功能测试和验证(2)减少测试人员在回归测试时用例漏测和验证点的漏测(3)减少冒烟测试,回归测试的......
  • Python入门
    一、入门1.1注释单行注释#多行注释'''多行注释'''"""多行注释"""指定文件的编码方式必须在第一行才有效#coding:gbk1.2格式化输出print中,使用%print("姓名:%s,年龄:%d,成绩:%.2f"%(name,age,sco......
  • CentOS7 重装yum和python
    卸载现有的Python和Yum1、删除现有Python#强制删除已安装程序及其关联rpm-qa|greppython|xargsrpm-ev--allmatches--nodeps#删除所有残余文件##xargs,允许你对输出执行其他某些命令whereispython|xargsrm-frv#验证删除,返回无结果whereispython2、删除现有的yum......
  • Python实现批量提取Word文档中的图片(支持.doc和.docx格式)
            在工作中,我们可能会遇到需要从多个Word文档中批量提取图片的需求。如果手动操作,效率低且容易出错。因此,利用Python自动化批量提取图片是一个不错的选择。本篇文章将详细介绍如何使用Python来实现从.doc和.docx格式的Word文档中批量提取图片并保存......
  • DL00337-基于yolov11的阿尔兹海默症检测诊断含数据集python
    阿尔兹海默症是一种渐进性的神经退行性疾病,通常通过认知障碍、记忆丧失、语言障碍等症状表现出来。早期诊断是控制疾病发展的关键,但现有的诊断方法如临床评估、神经影像检查(CT、MRI等)通常具有一定的局限性。YOLOv11能够帮助提取医学影像中的有价值特征,进而辅助阿尔兹海默症的诊......