我已经集成了Watson Discovery
和Watson Assistant
,因此用户可以从Assistant中查询Discovery文档。到目前为止,我正在显示具有最高pass_score的段落。现在,我想显示从中获取段落的文件的文件名。下面是我的Node.js代码。
function main(params) {
const DiscoveryV1 = require('watson-developer-cloud/discovery/v1');
return new Promise(function (resolve, reject) {
var discovery = new DiscoveryV1({
url: 'https://gateway-lon.watsonplatform.net/discovery/api',
iam_apikey:'vvvvvvvvvv', /* watson discovery api key */
version: '2018-12-03'
});
discovery.query(
{environment_id: 'vvvvvv', /* watson discovery environment id */
collection_id: 'vvvvvvvvvv', /* watson discovery collection id */
natural_language_query: params.message,
passages: 'true'
}, function(err, data) {
if (err) {
return reject(err);
}
return resolve(data.passages[1]);
});
});
}
有人可以建议修改以显示文档名称吗?
答案 0 :(得分:1)
@ msr_003
有两种方法可以处理此问题。在段落响应中返回提取段落的文档的document_id
。通过响应的document_id
字段映射到查询响应中返回的文档的id
字段。您可以查找文档响应的extracted_metadata.filename
字段,其中document_id
(段落的)= id
(文档的来源)。令人困惑的是,同一字段是用两种不同的方式引用的。
此外,请注意,查询响应中返回的文档数将影响该段落所来自的文档是否被实际返回。例如,假设您返回5个段落,然后选择返回5个文档。返回的段落中的一个或多个很有可能来自不在返回的前5个文档中的文档。如果发生这种情况,您可以在查询响应中返回大量文档,以帮助防止这种情况的发生。因此,例如,当您返回5个段落时,返回前100个文档,以防止这种情况的发生。
您可以做的另一件事是使用文档详细信息API https://cloud.ibm.com/apidocs/discovery#get-document-details获取段落来源的文档详细信息。虽然这需要第二次API调用,而且速度较慢,但可以消除原始查询结果中未返回文档的机会。