sms_server/backend/services/functions.py
李寻欢 f2d5882573
All checks were successful
BuildImage / build-image (push) Successful in 1m3s
🆕 新增AI提取验证码功能
2025-03-25 09:37:35 +08:00

50 lines
1.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from typing import Optional
import re
from openai import OpenAI
from backend.config.settings import settings
def extract_code_with_context(sms_content: str) -> Optional[str]:
# 判断AI相关的三个环境变量是否都有值
# 如果有值调用AI接口
# 如果没有值,调用正则表达式
if settings.ai_base_url != "" and settings.ai_api_key != "" and settings.ai_model != "":
return _extract_code_with_ai(sms_content)
else:
return _extract_code_with_reg(sms_content)
def _extract_code_with_reg(sms_content: str) -> Optional[str]:
pattern = r'(?:验证码|auth|code)[^0-9]{0,20}(\d{4,8})'
match = re.search(pattern, sms_content, re.IGNORECASE)
if match:
return match.group(1)
fallback = re.findall(r'(\d{4,8})', sms_content)
return fallback[0] if fallback else None
def _extract_code_with_ai(sms_content: str) -> Optional[str]:
client = OpenAI(api_key=settings.api_key, base_url=settings.ai_base_url)
response = client.chat.completions.create(
messages=[
{
"role": "system",
"content": "你是一个验证码提取助手我会告诉你短信内容请将其中的验证码提取给我只需要返回验证码即可如果没有验证码请返回null不需要返回任何其他无关的内容。",
},
{
"role": "user",
"content": sms_content,
}
],
model=settings.ai_model,
)
code = response.choices[0].message.content
return code if code != "null" else None
def extract_phone_from_sim_slot(sim_slot: Optional[str]) -> Optional[str]:
if not sim_slot:
return None
match = re.search(r'1\d{10}', sim_slot)
if match:
return match.group(0)
return None