Commit 7b5c5015 authored by 于飞's avatar 于飞

当 用户的输入 匹配到 敏感词的时候,处理

parent a1ebdffb
...@@ -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()
......
...@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment