简单设计自动客服

该系统设计用于内部使用,通过Python实现,使用FastAPI构建接口,利用字符串相似度算法(difflib)处理问答匹配,不再依赖Elasticsearch,数据存储在内存中。用户输入问题,系统去除停用词后,找到最相似的问题标题作为回复,提供解决方案链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:设计一个简单的自动客服系统,内部使用,用于给其他部门查看操作手册简单问题处理方案之类

思路:在之前的公司设计过类似的系统的,不过因为之前公司数据量比较大,所以使用的是elasticsearch,然后是mysql数据同步elasticsearch,使用elasticsearch的分词器,检索数据,但是现在数据量很小,用不了elasticsearch,所以我就使用字符串相似度来查找相似的数据当作回复数据

以下代码是最简单的实现,不涉及数据库

实现后的截图:
在这里插入图片描述

后台目录:

  • fastapi
    • erpwenti.py【接口处理】
    • main.py【主入口】
    • tingyongci.txt【停用词】

erpwenti.py【如果想数据多一点可以把判断的相似度值修改小一点】:

from main import app
import difflib
from pydantic import BaseModel
# from sqlalchemy import text
# from db_setting import session_scope

# 停用词
tingyongcis = [line.strip() for line in open('tingyongci.txt',encoding='UTF-8').readlines()]

# 返回格式
def returnErrorMap(str):
    return {'code': 400, 'mes': str}
def returnOkMap(object):
    return {'code': 0, 'mes': object}

# 请求参数
class KeyWord(BaseModel):
    keyword: str

# 问答
@app.post("/yibanwenti")
def yibanwenti(map: KeyWord):
    keyword = map.keyword or None
    if not keyword:
        return returnErrorMap('请输入内容!')
    # 去掉停用词
    for tingc in tingyongcis:
        keyword = keyword.replace(tingc, '')
    
    # # 获取所有标题和id
    # sql = 'select id,biaoti from xinxi_wentifangan'
    # with session_scope(bind='mysql2') as s:
    #     res = s.execute(text(sql)).fetchall()

    res = [{'biaoti':'测试新增', 'id':1}, {'biaoti':'测试标题的什么呀', 'id':2}, {'biaoti':'测试上传图片是否正常','id':3},{'biaoti':'insert测试', 'id':4}]
    xsdmap = {}
    mapx = {}
    for dbdata in res:
        # biaoti = dbdata.biaoti
        # id = dbdata.id
        biaoti = dbdata.get('biaoti')
        id = dbdata.get('id')
        # 字符串相似度
        xiangsidu = difflib.SequenceMatcher(None, keyword, biaoti).quick_ratio()
        print('====',xiangsidu)
        if xiangsidu<=0.5:
            continue
        xsdmap[biaoti] = xiangsidu
        mapx[biaoti] = id
    if not xsdmap:
        return returnOkMap("没有找到合适的解决方案<br/>请重新组织关键词或者关键短语") 
    
    # 根据字符串相似排序,取前五条
    pxxsdlist = [{'name':data[0], 'id': mapx.get(data[0])} for data in  sorted(xsdmap.items(), key = lambda x:x[1], reverse = True)][:4]
    strx = '以下是小德给你找到的解决方案:<br/>'
    for mapdata in pxxsdlist:
        strx = strx + f'<a href=#/wentifangan?id={str(mapdata.get("id"))} target="blank">{mapdata.get("name")}</a><br/>'
    strx = strx + '如果没有你想要的解决方案,请重新组织关键词或者关键短语'
    return returnOkMap(strx)

# 详情数据
@app.post("/xiangqing")
def xiangqing(map: KeyWord):
    keyword = map.keyword or None
    if not keyword:
        return returnErrorMap('请输入内容!')
    # # 根据id获取详情
    # sql = f'select id,biaoti, neirong from xinxi_wentifangan where id={keyword}'
    # with session_scope(bind='mysql2') as s:
    #     res = s.execute(text(sql)).fetchone()
    res = {'id':1, 'biaoti':'测试新增', 'neirong':'<p>测试新增</p>'}
    xxmap = {}
    if res:
        xxmap = {
            'biaoti': res.biaoti,
            'neirong': res.neirong
        }
    return returnOkMap(xxmap)

main.py:

from fastapi import FastAPI
import uvicorn
import erpwenti
 
# 类似于 app = Flask(__name__)
app = FastAPI()
# 在 Windows 中必须加上 if __name__ == "__main__"
# 否则会抛出 RuntimeError: This event loop is already running
if __name__ == "__main__":
    # 启动服务,因为我们这个文件叫做 main.py
    # 所以需要启动 main.py 里面的 app
    # 第一个参数 "main:app" 就表示这个含义
    # 然后是 host 和 port 表示监听的 ip 和端口
    uvicorn.run("main:app", host="0.0.0.0", port=5555, reload=True)
    # uvicorn.run("main:app", host="0.0.0.0", port=5555, log_level="info")
# python main.py >fastapi.log 2>&1 &

tingyongci.txt【这个停用词表是将网上哈工大,百度等几个停用词表合并的】:

因着
&
whither
刚好
formerly
以下
anywhere
无宁
[②f]
什么
儿
反之则
但是
what's
乃至于
like
借
由此
其二
three
no
岂止
Ⅲ
忽然
hereafter
[②e]
倘然
often
呸
这些
关于
为什么
不再
巴
more
can
此地
这么些
allows
难说
[①e]
为了
≈
距
成年累月
孰知
反映
必须
hereupon
川流不息
不尽然
先后
此后
俺
传说
[④d]
到
几乎
--
每天
[③①]
一一
具体
大略
于是乎
宣布
apart
than
whom
非特
凡是
不光
near
不
{-
如常
朝着
above
除开
every
还有
不可抗拒
各自
比如
became
最後
该当
onto
或曰
hereby
doing
[⑦]
不独
别人
where's
这种
砰
along
另一个
拦腰
其中
离
中间
共同
此次
照
难道说
至
不对
saying
其实
转动
we
beyond
only
说明
自己
何止
[③e]
只是
↑
不可开交
八成
甭
five
γ
累次
豁然
全部
他们
且不说
绝非
强烈
表明
不至于
扑通
常言说
权时
between
极端
keeps
本
立马
正常
扩大
只限
若夫
此时
-β
不止
极了
当头
something
cause
慢说
咧
引起
尽可能
ever
极为
一片
转贴
相等
specified
呜呼
借以
seems
hers
un
它的
何须
罢了
不过
随着
後来
独自
吧
各级
多数
呢
猛然间
looking
.一
由于
awfully
him
固然
总是
从未
嗯
都
>
name
所在
much
连日
该
马上
允许
insofar
on
instead
如同
在下
那麽
plus
did
广大
果真
far
inner
causes
动不动
当然
right
against
那末
进而
时候
及时
/
练习
actually
要求
it
might
恰如
乘虚
反倒
took
故意
就
则甚
5:0
防止
down
立刻
是否
全年
每时每刻
每个
unfortunately
all
gives
据说
这样
哈
seven
连日来
个别
各种
所有
[-
▲
可是
要么
又
hello
借此
较比
you'll
将
已经
eight
将近
上面
former
嘿嘿
准备
这
nothing
0
therein
适应
嗳
wants
except
即若
宁肯
嘛
长话短说
否则
}>
老是
一则
不亦乐乎
regarding
[③F]
处处
③]
gets
以外
譬如
be
c's
理应
[⑧]
倒不如
anybody
及至
此中
一直
我的
second
可以
宁愿
共总
并无
呕
单纯
果然
遵照
够瞧的
切勿
it's
really
他
呼哧
从优
可见
故此
附近
一来
you'd
抽冷子
另一方面
当下
着
specify
保持
般的
上述
以后
首先
从新
大大
[⑤e]
不由得
大凡
完全
真正
nearly
们
many
多多少少
大体上
①
认识
趁机
比照
上来
先不先
反之
别是
third
⑧
任
但凡
...................
按
seeming
相信
a's
nor
前面
less
那些
方便
were
自身
[①i]
ZXFITL
[④]
每逢
甚而
只要
几时
本着
尽心尽力
别处
缕缕
嘿
again
according
即将
latterly
一个
下列
up
……
进步
said
thereby
我是
[①①]
多少
hopefully
那样
联袂
双方
[②⑩]
don't
存在
contain
挨家挨户
适当
×××
极力
someone
indeed
重要
或是
-[*]-
haven't
假若
局外
莫不然
顷刻
can't
本人
tends
风雨无阻
等到
=″
常言说得好
不止一次
任务
][
默然
same
喂
俺们
突出
×
)、
彻夜
乘机
与
whereupon
[②⑧]
且
从来
从此以后
哪天
获得
──
对方
A
[②B]
described
被
从无到有
自后
有效
才能
挨门挨户
对应
通常
犹自
thats
;
indicate
恰恰相反
战斗
[⑩]
必将
难怪
达旦
随
tried
-
多亏
非得
针对
并没有
since
不知不觉
elsewhere
不拘
好
[①④]
以及
+ξ
ain't
哪边
如此等等
近来
理当
」
现在
要不是
起初
当真
yours
usually
何时
尽
因为
:
一致
再者
路经
以前
敞开儿
ignored
待到
呼啦
纵使
自各儿
尤其
鄙人
please
={
containing
ex
无法
日渐
me
经
weren't
开始
介于
[①]
而且
开展
几
归
到目前为止
until
we've
一次
啊哟
据此
use
mean
严重
怎奈
either
深入
://
明确
*
wonder
之後
您
哦
到处
差一点
这会儿
据我所知
倘若
[④a]
曾经
merely
two
先生
下
绝对
特别是
什么样
corresponding
而后
⑥
concerning
他的
大多
anyways
迫于
尽早
无论
不日
朝
thoroughly
viz
as
·
一定
就此
何处
昂然
whatever
一方面
当前
要
从事
does
间或
不少
嘎登
彻底
伟大
交口
欢迎
大概
策略地
В
来着
"
go
over
避免
唉
帮助
个人
至若
thru
goes
毫无例外
巴巴
~
起头
currently
也好
究竟
不尽
不然
Δ
who
趁热
单单
whose
似乎
不时
[①h]
associated
话说
诸
<λ
不外乎
之所以
哪些
大量
forth
取道
不但
恰好
受到
之一
不迭
[②h]
反过来
隔日
犹且
忽地
上去
”,
lately
庶乎
全身心
fifth
哼
whoever
从重
哎哟
诸位
yes
实际
用
以至于
‘
followed
目前
顷刻之间
良好
及其
很少
按说
f]
neither
乃
继续
仍然
充其极
six
ng昉
he
焉
以免
[③d]
it'll
清楚
不仅
归根结底
再有
过去
这边
来讲
不常
大批
即使
⑦
look
乌乎
wasn't
截至
overall
还是
鉴于
anyhow
不管
'
谁料
毫无
根本
是不是
居然
加强
简直
2
itself
己
诸如
novel
倘
似的
others
went
密切
满足
立时
您是
日臻
不单
大力
今后
不然的话
aren't
自家
争取
从古到今
全面
who's
表示
简言之
here's
they
挨着
whether
②c
立地
为
mostly
这麽
certain
失去
默默地
曾
结果
一旦
甚至
如此
总的来看
]
with
更为
兼之
抑或
tell
unless
尽心竭力
whereby
just
或多或少
下去
趁着
常常
LI
可能
1.
起首
冲
采取
无
[①②]
属于
unlikely
已
强调
的话
[②⑥]
thus
作为
咦
大
?
about
直接
respectively
更加
e]
next
这点
none
另悉
看起来
大不了
加上
宁
背靠背
ones
一番
接下来
sup
sent
哈哈
另方面
zero
may
每
very
後面
另行
using
latter
恰逢
seem
它们
from
为此
所幸
既往
人
只当
[③a]
像
[①o]
每当
】
能够
you're
偏偏
莫若
差不多
[⑤]
由
趁
indicates
edu
届时
向使
自打
各个
牢牢
had
这般
1
大家
顺
遭到
一.
实现
nd
多多益善
欤
liked
据实
略加
有所
ourselves
own
趁早
甚至于
而论
彼此
lest
加以
临
却
=
your
few
依靠
her
具体地说
前进
之
广泛
自
soon
哪怕
看见
[②④
几度
叮咚
不仅仅是
but
大致
挨个
尽管如此
以
譬喻
上下
哇
μ
纵
appreciate
hence
way
其他
always
这里
ZT
accordingly
个
exp
aside
光是
different
毋宁
downwards
and
喏
各式
两者
你
不满
unto
com
如若
维持
【
[⑤b]
替
大面儿上
绝不
旁人
说说
只消
wouldn't
的
hither
5
yet
替代
那里
出现
积极
继后
处在
let
显著
看到
看
呵
除此之外
坚决
过于
believe
内
呵呵
整个
可
serious
嘻
哎呀
达到
日复一日
今後
来看
一样
哪儿
即令
[②g]
呆呆地
岂但
顿时
.
help
使用
大抵
…………………………………………………③
今
与其说
]
moreover
哪样
现代
竟而
inc
gone
theres
considering
并非
appropriate
却不
特点
because
何
[③h]
于是
!
anything
my
背地里
uses
another
they're
without
不胜
猛然
等等
丰富
亲眼
done
如是
全力
原来
立即
怎么
则
所
[②a]
她的
′|
it'd
[①⑦]
过
⑤
try
非但
of
倘使
随著
其余
that
除此而外
赶早不赶晚
非常
不定
举凡
贼死
再次
互相
切切
--
恰巧
之类
several
跟
因此
以来
前后
倍加
更进一步
不曾
啊哈
经常
造成
加之
奋勇
eg
来
sometimes
二来
遇到
he's
小
上
follows
愤然
多年前
谁
谁知
与否
thanks
+
几经
she
眨眼
不能
sometime
before
particularly
直到
逐渐
[①⑨]
特殊
一转眼
provides
望
处理
off
来得及
您们
极其
take
upon
老老实实
据称
而言
t's
再则
因
relatively
sorry
such
大都
何尝
<
结合
那么些
7
而是
但愿
别说
真是
它们的
toward
迅速
Ψ
8
φ.
example
连连
where
故而
平素
人们
不比
』
[②d]
行为
当中
接著
只
known
这时
多次
一时
或许
多
now
嗡嗡
不只
注意
哗
哼唷
当
敢于
any
那边
when
除去
shall
通过
do
嗬
shouldn't
这次
藉以
还要
isn't
somehow
知道
唯有
value
哗啦
尔
inward
按照
together
[①C]
三番五次
出于
能
连
truly
也
later
复杂
仍
’‘
however
entirely
由是
welcome
简而言之
而又
looks
<<
有著
虽则
anyone
[②②]
略微
充其量
trying
wish
will
哩
今天
其次
相应
云尔
[⑨]
从严
为主
如上
么
多么
组成
一边
而况
four
急匆匆
hardly
怪不得
there
为什麽
陡然
促进
here
⑩
对待
并
显然
first
总而言之
在于
一面
那个
虽然
穷年累月
不可
继之
becoming
成心
种
一天
rather
何妨
为着
etc
适用
刚才
necessary
就是说
0:2
最近
有
~+
regards
往
既然
任凭
与其
不免
何必
瑟瑟
咱们
很
themselves
任何
useful
认为
大张旗鼓
hadn't
基本
方才
alone
啊
虽
有关
尚且
除非
各人
尽量
专门
i'm
exactly
=[
尔后
各
[]
brief
些
into
分别
连袂
what
qv
[②⑦]
坚持
啊呀
[⑤d]
乘隙
yourselves
好的
率尔
below
不经意
并没
若
[①⑤]
多年来
[②③]
hi
...
away
规定
不特
当儿
有着
应该
从小
■
besides
we're
[④c]
不得已
they'd
尽如人意
12%
zz
用来
末##末
———
使
〔
不久
和
假如
好象
不够
当时
周围
严格
方能
are
consequently
对比
照着
必定
当庭
*
矣
behind
@
各地
人家
got
myself
给
noone
需要
精光
++
哪个
宁可
如上所述
somebody
趁势
同样
也罢
中小
动辄
thanx
心里
too
有点
不惟
觉得
不外
[③b]
不敢
他人
他是
>λ
c'mon
或
'
某
不巧
是
赖以
oh
就是
them
去
如
较
莫不
一般
别的
安全
they'll
为何
只怕
nevertheless
倍感
even
不成
赶快
.
~±
从头
此外
依据
即是说
6
>
being
乎
从而
〕〔
.数
meanwhile
待
有时
全都
need
likely
is
hasn't
勃然
出去
恍然
换句话说
其后
不料
不必
召开
又及
3
[⑤]]
那般
thank
secondly
另
better
从此
}
综上所述
咋
从
正在
whenever
其
且说
也是
打开天窗说亮话
willing
而外
could
perhaps
凭
有及
某些
最大
数/
......
上升
伙同
亲手
如今
完成
从轻
inasmuch
彼时
轰然
howbeit
叫做
起来
啷当
进来
那时
何苦
得到
毫不
尽然
比
)
-
连声
挨门逐户
没有
seeing
每年
course
throughout
ZZ
设或
看来
何乐而不为
具体说来
拿
co
have
普通
甚或
you
行动
vs
一则通过
their
changes
以便
following
反应
∈[
比方
顺着
therefore
甚么
运用
normally
some
[⑤a]
each
⑨
尽快
allow
nobody
for
ie
after
相对
嗡
happens
然而
ours
出来
亲身
其它
大多数
分期分批
凝神
倒不如说
从古至今
然後
这就是说
总的说来
definitely
亦
cant
断然
毫无保留地
隔夜
certainly
most
《
有些
要不然
)÷(1-
对于
also
若是
okay
know
每每
the
长此下去
ask
regardless
④
though
across
to
thereafter
ought
请勿
纵令
成为
并不
吗
从中
累年
开外
得
有力
吓
herein
不得不
按时
应当
皆可
keep
——
理该
喽
./
enough
随后
全体
saw
you've
比如说
needs
再者说
[④e]
still
一些
刚巧
好在
切莫
举行
不择手段
反而
换言之
类如
taken
最
不起
greetings
日益
元/吨
reasonably
specifying
new
此间
old
呀
接着
[①E]
哟
#
相同
几番
这么样
反之亦然
略为
wherever
于
㈧
得了
啪达
暗中
没奈何
除此以外
怎么样
以期
截然
大约
maybe
或者
与此同时
移动
[⑤f]
正如
进去
打从
不断
许多
must
around
多多
want
意思
暗自
why
屡次三番
反手
边
不怕
赶
并肩
相反
以上
看样子
不限
也就是说
~~~~
看看
如何
冒
还
2.3%
主张
若非
placed
充分
沿着
i've
哎
[①c]
这一来
既
从早到晚
相似
三天两头
不会
极大
不大
[⑥]
least
某某
存心
了解
嘎
恰似
although
据悉
全然
咱
—
“
极度
别管
whereafter
amongst
按期
不问
再说
看出
将要
容易
呗
较之
不能不
挨次
如前所述
一切
产生
巨大
逐步
if
become
becomes
既是
这儿
beside
》
屡屡
高兴
即刻
根据
碰巧
一起
向
最好
至于
在
屡次
格外
乃至
弹指之间
cannot
”
归齐
很多
正巧
只有
论
着呢
∪φ∈
b]
#
other
自从
看上去
即
how
匆匆
[①⑥]
十分
various
一何
才
转变
人人
因而
让
theirs
亲口
近年来
呃
::
除却
如期
认真
不妨
要不
there's
率然
此处
就要
哪
per
twice
’
姑且
高低
说来
归根到底
何以
到底
不管怎样
]∧′=[
或则
thorough
[①⑧]
从今以后
除此
一下
knows
论说
不同
[②i]
self
设若
至今
千万千万
代替
所以
rd
=(
就算
尔尔
反倒是
everywhere
so
叫
再
到头
presumably
当口儿
everything
/
有利
临到
towards
打
et
one
自个儿
难得
得起
然后
=
难道
同
喔唷
whence
恰恰
形成
正是
二话没说
集中
起
couldn't
第二
得天独厚
下面
seemed
第
要是
[①f]
后
〉
当即
决定
基于
最后
everyone
次第
不已
明显
℃
.日
namely
具体来说
决不
thence
有的是
尔等
何况
a]
seen
啦
所谓
莫非
然则
当着
consider
下来
常言道
不如
4
以後
趁便
especially
另外
将才
竟然
his
despite
并不是
非独
[②
been
c]
掌握
这么
didn't
管
『
依
怎麽
[①B]
=-
即或
敢情
嘘
相对而言
an
当场
而
巩固
若果
长期以来
起先
范围
从速
便于
不是
矣哉
comes
ltd
哉
经过
三番两次
come
不得了
〕
otherwise
比及
始而
sure
_
较为
nowhere
向着
almost
做到
确定
按理
谁人
不下
was
依照
say
through
嘎嘎
阿
+
已矣
,也
别
连同
那么样
把
诚然
随时
i'll
进行
反过来说
沿
顶多
必要
的确
$
non
&
诚如
clearly
see
而已
联系
啐
你们
会
恐怕
get
那会儿
遵循
[*]
由此可见
不若
她是
偶而
偶尔
同一
吧哒
孰料
方面
最高
yourself
不要
各位
少数
at
本身
但
came
它
//
ok
sensible
then
里面
think
available
顷刻间
anyway
never
倘或
兮
重大
its
来说
再其次
these
纵然
有的
仍旧
everybody
庶几
[③]
愿意
contains
already
接连不断
紧接着
。
此
等
纯粹
won't
考虑
不仅仅
云云
非徒
in
)
甚且
Lex
前此
%
during
不怎么
怎
为止
啥
probably
来不及
凑巧
二话不说
re
that's
;
best
possible
日见
怎么办
合理
R.L.
致
getting
这么点儿
从不
indicated
之后
[②G]
himself
able
对
越是
outside
后面
变成
[①A]
正值
了
那
wherein
[①g]
你是
这个
决非
says
asking
省得
即便
因了
主要
we'd
矣乎
尽管
<Δ
obviously
appear
zt
beforehand
<±
比较
过来
虽说
哪年
[②b]
<
余外
暗地里
has
乘势
什麽
furthermore
doesn't
[②j]
总的来说
总结
突然
迟早
不一
while
据
within
sub
′∈
其一
应用
tries
[①③]
必然
加入
毕竟
限制
部分
使得
先後
我
以为
further
腾
selves
last
well
=☆
即如
之前
往往
如次
前者
傥然
afterwards
thereupon
后来
得出
传闻
不了
能否
<φ
近几年来
她们
靠
out
which
公然
故
,
呜
普遍
况且
little
左右
gotten
[
?
we'll
今年
[②①]
年复一年
你的
[①a]
quite
going
herself
就是了
除
后者
例如
是的
到了儿
mainly
nine
not
咚
不消
并排
以故
immediate
来自
到头来
[②⑤]
let's
[①d]
(
φ
不变
那么
[③⑩]
分头
kept
可好
:
当地
凡
once
它是
切不可
如其
除外
不得
}
哪里
她
并且
同时
莫如
under
某个
[④b]
whereas
吱
should
else
起见
地
they've
进入
those
i'd
[①D]
设使
(
以至
基本上
快要
us
我们
seriously
que
彼
凭借
除了
9
倒是
→
among
th
given
used
那儿
②
如果
绝顶
岂非
不力
如下
相当
沙沙
不论
不足
this
乘
[
[②]
一
having
whole
_
本地
万一
both
重新
③
就地
[③c]
[③g]
问题
漫说
怎样
惟其
[②c]
am
具有
亲自
somewhere
by
or
particular
somewhat
、
者
假使
继而
构成
从宽
惯常
取得
》),
比起
及
our
以致
是以
would
大举
,
总之
via
咳
企图
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值