查看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 = 2000

while 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会话和进程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值