钉钉问答机器人
钉钉自动问答机器人
背景
近期在整合公司的知识库,便于遇到一些简单的问题可以通过查询知识库来自主解决。但过程中发现大部分人并没有遇到问题查看知识库的习惯,更多的还是询问对应的同事,为此(不是为了偷懒)便诞生了编写一个自动回复机器人的想法。
需求
已完成
可以根据关键词匹配知识库的内容自动回答对应内容
无法回答的问题自动记录并保存在对应文档内
可以同时响应多人的问题
未完成
可以联网搜索或回答一些简单的联网问题,比如天气等
维护知识库更简单
实现
创建钉钉应用机器人,并获取client_id和client_secret。详细步骤可见官网,文档还是蛮详细的。
用python实现,首先安装钉钉官网JDK
python3 -m pip install dingtalk-stream
创建相应文件
bot.log——用于记录日志
config.json——用于存储client_id和client_secret
knowledge_base.json——用于保存知识库(偷懒,文档庞大最好用数据库保存)
unrecognized_queries.txt——保存无法回答的问题
main.py——主程序
knowledge_base.json
{
"你好": "你好,有什么可以帮你的吗?",
"天气": "今天的天气是晴天,气温23度。",
}config.json内容格式
{
"client_id": "你的应用id",
"client_secret": "你的应用secret"
}main.py内容(仅粘贴部分内容,全代码可见链接)
class EchoTextHandler(ChatbotHandler):
"""处理文本回声"""
def __init__(self, knowledge_base, logger: logging.Logger = None):
super().__init__()
self.knowledge_base = knowledge_base
self.logger = logger if logger else logging.getLogger()
async def process(self, callback: dingtalk_stream.CallbackMessage):
"""处理回调消息"""
incoming_message = dingtalk_stream.ChatbotMessage.from_dict(callback.data)
text = incoming_message.text.content.strip()
self.logger.info(f'收到消息: {text}')
\# 去掉@机器人的名字,以免影响查询
query = text.replace('@自动问答', '').strip() if '@自动问答' in text else text
self.logger.info(f'处理后的查询: {query}')
response = find_best_match(query, self.knowledge_base)运行main.py即可
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 鹅影随CC!
评论