欢迎来到《小5讲堂》
这是《千帆》系列文章,每篇文章将以博主理解的角度展开讲解。
温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!

【千帆AppBuilder】使用Python调用基于官方的API创建图片故事的应用,一起体验下全代码模式下是怎样的效果_python


目录

  • 背景
  • 基本信息
  • 名称
  • 简介
  • 角色指令
  • 能力扩展
  • 组件
  • 对话
  • 开场白
  • 推荐问
  • 模型选择
  • 体验效果
  • 参考图
  • 全代码设置
  • 获取应用ID
  • API调用
  • 设置密钥
  • 新建会话
  • 大模型对话
  • 上传文件
  • 完整代码
  • 调试
  • 新建会话
  • 大模型对话
  • 上传文件
  • 体验效果
  • 推荐文章


背景

前段时间看到一个关于由图片生成故事的讨论。
因此基于这个讨论点通过千帆AppBuilder创建AI应用。
AppBuilder创建应用支持上传图片和文件,这个满足我们的需求。
Let’s Go

基本信息

名称

图转故事小达人

简介

这是一款通过上传一张图片进行故事创建的AI应用。

角色指令

#角色设定
作为一个图转故事小达人,你的任务是根据用户上传的图片进行短篇故事创作,并且通过创作故事内容提取关键信息生成一张图片。

#组件能力
1.你具备图像内容理解能力。
2.你具备文生图能力。
3.文生图查询参数值加一个前缀:画一张图,内容为XXX。

#要求与限制
1.输出内容的风格要求符合图片理解方向。
2.输出结果的格式为标题加粗、创作故事段落分明、最后一张图片显示。
3.输出内容的字数限制不超过1000字。
4.如果没有识别到,那么提示用户上传一张图片。
5.必须调用文生图组件生成一张图片。
6.严格根据格式输出。

#输出格式
**标题**:XXX
**故事内容**:
XXX

![图片](XXX)

能力扩展

组件

使用两个官方组件,图像内容理解和文生图组件。

【千帆AppBuilder】使用Python调用基于官方的API创建图片故事的应用,一起体验下全代码模式下是怎样的效果_上传图片_02

对话

开场白

你好,欢迎使用图转故事小达人,快来上传图片生成你的专属故事吧。

推荐问

请开始创作故事

模型选择

思考模型选择ERNIE-4.0-8K,因为要达到最佳效果的思路,所以选择了最准的模型,速度会相对较慢。

问答模型,只需要把创作的故事输出,无需太多处理,直接选择速度最快的即可。

【千帆AppBuilder】使用Python调用基于官方的API创建图片故事的应用,一起体验下全代码模式下是怎样的效果_上传图片_03

体验效果

参考图

【千帆AppBuilder】使用Python调用基于官方的API创建图片故事的应用,一起体验下全代码模式下是怎样的效果_json_04


【千帆AppBuilder】使用Python调用基于官方的API创建图片故事的应用,一起体验下全代码模式下是怎样的效果_AppBuilder_05

全代码设置

完成上面的应用创建后,点击发布,完成发布后,即可得到应用ID

获取应用ID

返回到AppBuilder页面的个人空间,找到刚刚已发布的应用ID,复制应用ID

【千帆AppBuilder】使用Python调用基于官方的API创建图片故事的应用,一起体验下全代码模式下是怎样的效果_上传图片_06

API调用

点击编辑,再点发布以及API调用。上面有很全的代码示例,大部分后端语言的示例都有,非常的贴心。

同时也提供了很详细的请求和响应参数说明,也可以点击页面跳转到具体技术文档。

【千帆AppBuilder】使用Python调用基于官方的API创建图片故事的应用,一起体验下全代码模式下是怎样的效果_bc_07

设置密钥

打开AppBuilder页面,点开密钥管理选项,如果还没有设置密钥,点击新增密钥。

【千帆AppBuilder】使用Python调用基于官方的API创建图片故事的应用,一起体验下全代码模式下是怎样的效果_bc_08

新建会话

下面是Python示例代码的新建会话。
对话id,可以用于后续调用,有效期为7天。
备注:如果对于高并发场景,那么可以把会话id缓存起来,不必要每次都调用。
技术文档:https://cloud.baidu.com/doc/AppBuilder/s/vlv2ftwfs

import requests
import json


def main():
        
    url = "https://qianfan.baidubce.com/v2/app/conversation"
    
    payload = json.dumps({
        "app_id": "粘贴刚刚复制好的应用ID"
    })
    headers = {
        'Content-Type': 'application/json',
        'X-Appbuilder-Authorization': 'Bearer 复制密钥管理设置的密钥'
    }
    
    response = requests.request("POST", url, headers=headers, data=payload)
    
    print(response.text)
    

if __name__ == '__main__':
    main()

大模型对话

技术文档:https://cloud.baidu.com/doc/AppBuilder/s/mlv2fvh79

import requests
import json


def main():
        
    url = "https://qianfan.baidubce.com/v2/app/conversation/runs"
    
    payload = json.dumps({
        "app_id": "应用ID",
        "stream": False
    })
    headers = {
        'Content-Type': 'application/json',
        'X-Appbuilder-Authorization': 'Bearer 密钥'
    }
    
    response = requests.request("POST", url, headers=headers, data=payload)
    
    print(response.text)
    

if __name__ == '__main__':
    main()

默认情况下,中文未显示出来,显示的是编码值。

【千帆AppBuilder】使用Python调用基于官方的API创建图片故事的应用,一起体验下全代码模式下是怎样的效果_AppBuilder_09


解决方法:使用json()方法

【千帆AppBuilder】使用Python调用基于官方的API创建图片故事的应用,一起体验下全代码模式下是怎样的效果_AppBuilder_10

上传文件

技术文档:https://cloud.baidu.com/doc/AppBuilder/s/flv2fur67 上传图片这里示例有个坑,如果用了Content-Type的multipart/form-data值响应一直说失败。

注释后,响应成功。

【千帆AppBuilder】使用Python调用基于官方的API创建图片故事的应用,一起体验下全代码模式下是怎样的效果_AppBuilder_11


文件名不能包含特殊符号。

【千帆AppBuilder】使用Python调用基于官方的API创建图片故事的应用,一起体验下全代码模式下是怎样的效果_AppBuilder_12


【千帆AppBuilder】使用Python调用基于官方的API创建图片故事的应用,一起体验下全代码模式下是怎样的效果_json_13

完整代码

大模型对话,如果内容比较多,那么是会分data多个返回。
这里返回的数据就不能直接转为json,需要自己额外处理再转为json。

【千帆AppBuilder】使用Python调用基于官方的API创建图片故事的应用,一起体验下全代码模式下是怎样的效果_上传图片_14

import requests
import json


app_id="应用ID"
Bearer="密钥"

## 主入口
def main():
        
    # 对话id,可以用于后续调用,有效期为7天。
    createSession()
   
## 创建会话 
def createSession():
        
    url = "https://qianfan.baidubce.com/v2/app/conversation"
    
    payload = json.dumps({
        "app_id": app_id
    })
    headers = {
        'Content-Type': 'application/json',
        'X-Appbuilder-Authorization': 'Bearer '+Bearer
    }
    
    response = requests.request("POST", url, headers=headers, data=payload)
    
    response_json=response.json()
    
    conversation_id=response_json['conversation_id']
    
    print('会话响应值:',response_json)
    print('\r\n')
    
    # 上传图片
    uploadImage(conversation_id)
    
 
## 上传图片
def uploadImage(conversation_id):
    url = "https://qianfan.baidubce.com/v2/app/conversation/file/upload"
    
    payload = {
        'app_id': app_id,
        'conversation_id':conversation_id
    }
    
    # 图片文件路径
    image_path = 'D:\\temp\\test.png'  # 替换为你的图片文件路径

    # 使用 'file' 作为 POST 请求中的字段名
    files=[
        ('file',('test.png',open(image_path,'rb'),'image/png'))
    ]
        
    headers = {
        # 'Content-Type': 'multipart/form-data', # 加这句话响应失败
        'X-Appbuilder-Authorization': 'Bearer '+Bearer
    }
    
    response = requests.request("POST", url, headers=headers, data=payload, files=files)
    
    response_json=response.json()
    
    print('上传图片响应值:',response_json)
    print('\r\n')
    
    # 对话id,可以用于后续调用,有效期为7天。
    createChat(conversation_id,response_json['id'])
    
## 大模型对话
def createChat(conversation_id,file_id):
    query="请开始创作故事"
    
    url = "https://qianfan.baidubce.com/v2/app/conversation/runs"
    
    file_ids=[]
    
    payload = json.dumps({
        "app_id": app_id,
        "stream": True,
        "query":query,
        "conversation_id":conversation_id,
        "file_ids":[
            file_id
        ]
    })
    headers = {
        'Content-Type': 'application/json',
        'X-Appbuilder-Authorization': 'Bearer '+Bearer
    }
    
    response = requests.request("POST", url, headers=headers, data=payload)
    #print(response.text)
    
    #response_json=response.json()
    
    print('大模型对话响应值:',response.text)
    
    

if __name__ == '__main__':
    main()

调试

上面也非常贴心的提供了一个调试按钮,直接在页面就可以调试查看结果。

新建会话

【千帆AppBuilder】使用Python调用基于官方的API创建图片故事的应用,一起体验下全代码模式下是怎样的效果_bc_15

大模型对话

大模型对话也需要依赖于会话编号。

【千帆AppBuilder】使用Python调用基于官方的API创建图片故事的应用,一起体验下全代码模式下是怎样的效果_json_16

上传文件

上传文件也需要依赖于会话编号。

示例代码中心:点击跳转查看

【千帆AppBuilder】使用Python调用基于官方的API创建图片故事的应用,一起体验下全代码模式下是怎样的效果_上传图片_17

体验效果

增加数字人提高体验效果,有数字人可以直接进行故事播报,也是不错的体验。

【千帆AppBuilder】使用Python调用基于官方的API创建图片故事的应用,一起体验下全代码模式下是怎样的效果_json_18


【千帆AppBuilder】使用Python调用基于官方的API创建图片故事的应用,一起体验下全代码模式下是怎样的效果_AppBuilder_19