‘再见’
chat:
‘听起来很有趣的样子’
好了,到这里我们想要打造的聊天机器人的雏形就出来了。首先接收用户的输入,然后根据用户的输入判定意图,之后根据相应的意图生成对应的回答。这样就完成了一次会话过程。伪代码可以表示如下:
input_string=“”#输入
intent_object=intent(input_string)#意图识别
response=policy(intent_object)#回复生成
print(response)#返回用户
### chatbot开发
理清楚了具体的对话流程,下面就可以开始着手对我们的聊天机器人进行开发了。这里我们用到的rasa框架,rasa中用领域(domain)对会话进行区分,每一个领域下面有不同的意图,意图是由实体进行区分的,每一个意图对应着一个会话动作。
#### 安装:
pip install rasa_core
git clone https://github.com/RasaHQ/rasa_core.git
cd rasa_core
pip install -r requirements.txt
python setup.py install
在完成安装之后可以运行helloworld示例来检验是否正常安装成功:
python examples/hello_world/run.py
Bot loaded. Type hello and press enter :
hello
hey there!
当‘hey there!’的回复之后就是安装成功了。安装成功之后就利用hello\_world示例项目实现上文提到的打招呼机器人。
#### 定义领域、意图和动作
#创建文件common_domain.yml,复制如下代码
intents:#定义意图
- greet - goodbye - chat
entities:
- action
templates:#表示对于相应的意图采取什么样的回复
utter_greet:
- "hello!" utter_goodbye:
- "byebye :(" utter_chat:
- "It seems like funny!"
actions:
- utter_greet - utter_goodbye - utter_chat
#### 实现会话逻辑
from future import absolute_import
from future import division
from future import print_function
from future import unicode_literals
import logging
import numpy as np
from rasa_core import utils
from rasa_core.actions.action import ACTION_LISTEN_NAME
from rasa_core.agent import Agent
from rasa_core.channels.console import ConsoleInputChannel
from rasa_core.domain import TemplateDomain
from rasa_core.interpreter import NaturalLanguageInterpreter
from rasa_core.policies import Policy
from rasa_core.tracker_store import InMemoryTrackerStore
logger = logging.getLogger(name)
class CommonPolicy(Policy):
def predict_action_probabilities(self, tracker, domain):
# type: (DialogueStateTracker, Domain) -> List[float]
#将对应的意图与动作绑定
responses = {
"greet": 2,
"goodbye": 3,
"chat": 4,
}
if tracker.latest_action_name == ACTION_LISTEN_NAME:
key = tracker.latest_message.intent["name"]
action = responses[key] if key in responses else 4
return utils.one_hot(action, domain.num_actions)
else:
return np.zeros(domain.num_actions)
class HelloInterpreter(NaturalLanguageInterpreter):
def parse(self, message):
# intent = "greet" if 'hello' in message else "default"
global intent
#进行意图识别
if 'hello' in message:
intent='greet'
elif 'goodbye' in message:
intent='goodbye'
else:
intent='chat'
return {
"text": message,
"intent": {"name": intent, "confidence": 1.0},
"entities": []
}
def run_hello_world(serve_forever=True):
default_domain = TemplateDomain.load("./common_domain.yml")#加载多个domain怎么办
agent = Agent(default_domain,
policies=[CommonPolicy()],
interpreter=HelloInterpreter(),
tracker_store=InMemoryTrackerStore(default_domain))
最后
**一个零基础的新人,我认为坚持是最最重要的。**我的很多朋友都找我来学习过,我也很用心的教他们,可是不到一个月就坚持不下来了。我认为他们坚持不下来有两点主要原因:
他们打算入行不是因为兴趣,而是因为所谓的IT行业工资高,或者说完全对未来没有任何规划。
刚开始学的时候确实很枯燥,这确实对你是个考验,所以说坚持下来也很不容易,但是如果你有兴趣就不会认为这是累,不会认为这很枯燥,总之还是贵在坚持。
技术提升遇到瓶颈了?缺高级Android进阶视频学习提升自己吗?还有大量大厂面试题为你面试做准备!
提升自己去挑战一下BAT面试难关吧
对于很多Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。整理的这些知识图谱希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
不论遇到什么困难,都不应该成为我们放弃的理由!
如果有什么疑问的可以直接私我,我尽自己最大力量帮助你!
最后祝各位新人都能坚持下来,学有所成。
T面试难关吧**
[外链图片转存中…(img-g7eo0y01-1720103303704)]
对于很多Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。整理的这些知识图谱希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
不论遇到什么困难,都不应该成为我们放弃的理由!
如果有什么疑问的可以直接私我,我尽自己最大力量帮助你!
最后祝各位新人都能坚持下来,学有所成。