在现在这个快节奏的时代,大家碎片化阅读的场景越来越普遍了。比如上下班乘坐地铁时,等待上车的间隙,也习惯掏出手机刷一刷新闻。
登录百度智能云的控制台,创建一个新的应用,把生成的 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_ID
和 YOUR_CLIENT_SECRET
为实际 API credential.
当然,使用 AIGC 进行新闻摘要归纳的 API 有很多,大家在开发过程中可以根据自己的实际情况进行灵活地选择。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。