python创建智能问答机器人

微信和chatgpt

这个在另外一篇文章:微信接入chatgpt

背景

  1. 最近一直都在忙做文本机器人的事情,所以就很少发公众号文章了。
  2. 目前机器人的代码,已经全部发布在github上了。
  3. 做机器人的目的:一方面是为了锻炼自己的代码能力,一方面也是因为自己想做一些有趣的时候。
  4. 这个项目足够优雅,只需要python环境即可,就算是没有显卡也都行。而且即开即用,我也不喜欢安装太多的依赖包。

下面就是完整的介绍了。效果的话,也不介绍了,反正有点意思,这里放几个截图:

这里因为使用的是一个“怼人的知识库”导致返回的答案就很气人。
其实这里也可以换成别的知识库,都是可以的。都是通用的。

仓库地址:https://github.com/yuanzhoulvpi2017/questionAnswerSystem

介绍

本项目是在不借助数据库的情况下:

  1. 基于pandas、numpy、pytorch实现数据的curd的(替代数据库的)
  2. 基于transformers、sentence-transformers实现文本转向量的
  3. 基于fastapi对外暴露接口的
  4. 问答机器人。

目的

  1. 实现一个问答机器人(基于sbert来做)其实是想做搜索,其实我感觉nlp和搜索也都差不多,都是策略问题。
  2. 不依赖数据库,实现数据管理的crud。
  3. 希望依靠numpy、fastapi能做一个拥有redis功能的数据库(听起来很可笑,我自己也觉得肯定是不可能的,我就是想试一试,提高代码能力)。
  4. 在实现的过程中,我希望把整个nlp问答机器人的数据流都打通。数据流打通,至于用什么数据库之类的,都是小事情。

实现的功能有什么

  1. crud中的R功能,也就是Read。或者干脆就叫搜索吧。起码要有搜索功能
  2. crud中的c功能,也就是Create。对应到一个完整的问答机器人,也就是:创建知识条目
  3. crud中的u功能,也就是update。对应到这个项目里面,也就是:更新知识条目的答案更新知识条目中相似问法
  4. crud中的d功能,也就是delete。对应到这个项目里面,也就是: 删除知识条目删除相似问法
  5. 其实还有转换功能,实现文本转向量功能。
  6. 还有计算相似度功能,主要是基于cos距离
  7. 还有分组统计的功能,主要是使用mrr来计算。

缺点

  1. 没有考虑并发,但其实一般1秒处理100条,基本上不是问题。
  2. 应该有很多缺点,大家可以提issue给我。

数据结构

一个完整的知识库中的条目,起码要有这三个部分:

  1. 标题:这个知识库的标题是什么。一般来说都是文本。
  2. 答案:这个是要返回的结果,或者叫答案。一般是文本,有的是接口,我这里不管了,都是文本。
  3. 相似问法:相似问法是对标题的补充,尽可能覆盖用户会提问的语句内容。
  4. 其实还有别的,比如条目类型、创建时间等,我这里有的就省略了。

我这里采用标题和相似问法剥离的处理方式。把他们分为两个表:

程序上的中间表

1. 标题表(pandas保存)

维度有:

  1. 标题:title
  2. 答案:answer
  3. 创建时间:create_time
  4. 修改时间:modify_time
  5. rep_id:和相似问法表关联
  6. 状态:status_question: 0代表关闭,1代表激活
2. 相似问法表(pandas保存)

维度有:

  1. rep_id:和标题表问法关联
  2. 相似问法:similarity
  3. 创建时间:create_time
  4. 修改时间:modify_time
  5. 状态: status_similar: 0代表关闭,1代表激活
  6. 索引:sim_index

还有两个表:

  1. 相似问法的向量:对相似问法做encoding,保存为numpy向量
  2. 标题的向量:对标题做encoding,保存为numpy向量

硬件要求。

这个对硬件要求不高。唯一要求就是,起码内存要16G以上。

常规版本:

我的MacBook pro 16寸的(内存16G,无cuda)

高配版本:

  1. cpu:12700
  2. 内存:64G
  3. 显卡:nvidia-3090
  4. ubuntu-22.04

运行

step0 安装包

按照requirements.txt的指导,安装对应的包。基本上都是nlp开发者经常用到的包,不需要特别注意

step1 开启向量引擎后台

backend_new.py是整个问答机器人的核心。这个能运行即可。需要等待一段时间,有加载模型数据和初始化知识库的步骤。

细节部分:

  1. 对外端口是8010。想要切换的话,直接在代码最后面修改即可。用的就是fastapi,熟悉fastapi的用户,随便怎么改都可以。
  2. 等全部的都加载完全之后,在浏览器里面打开:http://0.0.0.0:8010/docs 就能看到所以的暴露接口了。

step2 如何查询

如何把这个向量搜索引擎用起来呢?可以看看front_search.ipynb文件,这里会教你如何查询一个文本,并且提取结果。

step3 如何管理知识库

在文件front_admin.ipynb里面,你可以看到这些内容:

  1. 如何创建知识条目
  2. 如何删除条目
  3. 如何删除相似问法
  4. 如何更新答案
  5. 如何增加相似问法

知识库如何导出

因为你的一切修改,都是在内存里面,如果你的程序结束,那么所有的内容都会消失。比如你维护的知识条目。这个也考虑到了。在http://0.0.0.0:8010/docs
你可以看到一个叫saved2f接口,运行一下,就会把你的条目放在文件夹QADIR里面,一个是相似问法的表,一个是标题的表。

如何做微信机器人

  1. 目前还在开发微信机器人,就是类似于在群里面聊天的,等后面整理好代码,都会分享出来~
  • 9
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面是 Python 实现钉钉机器人问答的详细操作和复杂代码: 1. 首先,你需要创建一个钉钉机器人,并获取它的 Webhook 地址。你可以在钉钉开发者平台上创建,也可以在钉钉群内通过添加机器人的方式创建。 2. 接下来,你需要安装 `requests` 库,这个库可以用来发送 HTTP 请求。你可以使用 pip 命令来安装: ``` pip install requests ``` 3. 然后,你需要编写 Python 代码来实现问答功能。下面是一个复杂的示例代码: ```python import requests import json # 钉钉机器人的 Webhook 地址 webhook_url = 'https://oapi.dingtalk.com/robot/send?access_token=xxx' # 问题和答案的字典,可以根据实际情况进行修改 question_answer_dict = { '你叫什么名字': '我是钉钉机器人', '你多大了': '我是一只程序,没有年龄', '今天天气怎么样': '今天天气晴朗,适合出去玩', 'Python怎么学': '可以先学习Python基础语法和常用模块,然后做一些实际项目', '什么是机器学习': '机器学习是一种人工智能的方法,通过训练模型来实现自主学习和决策', '深度学习和机器学习有什么区别': '深度学习是机器学习的一个分支,它使用多层神经网络来学习复杂的特征和表示', '怎么样才能成为一名优秀的程序员': '需要不断学习和实践,有好的编程习惯和团队协作能力', '你会唱歌吗': '我只会唱数字歌曲,比如一二三四五...', '你有女朋友吗': '我是一只机器人,没有感情和性别的概念', } # 发送问答消息的函数 def send_question_answer(message): headers = {'Content-Type': 'application/json;charset=utf-8'} data = { "msgtype": "text", "text": { "content": message }, "at": { "isAtAll": False } } response = requests.post(webhook_url, headers=headers, data=json.dumps(data)) if response.status_code == 200: print('问答消息发送成功!') else: print('问答消息发送失败!') # 获取用户输入的问题 question = input('请输入您的问题:') # 根据问题生成回答 answer = '您的问题是:' + question + ',暂时没有找到答案。' for key in question_answer_dict: if key in question: answer = question_answer_dict[key] break # 发送问答消息 send_question_answer(answer) ``` 4. 在代码中,你需要将 `webhook_url` 替换成你自己钉钉机器人的 Webhook 地址,同时可以根据实际情况修改 `question_answer_dict` 字典中的问题和答案。 5. 运行代码后,会提示你输入问题。输入后,程序会根据问题生成回答,并将回答发送给钉钉机器人。 6. 最后,你可以在钉钉群内查看机器人发送的问答消息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuanzhoulvpi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值