带有Oracle Digital Assistant和Fn Project的会话式UI。 第三部分,迁移到云

在本文中,我将继续讲述在Oracle Digital Assistant和Oracle Digital Assistant的 基础上为FlexDeploy实现对话式UI的故事。
Fn项目 。 今天,我将围绕聊天机器人工作的无服务器API移到云中,因此整个解决方案都在云中工作:

对话式使用者介面

该API是作为收集到Fn应用程序中的Fn函数集来实现的。 Fn的优点在于,它只是一堆Docker容器,它们可以同样在本地Docker引擎和云中某个位置的笔记本电脑上运行。 话虽如此,我可以从任何云提供商,因为它描述的运行K8S集群上我的FN应用在这里 。 但是今天不是那天。 今天,我将在基于Fn的全新云服务Oracle Functions上运行我的无服务器API。 该服务尚不通用,但是我参与了“有限可用性”计划,因此我可以对其进行试用,可以使用它并在其上发布博客。 在此解决方案中,我必须摆脱这里实现的Fn Flow ,并回到我原来的实现,因为Oracle Functions还不支持Fn Flow。 我希望很快,因为这实际上是最好的部分。

因此,配置好我们的OCI环境并启动并运行Oracle Functions服务(我不会在此处重新发布Oracle教程),我们需要配置Fn CLI以便能够与该服务通信:

fn create context oracle_fn --provider oracle 
fn use context oracle_fn
fn update context oracle.compartment-id MY_COMPARTMENT_ID
fn update context api-url https://functions.us-phoenix-1.oraclecloud.com
fn update context registry phx.ocir.io/flexagonoraclecloud/flexagon-repo
fn update context oracle.profile oracle_fn

好的,现在我们的Fn命令行界面正在与Oracle Functions对话。 下一步是在Oracle Functions控制台中创建一个应用程序:

对话式使用者介面

现在我们可以将Fn应用程序部署到Oracle Functions

Eugenes-MacBook-Pro-3:fn fedor$ ls -l
total 8
-rw-r--r--@ 1 fedor  staff   12 Dec  4 15:41 app.yaml
drwxr-xr-x  5 fedor  staff  160 Feb  9 15:24 createsnapshotfn
drwxr-xr-x  6 fedor  staff  192 Feb  9 15:25 receiveFromBotFn
drwxr-xr-x  6 fedor  staff  192 Feb  9 15:25 sendToBotFn
Eugenes-MacBook-Pro-3:fn fedor$ 
Eugenes-MacBook-Pro-3:fn fedor$ 
Eugenes-MacBook-Pro-3:fn fedor$ fn deploy --all

完成后,我们可以在Oracle Functions控制台中观察该应用程序:

对话式使用者介面

下一步是更新聊天机器人和笔记本电脑中的API网址,以便调用云中的功能,而不是先前的本地实现。 可以使用以下命令检索URL:

fn list triggers odaapp

到目前为止,从我的笔记本电脑到Oracle Functions的迁移一直看起来非常简单。 但是这里有点痛苦。 为了使用http请求调用Oracle Functions中托管的函数 ,应该对请求进行签名,以便它们可以通过身份验证。 调用签名函数调用的node.js实现如下所示:

var fs = require('fs');
var https = require('https');
var os = require('os');
var httpSignature = require('http-signature');
var jsSHA = require("jssha");var tenancyId = "ocid1.tenancy.oc1..aaaaaaaayonz5yhpr4vxqpbdof5rn7x5pfrlgjwjycwxasf4dkexiq";
var authUserId = "ocid1.user.oc1..aaaaaaaava2e3wd3cu6lew2sktd6by5hnz3d7prpgjho4oambterba";
var keyFingerprint = "88:3e:71:bb:a5:ea:68:b7:56:fa:3e:5d:ea:45:60:10";
var privateKeyPath = "/Users/fedor/.oci/functions_open.pem";
var privateKey = fs.readFileSync(privateKeyPath, 'ascii');
var identityDomain = "identity.us-ashburn-1.oraclecloud.com";function sign(request, options) {var apiKeyId = options.tenancyId + "/" + options.userId + "/" + options.keyFingerprint;var headersToSign = ["host","date","(request-target)"];var methodsThatRequireExtraHeaders = ["POST", "PUT"];if(methodsThatRequireExtraHeaders.indexOf(request.method.toUpperCase()) !== -1) {options.body = options.body || "";var shaObj = new jsSHA("SHA-256", "TEXT");shaObj.update(options.body);request.setHeader("Content-Length", options.body.length);request.setHeader("x-content-sha256", shaObj.getHash('B64'));headersToSign = headersToSign.concat(["content-type","content-length","x-content-sha256"]);}httpSignature.sign(request, {key: options.privateKey,keyId: apiKeyId,headers: headersToSign});var newAuthHeaderValue = request.getHeader("Authorization").replace("Signature ", "Signature version=\"1\",");request.setHeader("Authorization", newAuthHeaderValue);
}function handleRequest(callback) {return function(response) {var responseBody = "";response.on('data', function(chunk) {responseBody += chunk;});response.on('end', function() {callback(JSON.parse(responseBody));});}
}function createSnapshot(release) {var body = release;var options = {host: 'af4qyj7yhva.us-phoenix-1.functions.oci.oraclecloud.com',path: '/t/createsnapshotfn',method: 'POST',headers: {"Content-Type": "application/text",}};var request = https.request(options, handleRequest(function(data) {console.log(data);}));sign(request, {body: body,privateKey: privateKey,keyFingerprint: keyFingerprint,tenancyId: tenancyId,userId: authUserId});request.end(body);
};

调用Oracle Functions中托管的无服务器API时, Oracle Digital Assistant定制组件和便携式计算机上的侦听器组件应使用此方法。

而已!

翻译自: https://www.javacodegeeks.com/2019/02/conversational-oracle-assistant-fn.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/343350.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤教育】国家开放大学2018年秋季 1398T分析化学(本) 参考试题

试卷代号:2027 金融市场 试题 2019年1月 一、单项选择题(每小题1分,共10分。每小题有一项正确答案,请 将正确答案的序号填写在括号内) 1.金融市场上最重要的主体是( )。 A.政府 B.家庭 C.企业 D.机构投资者 2.( )是指那…

如何识别交换机的性能优劣?

随着网络应用的逐渐深入,电信级交换机,特别是三层交换机已经成为当今市场争夺的焦点。但是在功能各异、种类繁多的交换机设备中,用户要如何拨开迷雾,找到符合自身应用特点的产品。接下来就由杭州飞畅科技给大家讲讲如何识别交换机…

【渝粤教育】国家开放大学2018年秋季 2120T医学免疫学与微生物学 参考试题

试卷代号:2136 管理会计 试题 2019年1月 一、单项选择题(每小题1分,共20分) 1.EVA与基于利润的企业业绩评价指标的最大区别是( )。 A.将权益资本成本计入资本成本 B.不考虑权益资本成本 C&…

Jakarta EE中的规范范围

使用Eclipse Foundation Specification Process (EFSP),一个开放源代码规范项目就有一个专门的提交者项目团队来创建和维护一个或多个规范。 创建和维护的周期跨越了该规范的多个版本,因此尽管各个成员可能来去去去,但…

kafka metric java,jmx_exporter+prometheus+grafana实现kafka metric监控

2.配置kafka的JMX PORT,修改bin/kafka-server-start.sh,添加一行export JMX_PORT"9999",我这里用了9999端口。3.下载jmx_exporter,链接 https://github.com/prometheus/jmx_exporter, 我将文件放在/opt/kafka/kafka_2.11-1.0.0/jmx_prometheus_javaagent-…

【渝粤教育】国家开放大学2018年秋季 2322T物流信息技术 参考试题

试卷代号:2391 古代汉语(2) 试题(开卷) 2019年1月 一、填空(每空1分,共20分) 1.开我国文体研究先河的是 。他把文体分为四类,即____、、 、。 2.论辩类,正面阐…

【渝粤教育】国家开放大学2018年秋季 2604T城市轨道交通行车组织 参考试题

试卷代号:2632 城市轨道交通客运组织 试题 2019年1月 一、单项选择题(每小题2分,共20分,将正确答案选项的字母填入题目中的括号内) 1.( )是客运服务系统的行为规则。 A.安全规则 B.事故处理规则…

网络交换机3大常见故障问题

交换机运行中出现故障是不可避免的,但出现故障后应当迅速地进行处理,尽快查出故障点,排除故障。要做到这一点,就必须了解交换机故障的类型及具备对故障进行分析和处理的能力。一般来说,交换机常见的故障有电源故障、端…

php只能写入7字符,如何在PHP 7之前解决“必须是字符串的实例,字符串给定”?...

类型提示只能是对象和数组(自PHP 5.1以来)类型 . 不支持使用int和string的传统类型提示 .所以你拥有它 . 错误消息并不是真的有用,但我告诉你 .** 2017年编辑**有效类型类/接口名称:参数必须是给定类或接口名称的实例 . (自PHP 5.0.0起)self:…

java多模块maven_Maven和Java多版本模块

java多模块maven介绍 通常,项目具有最低Java版本要求,并且适用于其所有模块。 但是每条规则都有其例外,最近我偶然发现了以下问题。 我的一个开源项目对其大多数模块都要求使用Java 1.6,除了一个要求1.7版本的项目。 当集成具有…

【渝粤教育】国家开放大学2018年秋季 3950T金融基础 参考试题

试卷代号:4988 电子政务概论 试题(开卷) 2019年1月 一、单项选择题(每题所设选项中只有一个正确答案,每小题1分,共10分,多选、错选或不选均不得分) 1.电子政务的公共服务…

8口网管型工业以太网交换机产品性能介绍

8端口以太网交换机因其端口数量、价格都比较适中,所以是比较常见的一款产品。杭州飞畅科技为满足不同客户的需要,就8端口的工业交换机分别研发了网管型、非网管、8电口、2光6电、4光4电等多种规格。如果您这边有特殊规格的需求,飞畅科技也可以…

php 读取页面全部变量,PHP-如何从外部文件获取“页面”变量?

我使用外部文件来处理WP插件中的AJAX调用.为了使其能够迭代WP方法,我进行了以下修改:require( ../../../wp-blog-header.php );header("HTTP/1.1 200 OK");问题是,似乎我无法从中获取任何特定于页面状态的变量.例如,get_query_var(‘page’)始终返回为空.…

【渝粤教育】国家开放大学2018年秋季 8177-21T (1)工程经济与管理 参考试题

科目编号:8182 a 2018-2019学年度第一学期期末考试 灌溉与管理 试题 2019年 1 月 一、概念解释 (每题5分,共20分) 1.蒸腾速率: 2.灌溉水源: 3.土壤水饱和度: 4.土壤水分的有效性…

5个重构原理示例

这篇文章介绍了重构真正的开源代码( Gradle Modules Plugin )时应用的五​​种(最著名的)重构原理。 语境 当我为Gradle Modules Plugin (PR #73 ) 单独编译 module-info.java ,我注…

【渝粤教育】国家开放大学2019年春季 0134-22T劳动法学 参考试题

试卷编号:0134 期末考 劳动法学试题答案 1、劳动法的调整对象 2、竞业限制 3.职工培训 4.行政责任 二、单项选择题(每题4分,共20分) 考生注意:必须将正确答案填入表格中,否则该…

POE工业交换机的四种接法详解

PoE工业交换机具有电信级性能特征,可耐受严苛的工作环境。PoE交换机产品系列丰富,端口配置灵活,可满足各种工业领域的使用需求。那么,POE工业交换机该怎么接线呢?接下来就由飞畅科技的小编来为大家详细介绍下POE交换机…

【渝粤教育】国家开放大学2019年春季 0691-22T物理化学及实验 参考试题

科目编号:0691 座位号: 2018-2019学年度第二学期期末考试 物理化学及实验试题 2019年7月 一、填空题(每空4分,共40分) 1、熵与热力学概率之间的函数关系式是 。 2、补全热力学函数关系式:CP (S/T)P 3、一…

线程本地分配缓冲区

最近,我一直在研究遭受严重性能问题的Java应用程序。 在许多问题中,真正引起我注意的一个问题是新对象的分配速率相对较低(应用程序分配了大量的相当大的对象)。 后来发现,原因是在TLAB之外发生了大量分配。 什么是TL…

java发邮件无主题,使用SpringCloud过程中遇到的一些问题

对SpringCloud做一次简单的问题总结。application.yml 和 bootstrap.yml 有何区别?I have just asked the Spring Cloud guys and thought I should share the info I have here.bootstrap.yml is loaded before application.yml.It is typically used for the foll…