头图

在现在这个快节奏的时代,大家碎片化阅读的场景越来越普遍了。比如上下班乘坐地铁时,等待上车的间隙,也习惯掏出手机刷一刷新闻。

登录百度智能云的控制台,创建一个新的应用,把生成的 API Key 和 API Secret key 抄下来,因为后续换取 access token,需要用这两个字段去交换。

为了使用 AIGC 的思路来对新闻进行归纳,可以使用百度大模型 ERNIE-3.5-8K:

我的应用创建好之后,这个模型就自动配置到应用上了,如下图所示:

然后通过在线调试网页,可以简单熟悉一下这个模型通过 API 的消费方式。在右边随便输入一些文字,左边就能实时看到如何通过代码的方式,去组装这些输入,并发送请求的编写方法了,比较方便。

比如上图我们通过 JSON 格式,发送给 AIGC service provider 的 HTTP 请求 payload,格式如下:

{
    "messages": [
        {
            "role": "user",
            "content": "请介绍一下你自己"
        }
    ],
    "disable_search": false,
    "enable_citation": false
}

首先编写一段 Python 代码,根据 application 的 Client id 和 client secret,换取 access token.

因为是测试代码,我就直接将这两个 credentials,硬编码到代码里了。

import requests
import json

def main():
        
    url = "https://aip.baidubce.com/oauth/2.0/token?client_id=<clientID>&client_secret=<clientSecert>&grant_type=client_credentials"
    
    payload = json.dumps("")
    headers = {
        'Content-Type': 'application/json',
        'Accept': 'application/json'
    }
    
    response = requests.request("POST", url, headers=headers, data=payload)
    
    print(response.text)
    

if __name__ == '__main__':
    main()

执行上述 python 代码后,我们将返回的 response 里包含的 access token 记录下来:

access token 默认的有效期是 30 天。

然后我们使用这个 access token,去消费百度智能云的 chat API.

我本人的工作习惯,一般是先在 Postman 里跑通,然后再编写代码。

Postman 的 API url:https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token=xxx

HTTP 方法为 POST,payload 类型设置为 raw,格式从下拉菜单里选择成 JSON

json 内容:

{
    "messages": [
        {
            "role": "user",
            "content": "请你扮演一个资深的新闻记者,请你根据下面这段新闻的正文,提取出一篇300字左右的内容摘要:<这里是消息正文>"
        }
    ]
}

可以看到,在 JSON payload 的 messages 字段里,我硬编码了一个 Prompt:

请你扮演一个资深的新闻记者,请你根据下面这段新闻的正文,提取出一篇300字左右的内容摘要:<这里是消息正文>

点击 send 之后,从 Postman 里收到 HTTP 200 OK 的 status code,并且在 response 的 result 字段里,看到了 AIGC 为我们归纳好的新闻简报。

至此一个完整的流程在 Postman 里就跑完了。剩下的任务就简单了,将 Postman 里的操作翻译成 Python 代码即可。

代码如下:

import requests
import json

# API的URL,已包含access_token
url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token=<token>"

# 准备发送的数据
data = {
    "messages": [
        {
            "role": "user",
            "content": "请你扮演一个资深的新闻记者,请你根据下面这段新闻的正文,提取出一篇300字左右的内容摘要:a"
        }
    ]
}

# 将字典转换为JSON格式
json_data = json.dumps(data)

# 设置请求头
headers = {
    'Content-Type': 'application/json'
}

# 发送POST请求
response = requests.post(url, data=json_data, headers=headers)

# 检查请求是否成功
if response.status_code == 200:
    # 解析响应内容
    response_data = response.json()
    # 打印结果字段
    if 'result' in response_data:
        print(response_data['result'])
    else:
        print("No 'result' field in response")
else:
    print(f"Failed to get response, status code: {response.status_code}")

这段代码完成了以下步骤:

  • 定义了API的URL,包括已经包含的access_token。
  • 创建了一个字典 data 包含请求需要的payload。
  • 将字典转换为JSON字符串。
  • 设置了HTTP头部,指明传输的数据类型为JSON。
  • 使用requests.post方法发送请求。
  • 检查响应的状态码,并从JSON响应中解析并打印出 result 字段。

确保在执行此脚本前,网络可以正常访问 API 地址,并且 access_token 有效。

在控制台上执行上面的代码,成功得到新闻的摘要输出:

当然,在实际使用过程中,我们也会遇到 Access Token 过期的情况。在这种情况下,需要另起一个 HTTP 请求,先去刷新 Access Token:

import requests
import json

def get_new_access_token():
    # 假设用 client_id 和 client_secret 来获取新的 access token
    url = "https://aip.baidubce.com/oauth/2.0/token"
    payload = {
        'grant_type': 'client_credentials',
        'client_id': 'YOUR_CLIENT_ID',  # 替换为实际的 client_id
        'client_secret': 'YOUR_CLIENT_SECRET'  # 替换为实际的 client_secret
    }
    response = requests.post(url, data=payload)
    if response.status_code == 200:
        token_data = response.json()
        return token_data['access_token']
    else:
        raise Exception("Failed to retrieve new access token")

def send_post_request(access_token):
    url = f"https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token={access_token}"
    data = {
        "messages": [
            {
                "role": "user",
                "content": "请你扮演一个资深的新闻记者,请你根据下面这段新闻的正文,提取出一篇300字左右的内容摘要"
            }
        ]
    }
    json_data = json.dumps(data)
    headers = {'Content-Type': 'application/json'}
    response = requests.post(url, data=json_data, headers=headers)
    return response

# 尝试发送请求
response = send_post_request(access_token)

# 检查是否因为 Token 过期而失败
if response.status_code == 401:  # 假设401代表Token过期
    access_token = get_new_access_token()  # 获取新的Token
    response = send_post_request(access_token)  # 用新Token重新发送请求

# 处理响应
if response.status_code == 200:
    response_data = response.json()
    if 'result' in response_data:
        print(response_data['result'])
    else:
        print("No 'result' field in response")
else:
    print(f"Failed to get response, status code: {response.status_code}")

在上面这段脚本中,我们首先尝试发送请求。如果响应状态码为401,这是因为 Access Token 过期,然后调用 get_new_access_token 函数获取新的 Access Token,之后重新发送请求。这个方法假设大家有适当的 API 信息和权限来请求新的 Access Token。

确保在实际部署这段代码之前,我们需要替换 YOUR_CLIENT_IDYOUR_CLIENT_SECRET 为实际 API credential.

当然,使用 AIGC 进行新闻摘要归纳的 API 有很多,大家在开发过程中可以根据自己的实际情况进行灵活地选择。


注销
1k 声望1.6k 粉丝

invalid