查看oracle会话和进程_带有Oracle Digital Assistant和Fn Project的会话式UI

查看oracle会话和进程

在这里和那里,我们看到了无数的预测,很快聊天机器人将在用户与其系统之间的通信中扮演关键角色。 我没有水晶球,也不想等待这个“很快”,所以我决定现在就使这些预言成真,看看它是什么样。

我正在工作的公司的标志产品是FlexDeploy ,它是一种完全自动化的DevOps解决方案。 FlexDeploy中最受欢迎的活动之一是创建一个发行快照,该快照实际上会构建所有可部署的工件,并使用管道在整个环境中部署它们。

因此,我决定在周末玩得开心,并为此操作实现了一个对话式UI,可以与FlexDeploy进行对话从字面上看 。 在工作结束时,我的家人看到我正在与笔记本电脑聊天,他们可以听到类似的声音:

“ Calypso!” 我说。

“嗨,我能为您提供什么帮助?” 就是答案。

“不确定”我测试了她。

“你在开玩笑吧!” 她明白了。

“您可以建立快照吗?” 我问。

“当然,您在想什么版本?”

“ 1001”

她报告说: “为版本1001创建了快照”

“谢谢”

“今天过得愉快。”她松了一口气。

因此,基本上,我将实现以下图表:

对话式使用者介面

作为UI的核心组件,我使用了全新的Oracle产品Oracle Digital Assistant 。 我建立了一种能够基本聊天的新技能 ,并实现了一个新的自定义 组件,因此我的机器人能够调用http请求,以使后端系统创建快照。 FlexDeployBot技能以及自定义组件的Node.js源代码的导出
在本文的GitHub 存储库中可以找到 custombotcomponent

我将MacBook用作能够听和说的通讯设备,并为机器人定义了一个Webhook 通道 ,以便可以向其发送消息并获取带有响应的回调。

在上面的图中看起来很简单。 唯一的问题是,我想使我的聊天机器人的大脑与通信设备的详细信息以及后端系统FlexDeploy的安装/版本的详细信息分离。 我需要一个中间的API层,一个缓冲区,在ODA和外部世界之间放置一些东西。 看起来无服务器功能非常适合这项工作。

对话式使用者介面

作为无服务器平台,我使用了Fn Project 。 它的优点在于,它是一个完全基于Docker容器的无容器平台的无服务器平台,可以轻松地在我的笔记本电脑(我在本文中所做的工作)或在云中的某个地方(例如在Oracle Kubernetes Engine上) 本地运行

好的,让我们从图的左到右深入了解实现细节。

对话式使用者介面

因此, 侦听器组件,耳朵是可以识别我的语音并将其转换为文本的组件,是使用Python实现的

该组件的关键代码片段如下所示(完整的源代码可在GitHub上找到 ):

r = sr.Recognizer()
mic = sr.Microphone()with mic as source:r.energy_threshold = 2000while True:  try:with mic as source: audio = r.listen(source, phrase_time_limit=5)           transcript = r.recognize_google(audio)print(transcript)if active:requests.post(url = URL, data = transcript)time.sleep(5)except sr.UnknownValueError:print("Sorry, I don't understand you")

为什么是Python ? 有很多可用的Python语音识别库,因此您可以使用它们,并选择一个更了解您口音的库。 我喜欢Python。

因此,一旦听众识别出我的语音,它将调用Fn函数,将该短语作为请求主体传递。

函数sendToBotFn是通过Node.js实现的:

function buildSignatureHeader(buf, channelSecretKey) {return 'sha256=' + buildSignature(buf, channelSecretKey);
}function buildSignature(buf, channelSecretKey) {const hmac = crypto.createHmac('sha256', Buffer.from(channelSecretKey, 'utf8'));hmac.update(buf);return hmac.digest('hex');
}function performRequest(headers, data) {var dataString = JSON.stringify(data);var options = {body: dataString,
headers: headers};request('POST', host+endpoint, options);             
}function sendMessage(message) {let messagePayload = {type: 'text',text: message}let messageToBot = {userId: userId,messagePayload: messagePayload}let body = Buffer.from(JSON.stringify(messageToBot), 'utf8');let headers = {};headers['Content-Type'] = 'application/json; charset=utf-8';headers['X-Hub-Signature'] = buildSignatureHeader(body, channelKey);performRequest(headers, messageToBot);  
}fdk.handle(function(input){ sendMessage(input); return input; 
})

为什么选择Node.js? 不是因为我喜欢。 否。这是因为有关实现自定义Web挂钩通道的 Oracle文档是指Node.js。 他们喜欢。

当聊天机器人响应时,它正在调用Webhook,该Webhook指的是在笔记本电脑上运行的Fn函数receiveFromBotFn
我使用ngrok隧道将我侦听localhost:8080的Fn应用程序公开到Internet。 receiveFromBotFn函数也通过Node.js实现:

const fdk=require('@fnproject/fdk');
const request = require('sync-request');
const url = 'http://localhost:4390';
fdk.handle(function(input){  var sayItCall = request('POST', url,{body: input.messagePayload.text,});return input;
})

该功能将http请求发送到在本地运行并监听4390端口的简单Web服务器。

我必须承认,使用Node.js实现类似的事情真的很容易。 Web服务器使用Mac OS X本机实用程序说出请求正文中出现的所有内容:

var http = require('http');
const exec = require("child_process").exec
const request = require('sync-request');http.createServer(function (req, res) {let body = '';req.on('data', chunk => {body += chunk.toString();});req.on('end', () => {       exec('say '+body, (error, stdout, stderr) => {});       res.end('ok');});res.end();}).listen(4390);

为了实际调用后端来创建一个快照与FlexDeploy与custombotcomponentFn功能createSnapshotFn的聊天机器人所调用:

fdk.handle(function(input){var res=request('POST',fd_url+'/flexdeploy/rest/v1/releases/'+input+'/snapshot',  {json: {action : 'createSnapshot'},});return JSON.parse(res.getBody('utf8'));
})

该函数很简单,它仅调用FlexDeploy REST API即可开始为给定版本构建快照。 它也可以用Node.js实现,但是我将用Java重写它。 我爱Java。 此外,我将实现一个Fn Flow ,而不是一个简单的函数,该流程首先检查给定的发行版是否存在以及该发行版是否有效,然后才为该发行版调用createSnapshotFn函数。 在下一篇文章中。

而已!

翻译自: https://www.javacodegeeks.com/2018/12/conversational-assistant-fn-project.html

查看oracle会话和进程

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

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

相关文章

设置 input元素placeholder的字体颜色

placeholder 属性提供可描述输入字段预期值的提示信息&#xff08;hint&#xff09;。 该提示会在输入字段为空时显示&#xff0c;并会在字段获得焦点时消失。 placeholder 属性适用于以下的 <input> 类型&#xff1a;text, search, url, telephone, email 以及 passwo…

网页益智游戏怎么制作_休息一下,或者:如何使用Java 12制作出色的益智游戏...

网页益智游戏怎么制作Java 12以实验形式提供了switch表达式以及switch和break语句的新形式。 对于可能很少用到的构造&#xff0c;有大量的新语法和语义-当然&#xff0c;对于那些困惑者和认证考试问题的作者来说&#xff0c;这是一件了不起的礼物。 如果您喜欢Java拼图游戏&am…

java aes 解密 文件_Java AES文件加解密

转自&#xff1a;http://www.webtag123.com/java/4049.htmlAESUtils.javapackage demo.security;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.security.Key;imp…

JavaScript(JS)的习惯写法总结

//取整 parseInt(a,10); //Before Math.floor(a); //Before a>>0; //Before ~~a; //After a|0; //After//四舍五入 Math.round(a); //Before a.5|0; //After//内置值 undefined; //Before void 0; //After, 快 0[0]; //After, 略慢//内置值 Infinity; 1/0;//布尔值短写法…

java模拟连接超时_Java:使用Toxiproxy模拟各种连接问题

java模拟连接超时用Toxiproxy和Java的HttpURLConnection模拟各种连接问题&#xff0c;以查看产生了什么样的错误&#xff1a;连接超时vs.读取超时vs.连接被拒绝…。 结果&#xff1a; 系统&#xff1a;openjdk 11.0.1 2018-10-16 (.setConnectTimeout 1) > java.net.Socke…

java中的僵死进程_Java中线程间怎么通讯?什么叫僵死线程?

《尸家保镖》 《猛鬼出千》 《不死心灵》 《大家发财》 《灵幻少女》 《九天玄女》 《僵尸至尊》 《湘西尸王》 《尸前想后》 《魔高一丈》 《一世好命》 《妖兽尸王》 《人蝎大战》 《星际钝胎》 《艳女还魂》 《邪完再邪》 《艳鬼山坟》 《尸破今天阳光很好&#xff0c;坐在窗…

正则表达式中的分组的匹配次数的理解

正则表达式&#xff1a;/((\d){1,6})/ 这个正则表达式可以匹配任意数量的数字。 限定符 指的是前面的子表达式 (\d){1,6} 可以出现 1 次或者多次&#xff0c;所以如果是贪婪匹配&#xff0c;每次迭代匹配的数字个数可以超过 6 个&#xff08;即 ≥1&#xff09;&#xff1b;如…

aws使用技巧_AWS:避免那些“神圣的法案”时刻的一些技巧

aws使用技巧云非常棒&#xff1a;几乎100&#xff05;的可用性&#xff0c;接近零的维护&#xff0c;按需付费&#xff0c;最重要的是&#xff0c;它具有无限的可扩展性。 但是最后两个很容易把你咬回去&#xff0c;把那令人敬畏的事情变成一场噩梦。 偶尔您会看到类似的故事…

JAVA类和对象访问_Java类和对象

一、类类是封装对象的属性和行为的载体&#xff0c;在Java语言中对象的属性以成员变量的形式存在&#xff0c;而对象的方法以成员方法的形式存在。1. 类的构造方法构造方法是一个与类同名的方法&#xff0c;对象的创建就是通过构造方法完成的&#xff0c;构造方法分为有参构造方…

扩展方法 枚举值_扩展枚举功能的两种方法

扩展方法 枚举值前言 在上一篇文章中&#xff0c;我解释了如何以及为什么在Java代码中使用enums而不是switch/case控制结构。 在这里&#xff0c;我将展示如何扩展现有enums功能。 介绍 Java enum是一种编译器魔术。 在字节码中&#xff0c;任何enum都表示为扩展抽象类java.la…

正则表达式中关于字符集的问题

/[abc]/&#xff0c;匹配1或者多个方括号中的任意字符&#xff0c;方括号中的字符是“或者”的关系&#xff0c;等价于 /(a|b|c)/ /(abc)/&#xff0c;匹配1个或者多个 abc&#xff0c;abc 是一个整体&#xff0c;如下图所示&#xff1a; /[0-9|_|-]/&#xff0c;匹配由数字…

spring 构造函数注入_Spring依赖注入–字段vs设置器vs构造函数注入

spring 构造函数注入欢迎使用Spring Dependency Injection –字段&#xff0c;设置器&#xff0c;构造函数注入教程。 了解场注入 &#xff0c; 二传手注入和构造函数注入之间的区别。 借助代码示例&#xff0c;我们将看到使用每个示例的好处以及为什么选择一个而不是另一个。 …

java 快速io_Java编程在ICPC快速IO实现源码

本文将介绍Java在ICPC快速IO实现方法&#xff0c;下面看看具体代码。不处理EOF&#xff1a;import java.io.OutputStream;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.util.Arrays;import java.util.Random;import java.io…

adf开发_如何在ADF中将参数传递给ActionListener

adf开发在某些情况下&#xff0c;需要将值传递给ADF Button的ActionListener。 可以由actionListeners调用的方法只有一个ActionEvent类型的参数。 因此&#xff0c;我将解释如何将参数传递给该bean方法&#xff0c;但是它在方法签名中仅包含一个参数ActionEvent。 我在页面…

JavaScript/JS的学习

文章目录JavaScript 简介JavaScript 发展史ECMAScript基本语法与 HTML 结合方式数据类型类型转换非 number 转成 number非 boolean 转成 boolean特殊语法变量运算符双等号&#xff08;&#xff09;全等号&#xff08;&#xff09;流程控制语句switch...casewhilefor 循环对象Fu…

java soap协议头_自己调用webservice方法总结(带请求头SoapHeader)

调用webservice总结&#xff1a;1.加入第三方的jar包 Ksoap2-android-XXX2.访问响应的webservice的网站&#xff0c;查看响应的信息&#xff0c;得到nameSpace&#xff0c;methodName&#xff0c;url&#xff0c;soapAction3.如果request信息还有带有SoapHander的。那么就要封装…

注册界面演示代码(前端开发)

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>注册</title><style>* {margin: 0px;padding: 0px;/*这样的设置会阻止元素大小的改变&#xff0c;因为设置内边距时元素大小会发生改变*/b…

apache ignite_使用Apache Ignite瘦客户端– Apache Ignite内部博客

apache ignite从2.4.0版本开始&#xff0c;Apache Ignite引入了一种连接到Ignite群集的新方法&#xff0c;该方法允许与Ignite群集进行通信而无需启动Ignite客户端节点。 从历史上看&#xff0c;Apache Ignite提供了客户端和服务器节点两个概念。 点燃旨在用作轻量级模式的客户…

java 网络编程 方式_JAVA网络编程

概念BIO 阻塞io&#xff0c;1.4之前NIO no-blocking io 非阻塞io&#xff0c;jdk1.4AIO 异步io&#xff0c;jdk1.7浏览器输入网址&#xff0c;敲下回车之后发生了什么&#xff1f;1.URL解析2.DNS解析概念&#xff1a;Domain Name System&#xff0c;域名系统&#xff0c;本质…