Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
D
db_gpt
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linyangyang
db_gpt
Commits
7b5c5015
Commit
7b5c5015
authored
Sep 10, 2024
by
于飞
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
当 用户的输入 匹配到 敏感词的时候,处理
parent
a1ebdffb
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
38 additions
and
8 deletions
+38
-8
filter.py
dbgpt/app/apps/utils/filter.py
+5
-2
api_v1.py
dbgpt/app/openapi/api_v1/api_v1.py
+33
-6
No files found.
dbgpt/app/apps/utils/filter.py
View file @
7b5c5015
...
@@ -68,6 +68,7 @@ class DFAFilter():
...
@@ -68,6 +68,7 @@ class DFAFilter():
message
=
message
.
lower
()
message
=
message
.
lower
()
ret
=
[]
ret
=
[]
start
=
0
start
=
0
matched_sensitives
=
[]
# List to store matched sensitive words
while
start
<
len
(
message
):
while
start
<
len
(
message
):
level
=
self
.
keyword_chains
level
=
self
.
keyword_chains
step_ins
=
0
step_ins
=
0
...
@@ -77,6 +78,8 @@ class DFAFilter():
...
@@ -77,6 +78,8 @@ class DFAFilter():
if
self
.
delimit
not
in
level
[
char
]:
if
self
.
delimit
not
in
level
[
char
]:
level
=
level
[
char
]
level
=
level
[
char
]
else
:
else
:
# Store the matched sensitive word
matched_sensitives
.
append
(
message
[
start
:
start
+
step_ins
])
ret
.
append
(
repl
*
step_ins
)
ret
.
append
(
repl
*
step_ins
)
start
+=
step_ins
-
1
start
+=
step_ins
-
1
is_sensitive
=
True
is_sensitive
=
True
...
@@ -88,8 +91,8 @@ class DFAFilter():
...
@@ -88,8 +91,8 @@ class DFAFilter():
ret
.
append
(
message
[
start
])
ret
.
append
(
message
[
start
])
start
+=
1
start
+=
1
#
return 返回两
个参数
#
return 返回三
个参数
return
''
.
join
(
ret
),
is_sensitive
return
''
.
join
(
ret
),
is_sensitive
,
matched_sensitives
mydfafiter
=
DFAFilter
()
mydfafiter
=
DFAFilter
()
...
...
dbgpt/app/openapi/api_v1/api_v1.py
View file @
7b5c5015
...
@@ -363,17 +363,17 @@ async def chat_completions(
...
@@ -363,17 +363,17 @@ async def chat_completions(
await
mydfafiter
.
parse_from_db
(
auth
.
db
)
await
mydfafiter
.
parse_from_db
(
auth
.
db
)
# 先判断敏感词
# 先判断敏感词
dfa_result
,
is_sensitive
=
mydfafiter
.
filter
(
dialogue
.
user_input
,
"*"
)
dfa_result
,
is_sensitive
,
matched_sensitives
=
mydfafiter
.
filter
(
dialogue
.
user_input
,
"*"
)
print
(
dfa_result
)
print
(
f
"--->敏感词替换后的问题:{dfa_result}"
)
print
(
f
"--->匹配到的敏感词列表:{matched_sensitives}"
)
if
is_sensitive
:
if
is_sensitive
:
print
(
'用户输入有敏感词'
)
print
(
'用户输入有敏感词'
)
result
=
{
'code'
:
200
,
'message'
:
'success'
,
result
=
f
"非常抱歉,您的提问中包含了部分敏感词汇:{matched_sensitives},我作为AI,在回答时需遵守相关法律法规和政策,我们系统对特定敏感内容进行了限制。请您尝试调整或重新组织您的问题,避开这些敏感点,我将非常乐意为您提供准确且有帮助的回答。"
'data'
:
[{
'type'
:
3
,
'word_name'
:
'111'
,
'is_sensitive'
:
1
,
'user_input'
:
dfa_result
}]}
return
StreamingResponse
(
return
StreamingResponse
(
'error:1001'
,
stream_generator_sensitive
(
dialogue
.
incremental
,
result
)
,
headers
=
headers
,
headers
=
headers
,
media_type
=
"text/
event-stream
"
,
media_type
=
"text/
plain
"
,
)
)
domain_type
=
_parse_domain_type
(
dialogue
)
domain_type
=
_parse_domain_type
(
dialogue
)
...
@@ -472,6 +472,33 @@ async def no_stream_generator(chat):
...
@@ -472,6 +472,33 @@ async def no_stream_generator(chat):
msg
=
await
chat
.
nostream_call
()
msg
=
await
chat
.
nostream_call
()
yield
f
"data: {msg}
\n\n
"
yield
f
"data: {msg}
\n\n
"
async
def
stream_call_sensitive_run_one
(
self
):
"""
只运行一次
判断出用户输入有敏感词的时候,不需要调用大模型
"""
last_output
=
None
yield
last_output
async
def
stream_generator_sensitive
(
incremental
:
bool
,
dfa_result
:
str
,
):
"""
Generate streaming responses
当用户输入有敏感词的时候,统一回答
"""
span
=
root_tracer
.
start_span
(
"stream_generator_sensitive"
)
async
for
_
in
stream_call_sensitive_run_one
(
1
):
if
incremental
:
yield
f
"data: {dfa_result}
\n\n
"
else
:
# TODO generate an openai-compatible streaming responses
yield
f
"data: {dfa_result}
\n\n
"
await
asyncio
.
sleep
(
0.02
)
if
incremental
:
yield
"data: [DONE]
\n\n
"
span
.
end
()
async
def
stream_generator
(
chat
,
incremental
:
bool
,
model_name
:
str
):
async
def
stream_generator
(
chat
,
incremental
:
bool
,
model_name
:
str
):
"""Generate streaming responses
"""Generate streaming responses
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment