基於函數計算的智能小應用

2020-12-25 百度開發者中心

8月29日下午,在熱烈的氣氛中,2019百度雲智峰會在北京順利舉辦。活動現場,百度開發者中心聯手百度雲智學院,為開發者及學生們,提供了展示自己的舞臺,輸出百度沉澱的優質技術。

為了幫助大家更好地理解Workshop中亮相的6大技術,我們特將技術內容進行梳理總結,出品6篇技術乾貨文章,在近期於百度開發者中心公眾號上逐一分享給大家,請大家持續關注。以下是第四期內容《基於函數計算的智能小應用》。

本文作者姚興,百度雲函數計算研發工程師。

函數計算簡介

函數計算是什麼?

函數計算的伺服器可以看作一個透明的接口,當用戶配置好業務邏輯後,所要做的唯一一件事就是——發送事件。函數計算是事件驅動、彈性伸縮的,可以將伺服器當做遠程過程調用看待。在伺服器端除了用戶的業務代碼,還會提供存儲服務、消息服務、日誌服務等基礎開發服務,也會默認提供日誌、監控、彈性伸縮、高可用等通用特性。

函數計算的起源

雖然函數計算是個比較新的概念,但其實多年前的流行技術就有了它的雛形。我們來了解一下函數計算一路是怎麼誕生的。

CGI(Common Gateway Interface)是上世紀九十年代開始流行的技術。具體實現是在一個機器上部署Web伺服器,當請求到來時根據參數來調用本機部署好的應用程式,然後將程序輸出的結果返回給用戶。這種服務其實就很類似於函數計算,以事件驅動。但它有個致命的缺陷,每處理一個請求都得啟動新進程,極其消耗資源。

為了避免啟動新進程,開發者後續創造了大量技術來改進CGI,其中最主流的兩種技術就是FastCGI和Java EE。

FastCGI將應用程式作為常駐進程運行,Web伺服器和應用程式使用網絡連接來通信。

Java EE則在另外一種奇特的路上越走越遠,它將Web伺服器和應用程式打包在一起,作為同一個進程啟動,這樣兩者之間使用線程間通信即可。

隨著網際網路時代的到來,自建機房對小公司來說成為了性價比不高的選擇,原因之一就是機器資源需求在各個時間段不一致,可能造成巨大浪費。這時就出現了IaaS服務,它解決硬體資源的運維和供給問題。以虛擬機維度計費,提供機器的擴容和縮容功能。這樣技術就從自建機房進入了雲時代。

儘管IaaS解決了機器問題,但仍不是真正的按需收費,因為還有個致命的問題需要解決——即使未接收到任何請求,Web伺服器和應用程式也仍然在運行且佔用著資源的。為了解決這個問題,函數計算FaaS就誕生了。它吸收了過去技術的優點,費用與請求數相關,而用戶只關心業務邏輯,基本無需關心技術邏輯(比如監控,性能,彈性,高可用,日誌追蹤等)。

函數計算與傳統架構對比

我們來對比一下傳統架構與函數計算的各方面特性,看看函數計算到底解決了哪些痛點。這裡的傳統架構包括自建機房和IaaS服務。

函數計算的四大優勢

1、簡單易用。無需管理伺服器和環境,只需編寫代碼。FaaS根據請求量自動橫向擴縮。

2、開發運行高效。上傳代碼後即可自動部署,每個函數單獨部署、運行、伸縮。執行的額外延遲是毫秒級。

3、 穩定可靠。雲函數使用事件觸發,單機故障不影響函數執行。

4、降低成本。業務無需常駐,未執行時不產生任何費用,按請求數和運行時間收費。

百度函數計算CFC實驗

在了解函數計算後,我們來試著用百度的函數計算服務CFC做三個小實驗,進一步學習函數計算的使用方法。

文件伺服器

需求

第一個實驗比較簡單,使用CFC實現一個HTTP伺服器提供文件訪問功能,主要需求如下:

-通過瀏覽器能訪問自定義的圖片或書籍

-能用手機朗讀書籍

架構

因為CFC是事件驅動的,只接收事件格式的請求,所以任何外部請求都會被特定的「觸發器」轉換成事件。這裡從瀏覽器發送的HTTP請求會通過HTTP觸發器到達CFC伺服器。在伺服器的本地環境中存儲著需要訪問的文件,在一個名為「assets」的目錄下存儲著一張風景照landscape.jpg和一本書poetry.txt。

實驗步驟

創建函數

1、登陸百度智能雲平臺控制臺

2、選擇「產品服務>雲函數計算 CFC」,進入「函數列表」頁面,點擊從模板創建函數,進入從模板創建函數界面。

3、點擊後,界面上會顯示目前所有的模板,選擇「simple-file-server」模板,點擊下面的「創建」按鈕。

4、在彈框中輸入函數名稱,點擊確定。

5、增加HTTP觸發器,選擇左側「觸發器」選項卡,點擊「新增觸發器」,在彈出的窗口中,「觸發器」選擇「HTTP觸發器」,「URL路徑」選擇「/file/{path+}」,「HTTP方法」可以只選「GET」,「身份驗證」選擇「不驗證」。

6、查看程序包的結構,在「函數代碼」界面點擊「點擊下載完整 ZIP 程序包」,然後解壓,可以看到包中的asset目錄下有一個圖片和一個txt文件。如果想在此服務中訪問其他文件,可以將其放入asset目錄下,再次打包成zip文件,點擊「上傳函數.ZIP包」。

測試函數

1、在函數列表頁點擊函數名最右側的「測試「按鈕,或者在函數基本信息頁和函數代碼頁面,都可找到「測試「按鈕,進入測試彈窗。

2、輸入測試的事件,選擇任意模板,輸入以下json字符串:

{

"resource": "/test/{path+}",

"path": "/test/poetry.txt",

"httpMethod": "GET",

"headers": {

"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",

"Accept-Encoding": "gzip, deflate, br",

"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",

"Connection": "close",

"Upgrade-Insecure-Requests": "1",

"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36",

"X-Bce-Request-Id": "f6cb833e-f818-4b80-b30c-fff437e69886"

},

"queryStringParameters": {

"a": "111"

},

"pathParameters": {

"path": "poetry.txt"

},

"requestContext": {

"stage": "cfc",

"requestId": "f6cb833e-f818-4b80-b30c-fff437e69886",

"resourcePath": "/test/{path+}",

"httpMethod": "GET",

"apiId": "7grmt1xfky5jf"

},

"body": "",

"isBase64Encoded": false

}

3、點擊「執行」按鈕,即可得到返回。

解釋一下測試數據中的要點欄位。pathParameters中有一個path變量,值為poetry.txt,這裡指定了訪問的文件名。可以在函數代碼頁面看到相關實現,var filename = event.pathParameters.path;這一行提取到事件中的文件名,var filepath = __dirname + "/assets/" + filename;將文件定位在「assets」目錄下。

運行測試後可以看到成功的字樣,而且結果中輸出了poetry.txt中的詩。

使用函數的文件服務

1、查找函數對應的HTTP地址,在觸發器界面找到「URL路徑」,其中的「{path+}」在此函數就表示自定義的文件名。

2、訪問文件服務中的圖片,在瀏覽器中輸入"{url}/landscape.jpg",url是上一步查找到的地址。

3、訪問文件服務中的詩文件,在在瀏覽器中輸入"{url}/poetry.txt"。

使用Siri朗讀詩

1、新建捷徑,在iPhone上打開捷徑app,點擊右上的加號新增捷徑,進入捷徑的配置。

2、指定詩的地址,增加「URL」,內容填入「{url}/poetry.txt」。

3、讀取詩的內容,增加「獲取URL內容」,「高級」的「方法」中選擇「GET」。

4、讓手機朗讀詩,增加「朗讀文本」。

5、測試功能,點擊「完成」,然後點擊此捷徑。

6、綁定個性化短語,點擊捷徑右上方的設置圖標,再點擊「添加到Siri」,錄製短語與捷徑綁定。

7、使用Siri讀詩,喚醒Siri,說出上一步的短語。

猜數字遊戲

需求

這個實驗複雜一些,需求如下:

-隨機生成一個正整數

-用戶說出數字

*如果猜錯,告知數字過大或者過小

*如果猜對,遊戲結束,重新開一局

架構

看到需求中需要用戶「說出」數字,你應該能想到這裡需要一個外部服務來提供語音識別功能了,所以我們引入了小度音箱。小度音箱背後提供的DuerOS平臺服務可以接入CFC,即使你沒有音箱設備也無需擔心,我們可以使用DuerOS平臺的模擬測試功能。在這個實驗中,小度音箱將用戶說出的語音發送到DuerOS平臺,後續的數據經過一種新的觸發器——DuerOS觸發器轉換為CFC能識別的事件,最終發送給函數。

流程

來看看CFC的函數需要實現的遊戲流程。

遊戲開始時需要生成隨機數,存儲到DuerOS平臺的session接口(可以看作Web服務的session功能,提供臨時存儲功能)中。在接收到數字後,比較該數字與隨機數的大小,不相等則讓小度音箱報出對應的提示語,否則遊戲接收,重新開局。

實驗步驟

創建函數

1、登陸百度智能雲平臺控制臺

2、選擇「產品服務>雲函數計算 CFC」,進入「函數列表」頁面,點擊從模板創建函數,進入從模板創建函數界面。

3、點擊後,界面上會顯示目前所有的模板,選擇「dueros-bot-guess」模板,點擊下面的「創建」按鈕。

4、在彈框中輸入函數名稱,點擊確定。

5、增加DuerOS觸發器,在函數配置界面的「觸發器」下點擊「新增觸發器」,選擇「DuerOS觸發器」,點擊「確定」。

測試創建的函數

1、在函數列表頁點擊函數名最右側的「測試「按鈕,或者在函數基本信息頁和函數代碼頁面,都可找到「測試「按鈕,進入測試彈窗。

2、輸入測試的事件,選擇任意模板,輸入以下json字符串:

{

"version": "2.0",

"session": {

"new": false,

"sessionId": "{{session_id}}",

"attributes": {}

},

"context": {

"System": {

"application": {

"applicationId": "{{application_id}}"

}

}

},

"request": {

"type": "IntentRequest",

"requestId": "{{request_id}}",

"timestamp": "1499169543",

"query": {

"type": "TEXT",

"original": "34567"

},

"intents": [

{

"name": "guess",

"confirmationStatus": "NONE",

"slots": {

"number": {

"name": "number",

"value": "75301",

"values": [

"20000",

"20000",

"50000",

"75301"

]

}

}

}

]

}

}

3、點擊「執行」按鈕,即可得到返回。

解釋一下測試數據中的幾個與DuerOS平臺相關的重要欄位。intents代表「意圖」,可以設置多個,這裡只配置了一個名為guess的意圖。在這個意圖中有一個slots欄位代表「槽位」,其中有個number槽位,它的value是75301。「意圖」和「槽位」的概念都可以在DuerOS平臺看到解釋,接下來創建技能過程中會使用到這兩個概念。

增加DuerOS技能,並綁定CFC函數

1、新建DuerOS技能,在DuerOS技能平臺選擇創建小技能,選擇「自定義>從頭開始」,在頁面下方填入「技能名稱」、「調用名稱」、「應用場景」、「技能付費」,點擊確定。

2、創建意圖,在DuerOS技能平臺中,找到上一步創建的技能,點擊編輯,然後選擇「創建意圖」進入創建意圖界面。

3、意圖信息填寫,按照要求填寫。為了與CFC的函數匹配,「意圖標識名」設置為「guess」。

4、常用表達,您可以根據創建函數的用處,輸入運行函數的常用表達語句。「常用表達」中輸入任意整數(比如20000)回車,此時可以看到「對應詞典」自動設為sys.number,將此表達的「槽位標識」修改為「number」(與CFC函數對應)。最後點擊頁面最下方的「保存」。

5、查詢函數BRN,在CFC「函數列表」頁面點擊想要獲得BRN的函數名稱,進入函數詳情可以查看函數的BRN。

6、與CFC函數綁定,在DuerOS技能平臺點擊「配置服務」,在「服務部署」中選擇「百度雲CFC」,在「BRN」中填入上一步獲取的函數BRN,「是否回調」列,選擇不執行回調,點擊「保存」。

測試DuerOS技能

1、使用百度帳號登錄DuerOS技能平臺

2、選擇需要測試的自定義技能名稱,進入技能詳情頁面,在左側導航欄中選擇「測試驗證>模擬測試」,進入測試頁面。

3、在輸入框中輸入「打開+調用名稱」打開事件,然後輸入想要猜的數字,開始遊戲。

圖片自動添加水印服務

需求

這是一個常見的Web服務需求,先來實現簡單的文字水印,需求如下:

-用戶自定義文字

-上傳圖片時將文字水印添加到圖片

架構

為了存儲圖片,在實驗中引入了新的外部服務——對象存儲BOS,這是百度雲提供的存儲服務,與CFC對接極其便利。另外在這個實驗中也引入了新的BOS觸發器。BOS中可以設置規則,在圖片上傳後如果滿足條件則自動觸發並將消息發送給CFC,然後經過BOS觸發器將事件傳入函數中。

實驗步驟

創建函數

1、登陸百度智能雲平臺控制臺

2、選擇「產品服務>雲函數計算 CFC」,進入「函數列表」頁面,點擊從模板創建函數,進入從模板創建函數界面。

3、點擊後,界面上會顯示目前所有的模板,選擇「bos-add-watermark」模板,點擊下面的「創建」按鈕。

4、在彈框中輸入函數名稱,點擊確定。

創建BOS Bucket,並綁定CFC函數

1、登陸百度智能雲平臺控制臺,選擇「產品服務>對象存儲 BOS」。

2、創建Bucket,點擊「存儲管理」旁邊的加號,填入「Bucket」名稱,「所屬地域」選擇「華北-北京」,然後點擊「確定」。

3、BOS Bucket綁定CFC函數,在「全局概覽」中選擇創建好的Bucket,點擊「事件通知」,再點擊「創建規則」。在「創建新規則」窗口中,填入「名稱」,「監測事件」選擇「PutObject」(上傳文件),「覆蓋資源」選擇「前後綴」,並在前綴中填入「image」,「觸發應用」中點擊「添加>點擊選擇應用」,「觸發應用方式」選擇「函數計算CFC」,「函數列表」選擇剛剛創建的CFC函數,點擊「確認」。最後點擊「確定」,完成新規則的創建。

你可能注意到在這個實驗中到此為止都沒有創建過觸發器,現在回到CFC函數的觸發器再看看,可以發現已經有一個BOS觸發器創建好了,並且屬性與BOS中的規則一致。因為BOS的配置和CFC是聯動,在一方設置好以後另一方會同步配置。

測試添加水印功能

1、上傳圖片,進入BOS中創建好的Bucket,選擇「文件列表」,點擊「上傳文件」,選擇一張本地的png格式文件,點擊「開始上傳」。

2、查看結果,進入Bucket,選擇「文件列表」,可以看到多了一個「wartermarked-images」目錄,點擊進入,目錄裡有與上一步同名的圖片文件,再點擊圖片,可以看到圖片上有水印。

3、自定義水印文字內容,進入CFC函數代碼,有一處水印文字信息text = "Hello World!",修改此值再上傳圖片即可生成新的水印文字。

4、自定義水印文字字體,下載程序包並解壓,可以看到裡面有一個名為「HELVETI1-1.ttf」的字體,另外代碼中有一句font_path = './HELVETI1-1.ttf',文件和代碼可以替換為其它true type字體。

5、自定義水印的位置、顏色、透明度等屬性,代碼使用Python的pillow庫,可以查看pillow官方文檔,自行修改代碼。

相信大家對CFC實驗已經有了初步的了解和認識,後續我們會持續發布2篇技術文章,請持續關注哦。

相關焦點

  • 智能計算研究進展與發展趨勢
    1 引言 智能計算技術是一門涉及物理學、數學、生理學、心理學、神經科學、計算機科學和智能技術等的交叉學科。目前,智能計算技術在神經信息學、生物信息學、化學信息學等交叉學科領域得到了廣泛應用。
  • 【EXCEL】應用AND函數和IF函數相結合計算銷售任務完成情況!
    在需要應用函數來判定多重條件是否全部符合要求時,我們通常應用AND函數來完成。例:使用IF函數和AND函數相結合,計算3月份各銷售員銷售任務的完成情況。【函數精析】AND()函數用於判斷指定的多個條件是否全部成立,其語法結構為:AND(logicall1,logicall2,…)logicall1,logicall2,…:除運用比較運算符的邏輯式外,還可以指定包含邏輯式的數組或單元格引用
  • 如何在微軟Azure中創建無伺服器計算函數應用程式?
    在無伺服器計算情況下,企業僅支付在虛擬機上執行特定函數所需的費用,虛擬機由雲服務本身來分配、維護和付費。企業不必為創建虛擬機或分配資源付費,有望節省大量資金。
  • NLP: 基於文本語義的智能問答系統
    經典應用場景包括:智能語音交互、在線客服、知識獲取、情感類聊天等。常見的分類有:生成型、檢索型問答系統;單輪問答、多輪問答系統;面向開放領域、特定領域的問答系統。本文涉及的主要是在檢索型、面向特定領域的問答系統**——智能客服機器人。
  • Excel函數應用篇:CHOOSE函數
    參數可以是數字、單元格引用、定義的名稱、公式、函數或文本。=SUM(B1:B10)然後基於區域先計算 CHOOSE 函數,返回引用 B1:B10。然後使用 B1:B10(CHOOSE 函數的結果)作為其參數來計算 SUM 函數。CHOOSE函數一般很少單獨使用,大多數情況下是和其它函數進行組合。下面我們來看下CHOOSE函數的六個常見應用。1、根據日期獲取對應的季度利用CHOOSE函數計算出某個具體日期所在的季度。
  • 函數right、函數left、函數if和函數mod組合用法在案例中的應用
    excel在上一篇文章中我們基於round系列函數(round、roundup和rounddown)、函數int和函數mod的基本運用方法,針對計算實際休假天數這一與現實生活密切相關的問題,提出了四種計算方法:一、函數if、mod和round的聯合用法。
  • Excel 2016函數很厲害,計算每年房貸還款額中的利息,用IPMT函數
    哈嘍,百家號的小夥伴們大家好,我是你們的好朋友沐沐君。如何使用PMT函數計算購房貸款每月還款額,小編在頭條圖文《Excel 2016使用PMT函數,快速計算購房貸款的每月還款額,太強大》中已介紹,不了解的小夥伴們可自行查閱。
  • 基於NETFPGA的可重構科學計算平臺
    目前,可重構計算已有較大發展,主要目標是希望通過硬體可編程,來自適應計算任務的需求,以期達到最佳性能;而且這種硬體結構的變化,能實時地適應計算任務要求的變化。可重構計算的底層技術是FPGA編程技術,可重構計算的優點是硬體設計的實現基於軟體的靈活性,並且保持了傳統的基於硬體方法的執行速度。其體系結構可變的特點,很好地適應了實際應用中的多元化需求。
  • STDEV函數的實際應用舉例
    講了很多的函數的應用,如果探求函數的作用:無外乎兩種,一是求數據的值,二是分析數據,這兩點同樣都是很重要的。在求數據時會用到求和,條件求和,匯總求和;還有求日期,求特殊值,最大最小值,等等,很多很多,這也是函數的特長所在。
  • WPS表格應用|使用公式和函數計算數據
    Step 04完成後按【Enter】鍵確認輸入公式,即可得到計算結果,如圖10-40 所示。公式的填充與複製在 WPS 表格中創建公式後,如果其他單元格需要使用相同的計算公式,可以通過填充或複製的方法進行操作。
  • EXCEL日期四函數簡單應用,工齡計算,到期時間結算,實用函數
    今天跟大家分享一下EXCEL日期四函數簡單應用,工齡計算,到期時間結算,實用函數。大家請看範例圖片,我們要算出下列物品的到期日期,輸入函數:=DATE(YEAR(A2),MONTH(A2),DAY(A2)+B2),函數語法:=DATE(年,月,日)。
  • 人工智慧製造業應用場景
    隨著智能製造熱潮的到來,人工智慧應用已經貫穿於設計、生產、管理和服務等製造業的各個環節。   01 人工智慧技術的三個層次 人工智慧技術和產品經過過去幾年的實踐檢驗,目前應用較為成熟,推動著人工智慧與各行各業的加速融合。從技術層面來看,業界廣泛認為,人工智慧的核心能力可以分為三個層面,分別是計算智能、感知智能、認知智能。
  • 基於計算思維與創新能力培養的計算理論課程教學改革探索
    中興事件給我們國家的原始創新問題敲響了警鐘,有人在網上提出「假如微軟、谷歌不讓我們使用其作業系統怎麼辦」的問題,說明應用與創新缺一不可,只有應用的火熱而沒有創新就會受制於人。計算理論課程是從本質上介紹計算機科學的課程,是計算機學科發展的基石。
  • 基於正交小波函數族的多址通信原理及其應用
    本文描述了基於正交小波函數族的多址通信原理,並提出了一種多速率正交小波調製方法.用具有不同伸縮尺度的小波函數對不同信道中的碼流進行編碼,可以達到擴展信息序列頻譜的目的  Key words:wavelet;multiple access communications;modulation;spread spectrum一、引  言  近年來,小波分析方法在信號檢測、多尺度邊緣提取、語音及圖像處理等諸多通信領域得到了廣泛應用[7,8].在擴頻通信領域中,
  • 滴滴KDD 2019 論文詳解:基於深度價值網絡的多司機智能派單模型
    今年,滴滴共有三篇Oral論文入選KDD2019,研究內容涵蓋基於深度學習方法自動化地生成工單摘要、基於深度強化學習與半馬爾科夫決策過程進行智能派單及模仿學習和GAN在環境重構的探索。本文是對滴滴Oral論文《A Deep Value-networkBased Approach for Multi-Driver Order Dispatching》的詳細解讀。
  • 職場速遞-Excel函數會計應用3:隔列求和函數公式應用
    隔列求和函數公式應用隔列求和函數公式應用是會計甚至材料等部門經常用到的函數,今天給大家演示一下,希望對你有所幫助。隔列求和函數公式應用公式F4:=SUMIF($A$3:$E$3,F$3,A4:E4)如果第三行的標題,那麼我們只能用稍複雜的函數公式。
  • 在線計算專題(03):具體、抽象函數、隱函數、參數方程求導與方向導數計算
    1、一元、多元函數一階導數與導數值的計算例1  計算以下函數的導數,並求在2、一元、多元函數高階導數的計算例1  計算以下函數的50階導數:輸入表達式為執行後的結果顯示為3、抽象複合函數的一階、高階導數計算將上面具體函數求導的函數表達式換成抽象函數即可.
  • 基於共享公寓的智能電源管理系統設計
    關鍵詞:電量監測,無線通信,遠程控制,智能照明。  0 引言  隨著物聯網應用的越漸發展,基於網絡的遠程電源管理系統的研究已成為研究熱點。本文以當下流行的共享公寓為研究背景,設計了遠程監控的智能電源管理系統。
  • 基於分布式帳本技術的跨境支付系統應用
    分布式帳本系統基於區塊鏈技術,主要用於構建去中心化、多中心化的應用或商業邏輯,代表性系統包括比特幣、以太坊等。當前,無鏈貨幣成為區塊鏈研究的前沿。基於有向無環圖(DAG)技術的無鏈分布式帳本的記帳模式將同步記帳提升為異步記帳,交易模式由一個入度和出度的鏈式結構轉變為多個入度和出度的樹狀結構,有效解決了傳統區塊鏈結構阻礙並發性提高的瓶頸問題。圖1展示了DAG結構存儲單元。
  • 哈希函數的特點及應用介紹
    傳說,在人類成功打造出第一臺超級智能電腦之時,決定做一個小測驗,來試試看這臺超級電腦的能耐到底能到多少?實驗的設計很簡單:讓超級電腦計算圓周率是多少。 原本呢,我是計劃在第二篇就開始進入程序開發的部分,只是我發現到,不先了解哈希函數的原理功能、或是留給讀者自行google,會破壞這個系列文章的完整性,尤其是在實作內存塊鏈的不可逆性、或是Key創建等功能,讀者的感受與理解會有差異,所以還是決定,在進入開發區塊鏈之前,寫一篇文章來專門介紹哈希函數,尤其是其在密碼學方面的應用 哈希函數應用在區塊鏈的哪些地方?