如何快速构建具有文件交互能力的百炼聊天应用

更新时间:2025-03-25 11:35:39

方案简介

本文介绍了如何快速构建具有文件交互能力的百炼聊天应用,在阅读本文前您也可以阅读如何搭建一个百炼 RAG 应用一文。

前期准备

  1. 搭建百炼应用,参考百炼文档知识检索增强(RAG),为了更好地表现临时文件询问效果,我们不配置该应用的知识库。image

  2. 发布百炼应用后,获得 API-KEY 和应用 ID。image

步骤一:简要搭建魔笔应用 & 集成操作/资源

  1. 创建百炼应用集成资源:image

  2. 创建魔笔应用:

image

  1. 创建一个聊天组件:

image

  1. 创建一个百炼应用集成操作:

image

  1. 聊天组件绑定集成操作

image

步骤二:临时知识库相关集成操作

  1. 创建阿里云 OpenAPI 集成资源,选择“大模型服务平台百炼”,并填写阿里云 AccessKey 相关信息 :

image

  1. 创建阿里云 OpenAPI 集成操作调用阿里云百炼获取上传文件租约接口 applyFileUploadLease。阿里云百炼获取上传文件租约接口可以参考ApplyFileUploadLease - 申请文档上传租约

    image

配置信息可参考如下表格:

API

申请上传文件租约

protocol

https

method

post

CatagoryId

default

FileName

通过参数传入,此处应填上传文件名称

Md5

任意值,接口暂不消费

SizeInBytes

通过参数传入,此处应填上传文件 size

CatagoryType

SESSION_FILE

WorkspaceId

百炼空间 ID,可在百炼控制台获取:

image

回调数据转换

return data.body.Data;

API

申请上传文件租约

protocol

https

method

post

CatagoryId

default

FileName

通过参数传入,此处应填上传文件名称

Md5

任意值,接口暂不消费

SizeInBytes

通过参数传入,此处应填上传文件 size

CatagoryType

SESSION_FILE

WorkspaceId

百炼空间 ID,可在百炼控制台获取:

image

回调数据转换

return data.body.Data;
  1. 创建魔笔内置文件存储集成操作来完成将魔笔系统文件从后端转存到百炼 OSS 存储中的业务。魔笔内置文件存储的文件转存操作可以参考:

    image

配置信息可参考如下表格:

操作类型

复制文件到远程服务器

魔笔文件id

通过参数传入,需要通过聊天组件的文件上传功能获取

请求 URL

通过参数传入,需要通过 applyFileUploadLease 获取该上传路径

头部信息

  • x-bailian-extra:通过参数传入,需要通过 applyFileUploadLease 获取该头部参数

  • Content-Type:通过参数传入,需要通过 applyFileUploadLease 获取该头部参数

操作类型

复制文件到远程服务器

魔笔文件id

通过参数传入,需要通过聊天组件的文件上传功能获取

请求 URL

通过参数传入,需要通过 applyFileUploadLease 获取该上传路径

头部信息

  • x-bailian-extra:通过参数传入,需要通过 applyFileUploadLease 获取该头部参数

  • Content-Type:通过参数传入,需要通过 applyFileUploadLease 获取该头部参数

  1. 创建阿里云 OpenAPI 集成操作调用阿里云百炼文件信息添加接口 addFile。阿里云百炼文件信息添加接口可以参考AddFile - 添加文档

image

配置信息可参考如下表格:

API

添加文档

protocol

https

method

put

LeaseId

通过参数传入,需要通过 applyFileUploadLease 获取该 id

Parser

DASHSCOPE_DOCMIND

CatagoryId

default

CatagoryType

SESSION_FILE

WorkspaceId

百炼空间 ID,可在百炼控制台获取:

image

回调数据转换

return data.body.Data;

API

添加文档

protocol

https

method

put

LeaseId

通过参数传入,需要通过 applyFileUploadLease 获取该 id

Parser

DASHSCOPE_DOCMIND

CatagoryId

default

CatagoryType

SESSION_FILE

WorkspaceId

百炼空间 ID,可在百炼控制台获取:

image

回调数据转换

return data.body.Data;
  1. 创建阿里云 OpenAPI 集成操作调用阿里云百炼文件解析状态查询接口 describeFile。阿里云百炼文件解析状态查询接口可以参考DescribeFile - 查询文档状态

image

配置信息可参考如下表格:

API

查询文档状态

protocol

https

method

get

FileId

通过参数传入,需要通过 addFile 获取该百炼文件 id

WorkspaceId

百炼空间 ID,可在百炼控制台获取:

image

回调数据转换

return data.body.Data;

API

查询文档状态

protocol

https

method

get

FileId

通过参数传入,需要通过 addFile 获取该百炼文件 id

WorkspaceId

百炼空间 ID,可在百炼控制台获取:

image

回调数据转换

return data.body.Data;

步骤三:临时知识库逻辑编排

  1. 创建变量来存储临时文件 ID,此处我们选择 array 类型的变量来满足实现多个临时文件上传的交互行为:

image

  1. 创建定时器,我们创建定时器并以5秒的时间单位来轮询 describeFile 接口,判断我们上传的文件是否在百炼侧解析完成:

image

配置信息可参考如下表格:

可选参数

通过参数传入,由 addFile 集成操作获取该 id

时间间隔

5000

函数体

describeFile.trigger({
  fileId: id
}).then(res => {
   if (res.data.Status === 'FILE_IS_READY') {
     checkFile.stop()
     mobi.showMessage('文件解析成功!');
     inputDisabled.setValue(false)
   }
 })

可选参数

通过参数传入,由 addFile 集成操作获取该 id

时间间隔

5000

函数体

describeFile.trigger({
  fileId: id
}).then(res => {
   if (res.data.Status === 'FILE_IS_READY') {
     checkFile.stop()
     mobi.showMessage('文件解析成功!');
     inputDisabled.setValue(false)
   }
 })
  1. 创建前端函数来编排整个基于百炼临时知识库的聊天文件交互逻辑:

image

配置信息可参考如下表格:

可选参数

  • filename:上传文件名

  • filesize:上传文件大小

  • fileId: 上传文件的魔笔 ID

函数体

// 1调用百炼接口申请文档上传租约
const response = await applyFileUploadLease.trigger({
  "FileName": filename,
  "SizeInBytes": filesize
})

// 文档上传租约id
const fileUploadLeaseId = response.data.FileUploadLeaseId

// 租约参数
const url = response.data.Param.Url
const contentType = response.data.Param.Headers["Content-Type"]
const bailianExtra = response.data.Param.Headers["X-bailian-extra"]

// 2上传至百炼服务器临时存储
const responseRemote = await transFormFile.trigger({
  "url": url,
  "contentType": contentType,
  "bailianExtra": bailianExtra,
  "fileId": fileId
})

// 3调用百炼接口将文档上传到当前类目
const addFileRes = await addFile.trigger({
  "id": fileUploadLeaseId
})


const ids = [...sessionFileIds.value, addFileRes.data.FileId];
sessionFileIds.setValue(ids)

checkFile.start({
  id: addFileRes.data.FileId
})

mobi.showMessage('上传成功,正在解析文件!');

可选参数

  • filename:上传文件名

  • filesize:上传文件大小

  • fileId: 上传文件的魔笔 ID

函数体

// 1调用百炼接口申请文档上传租约
const response = await applyFileUploadLease.trigger({
  "FileName": filename,
  "SizeInBytes": filesize
})

// 文档上传租约id
const fileUploadLeaseId = response.data.FileUploadLeaseId

// 租约参数
const url = response.data.Param.Url
const contentType = response.data.Param.Headers["Content-Type"]
const bailianExtra = response.data.Param.Headers["X-bailian-extra"]

// 2上传至百炼服务器临时存储
const responseRemote = await transFormFile.trigger({
  "url": url,
  "contentType": contentType,
  "bailianExtra": bailianExtra,
  "fileId": fileId
})

// 3调用百炼接口将文档上传到当前类目
const addFileRes = await addFile.trigger({
  "id": fileUploadLeaseId
})


const ids = [...sessionFileIds.value, addFileRes.data.FileId];
sessionFileIds.setValue(ids)

checkFile.start({
  id: addFileRes.data.FileId
})

mobi.showMessage('上传成功,正在解析文件!');

步骤四:为百炼集成操作添加临时知识库逻辑

  1. 为步骤一中创建的百炼集成操作添加“知识库检索范围”中的“临时文件 ID 列表”属性,并填写我们在步骤三中创建的变量 {{sessionFileIds.value ? sessionFileIds.value.filter(e => e) : []}}

image

步骤五:适配聊天组件上传逻辑

  1. 开启聊天组件的“文件输入”选项

image

  1. 在聊天组件上传成功的回调中执行步骤三中的前端函数编排逻辑:

image参数部分的参考代码如下:

{{{
  fileId: chat1.uploadFiles[chat1.uploadFiles.length - 1].fileId,
  filesize: chat1.uploadFiles[chat1.uploadFiles.length - 1].size,
  filename: chat1.uploadFiles[chat1.uploadFiles.length - 1].name
}}}
  1. 最后,在聊天组件回答完成回调中,我们将临时文件变量清空

image

  • 本页导读
  • 方案简介
  • 前期准备
  • 步骤一:简要搭建魔笔应用 & 集成操作/资源
  • 步骤二:临时知识库相关集成操作
  • 步骤三:临时知识库逻辑编排
  • 步骤四:为百炼集成操作添加临时知识库逻辑
  • 步骤五:适配聊天组件上传逻辑