如果没有轻松获取数据并对其采取行动的能力,数据将毫无用处。未来企业的成功将结合复杂的信息收集和更好的用户体验,而“自然语言”用户界面便构成了这种用户体验的大部分。直观的自然语言界面允许用户查找,比较,分析,钻取和操纵数据仓库中的现有信息,以获取见解并采取相应的行动。本文详细介绍了技术熟练的专家如何实现认知自动化用例以及如何通过自然语言界面为非技术雇员提供对企业数据的直观访问。
在开始之前,它假定非技术人员可以访问以下至少一个界面:Microsoft团队,Skype for Business,Slack,Skype,Telegram,电子邮件,Telegram,Messenger,Cortana或Web浏览器。Microsoft Azure应用程序中包含所有上述自然语言接口。
您需要准备的基本工具是:
1. 创建MS应用程序。
2. MS Bot Framework SDK。
3. SSL证书。出于安全原因,应使用HTTPS协议TLS 1.3对所有请求进行加密,该协议会对所有请求进行加密,以便任何人都可以访问它。您可以购买SSL证书,也可以自己使用CertBot生成SSL证书。
4.照顾异步过程。正如您期望的那样,您的应用程序将同时收到来自许多用户的大量请求,因此您应注意为所有进程实现异步,以避免出现瓶颈。对于本教程使用的Python环境,我们使用asyncio库。Asyncio是一个Python库,用于使用async / await语法编写并发代码。如果您使用的环境不同于Python,则可以随时搜索其他异步库。
5. 异步API。API的异步模式相同。在本文,将使用AIOHTTP。
6. NLP到SQL API的URL和秘密令牌。NLP to SQL Web服务用于将非结构化自然语言用户请求转换为结构化查询语言。在本教程中,我们使用NLSQL。对于NLSQL定制,您应该具有要使用的数据库架构和Q&A示例。对于从NLP到API的Web服务,您应该拥有API Web服务文档以及“问答对话框”示例。
好了,毕竟上述工具已经准备就绪,我们可以模拟软件架构。
您可以在下面找到适用于Python环境的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
在使用任何其他编程语言的情况下,应应用相同的逻辑。
数据成为全球经济的原材料。追求驱使过时的行业重塑自我。能源,生产,医疗保健,零售乃至政府都经历了数字化转型。
但是,信息无能为力,无法使用它并采取相应的行动。能够在未来十年生存的公司将不仅拥有卓越的信息;他们将为所有人提供直观,灵活的用户界面。直观的用户界面基于人类的目标和行为,可能会有所不同。认知自动化具有行为影响,可推动进一步的业务决策并改善企业财务业绩。
不同的用户体验改变了人们以微妙和无意识的方式做出选择的方式。所看到的,呈现的位置以及它如何提供交互作用都会影响动作。轻松查询数据的能力将刺激人们使用信息,并做出更多由数据驱动的选择,以推动业务更快地发展。
以上就是关于如何使用NLP到SQL API的全部内容,想了解更多关于SQL数据库的信息,请继续关注。