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

欢迎来到《小5讲堂》

这是《千帆》系列文章,每篇文章将以博主理解的角度展开讲解。

温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!

目录

背景

前段时间看到一个关于由图片生成故事的讨论。

因此基于这个讨论点通过千帆AppBuilder创建AI应用。

AppBuilder创建应用支持上传图片和文件,这个满足我们的需求。

Let's Go

基本信息

名称

图转故事小达人

简介

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

角色指令

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

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

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

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

![图片](XXX)

能力扩展

组件

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

对话

开场白

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

推荐问

请开始创作故事

模型选择

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

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

体验效果

参考图


全代码设置

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

获取应用ID

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

API调用

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

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

设置密钥

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

新建会话

下面是Python示例代码的新建会话。

对话id,可以用于后续调用,有效期为7天。

备注:如果对于高并发场景,那么可以把会话id缓存起来,不必要每次都调用。

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

python 复制代码
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

python 复制代码
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()

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

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

上传文件

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

上传图片这里示例有个坑,如果用了Content-Type的multipart/form-data值响应一直说失败。

注释后,响应成功。

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

完整代码

大模型对话,如果内容比较多,那么是会分data多个返回。

这里返回的数据就不能直接转为json,需要自己额外处理再转为json。

python 复制代码
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】你有一封邮件待查收|未来的我,你好吗?欢迎体验AI应用《未来信使》

【千帆平台】零代码结合知识库或者插件开发一款AI应用,2024年奥运会运动员获奖信息(人工智能应用)

【千帆AppBuidler】零代码构建AI人工智能应用,全网都在喊话歌手谁能应战,一键AI制作歌手信息查询应用

【千帆平台】使用AppBuilder零代码创建应用,然后通过OpenAPI方式调用应用

【千帆平台】AIGC人工智能应用,使用AppBuilder零代码创建应用,Excel表格数据转为Markdown格式文本

相关推荐
engchina27 分钟前
如何在 Python 中忽略烦人的警告?
开发语言·人工智能·python
Dream_Snowar1 小时前
速通Python 第四节——函数
开发语言·python·算法
西猫雷婶1 小时前
python学opencv|读取图像(十四)BGR图像和HSV图像通道拆分
开发语言·python·opencv
汪洪墩2 小时前
【Mars3d】设置backgroundImage、map.scene.skyBox、backgroundImage来回切换
开发语言·javascript·python·ecmascript·webgl·cesium
程序员shen1616113 小时前
抖音短视频saas矩阵源码系统开发所需掌握的技术
java·前端·数据库·python·算法
人人人人一样一样3 小时前
作业Python
python
四口鲸鱼爱吃盐4 小时前
Pytorch | 利用VMI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击
人工智能·pytorch·python
四口鲸鱼爱吃盐4 小时前
Pytorch | 利用PI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击
人工智能·pytorch·python
小陈phd4 小时前
深度学习之超分辨率算法——SRCNN
python·深度学习·tensorflow·卷积