欢迎来到《小5讲堂》
这是《千帆》系列文章,每篇文章将以博主理解的角度展开讲解。
温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!
目录
- 背景
- 基本信息
- 名称
- 简介
- 角色指令
- 能力扩展
- 组件
- 对话
- 开场白
- 推荐问
- 模型选择
- 体验效果
- 参考图
- 全代码设置
- 获取应用ID
- API调用
- 设置密钥
- 新建会话
- 大模型对话
- 上传文件
- 完整代码
- 调试
- 新建会话
- 大模型对话
- 上传文件
- 体验效果
- 推荐文章
背景
前段时间看到一个关于由图片生成故事的讨论。
因此基于这个讨论点通过千帆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
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()
默认情况下,中文未显示出来,显示的是编码值。
解决方法:使用json()方法
上传文件
技术文档:https://cloud.baidu.com/doc/AppBuilder/s/flv2fur67
上传图片这里示例有个坑,如果用了Content-Type的multipart/form-data值响应一直说失败。
注释后,响应成功。
文件名不能包含特殊符号。
完整代码
大模型对话,如果内容比较多,那么是会分data多个返回。
这里返回的数据就不能直接转为json,需要自己额外处理再转为json。
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原生应用,快来使用吧!「图转故事小达人」:https://appbuilder.baidu.com/s/pOVocg7O
手机端体验地址:https://wx.baeapps.com/api/ai_apaas/v1/wx_program/share?share_code=appalWBosSSbvtVOI89fP8S
推荐文章
【千帆AppBuilder】你有一封邮件待查收|未来的我,你好吗?欢迎体验AI应用《未来信使》
【千帆平台】零代码结合知识库或者插件开发一款AI应用,2024年奥运会运动员获奖信息(人工智能应用)
【千帆AppBuidler】零代码构建AI人工智能应用,全网都在喊话歌手谁能应战,一键AI制作歌手信息查询应用
【千帆平台】使用AppBuilder零代码创建应用,然后通过OpenAPI方式调用应用
【千帆平台】AIGC人工智能应用,使用AppBuilder零代码创建应用,Excel表格数据转为Markdown格式文本