如果沒有輕松獲取數(shù)據(jù)并對其采取行動的能力,數(shù)據(jù)將毫無用處。未來企業(yè)的成功將結(jié)合復(fù)雜的信息收集和更好的用戶體驗(yàn),而“自然語言”用戶界面便構(gòu)成了這種用戶體驗(yàn)的大部分。直觀的自然語言界面允許用戶查找,比較,分析,鉆取和操縱數(shù)據(jù)倉庫中的現(xiàn)有信息,以獲取見解并采取相應(yīng)的行動。本文詳細(xì)介紹了技術(shù)熟練的專家如何實(shí)現(xiàn)認(rèn)知自動化用例以及如何通過自然語言界面為非技術(shù)雇員提供對企業(yè)數(shù)據(jù)的直觀訪問。
在開始之前,它假定非技術(shù)人員可以訪問以下至少一個(gè)界面:Microsoft團(tuán)隊(duì),Skype for Business,Slack,Skype,Telegram,電子郵件,Telegram,Messenger,Cortana或Web瀏覽器。Microsoft Azure應(yīng)用程序中包含所有上述自然語言接口。
您需要準(zhǔn)備的基本工具是:
1. 創(chuàng)建MS應(yīng)用程序。
2. MS Bot Framework SDK。
3. SSL證書。出于安全原因,應(yīng)使用HTTPS協(xié)議TLS 1.3對所有請求進(jìn)行加密,該協(xié)議會對所有請求進(jìn)行加密,以便任何人都可以訪問它。您可以購買SSL證書,也可以自己使用CertBot生成SSL證書。
4.照顧異步過程。正如您期望的那樣,您的應(yīng)用程序?qū)⑼瑫r(shí)收到來自許多用戶的大量請求,因此您應(yīng)注意為所有進(jìn)程實(shí)現(xiàn)異步,以避免出現(xiàn)瓶頸。對于本教程使用的Python環(huán)境,我們使用asyncio庫。Asyncio是一個(gè)Python庫,用于使用async / await語法編寫并發(fā)代碼。如果您使用的環(huán)境不同于Python,則可以隨時(shí)搜索其他異步庫。
5. 異步API。API的異步模式相同。在本文,將使用AIOHTTP。
6. NLP到SQL API的URL和秘密令牌。NLP to SQL Web服務(wù)用于將非結(jié)構(gòu)化自然語言用戶請求轉(zhuǎn)換為結(jié)構(gòu)化查詢語言。在本教程中,我們使用NLSQL。對于NLSQL定制,您應(yīng)該具有要使用的數(shù)據(jù)庫架構(gòu)和Q&A示例。對于從NLP到API的Web服務(wù),您應(yīng)該擁有API Web服務(wù)文檔以及“問答對話框”示例。
好了,畢竟上述工具已經(jīng)準(zhǔn)備就緒,我們可以模擬軟件架構(gòu)。
您可以在下面找到適用于Python環(huán)境的Bot System示例:
#!/usr/bin/pythonimport sslfrom aiohttp import webimport asyncioimport aiohttpfrom botbuilder.core import (BotFrameworkAdapter, BotFrameworkAdapterSettings,
TurnContext, MemoryStorage)from botbuilder.schema import (Attachment, Activity, ActivityTypes)
APP_ID = '' #1 add your APP ID
APP_PASSWORD = '' #2 add you APP Password
SSL_CONTEXT = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
SSL_CONTEXT.load_cert_chain('', '') #3 add your SSL certificates
PORT = 8000
SETTINGS = BotFrameworkAdapterSettings(APP_ID, APP_PASSWORD)
ADAPTER = BotFrameworkAdapter(SETTINGS)async def create_reply_activity(request_activity: Activity, text: str, attachment: Attachment = None) -> Activity:
activity = Activity(
type=ActivityTypes.message,
channel_id=request_activity.channel_id,
conversation=request_activity.conversation,
recipient=request_activity.from_property,
from_property=request_activity.recipient,
attachment_layout='carousel',
text=text,
service_url=request_activity.service_url)
if attachment:
activity.attachments = attachment
return activityasync def handle_conversation_update(context: TurnContext) -> web.Response:
if context.activity.members_added[0].id != context.activity.recipient.id:
response = await create_reply_activity(context.activity, "Hello world!")
await context.send_activity(response)
return web.Response(status=200)async def unhandled_activity() -> web.Response:
return web.Response(status=404)async def api_connect(text):
headers = {'Authorization': 'Token API KEY', 'Content-Type': 'application/json'} #5 add your API Key
payload = {'message': text}
async with aiohttp.ClientSession() as session:
r = await session.post(url, headers=headers, json=payload)
data = await r.json()
return data# MAIN function for botasync def request_handler(context: TurnContext) -> web.Response:
if context.activity.type == 'message':
try:
data = await api_connect(context.activity.text)
# Make connection to own internal database and take data using received sql
# Build separate logic for different API reply message types, if you need it.
# data_type = data["data_type"]
# if data_type == 'graph':
# ...
# elif data_type == 'message':
# ...
# elif data_type == 'buttons':
# ...
# elif data_type == 'error':
# ...
# etc.
data_type = data["data_type"]
if data_type == 'ytd':
result = data['sql']['sql1'] + ' ' + data['sql']['sql2']
else:
result = data['sql']
response = await create_reply_activity(context.activity, result)
await context.send_activity(response)
except KeyError:
pass
elif context.activity.type == 'conversationUpdate':
return await handle_conversation_update(context)
elif context.activity.action == 'add':
return await handle_conversation_update(context)
else:
return await unhandled_activity()async def messages(request) -> web.Response:
body = await request.json()
# print("request: ", request.headers)
# print("body: ", body)
activity = Activity().deserialize(body)
auth_header = request.headers['Authorization'] if 'Authorization' in request.headers else ''
web.Response(status=200)
try:
return await ADAPTER.process_activity(activity, auth_header, request_handler)
except Exception as exc:
raise excasync def init_app(loop):
app = web.Application(loop=loop)
app.add_routes([web.post('/api/messages', messages)])
return apptry:
loop = asyncio.get_event_loop()
app = loop.run_until_complete(init_app(loop))
web.run_app(app, host='127.0.0.1', port=PORT)except Exception as e:
raise e
在使用任何其他編程語言的情況下,應(yīng)應(yīng)用相同的邏輯。
數(shù)據(jù)成為全球經(jīng)濟(jì)的原材料。追求驅(qū)使過時(shí)的行業(yè)重塑自我。能源,生產(chǎn),醫(yī)療保健,零售乃至政府都經(jīng)歷了數(shù)字化轉(zhuǎn)型。
但是,信息無能為力,無法使用它并采取相應(yīng)的行動。能夠在未來十年生存的公司將不僅擁有卓越的信息;他們將為所有人提供直觀,靈活的用戶界面。直觀的用戶界面基于人類的目標(biāo)和行為,可能會有所不同。認(rèn)知自動化具有行為影響,可推動進(jìn)一步的業(yè)務(wù)決策并改善企業(yè)財(cái)務(wù)業(yè)績。
不同的用戶體驗(yàn)改變了人們以微妙和無意識的方式做出選擇的方式。所看到的,呈現(xiàn)的位置以及它如何提供交互作用都會影響動作。輕松查詢數(shù)據(jù)的能力將刺激人們使用信息,并做出更多由數(shù)據(jù)驅(qū)動的選擇,以推動業(yè)務(wù)更快地發(fā)展。
以上就是關(guān)于如何使用NLP到SQL API的全部內(nèi)容,想了解更多關(guān)于SQL數(shù)據(jù)庫的信息,請繼續(xù)關(guān)注中培偉業(yè)。