This commit is contained in:
2025-08-19 13:44:03 +08:00
parent e41743643f
commit 267193ab37
2 changed files with 20 additions and 20 deletions

View File

@@ -44,6 +44,12 @@ class EsSearchUtil:
# 最大对话历史轮数
MAX_HISTORY_ROUNDS = 10
# 初始化停用词表
STOPWORDS = set(
['', '', '', '', '', '', '', '', '', '', '', '', '一个', '', '', '', '', '',
'', '', '', '', '', '没有', '', '', '自己', ''])
def __init__(self, es_config):
"""
初始化Elasticsearch搜索工具

View File

@@ -17,9 +17,6 @@ from ElasticSearch.Utils.EsSearchUtil import EsSearchUtil
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
# 初始化停用词表
STOPWORDS = set(['', '', '', '', '', '', '', '', '', '', '', '', '一个', '', '', '', '', '', '', '', '', '', '', '没有', '', '', '自己', ''])
# 初始化异步 OpenAI 客户端
client = AsyncOpenAI(
api_key=Config.ALY_LLM_API_KEY,
@@ -30,20 +27,6 @@ client = AsyncOpenAI(
search_util = EsSearchUtil(Config.ES_CONFIG)
def get_system_prompt():
"""获取系统提示"""
return """
你是一位平易近人且教学方法灵活的教师,通过引导学生自主学习来帮助他们掌握知识。
严格遵循以下教学规则:
1. 基于学生情况调整教学:如果已了解学生的年级水平和知识背景,应基于此调整教学内容和难度。
2. 基于现有知识构建:将新思想与学生已有的知识联系起来。
3. 引导而非灌输:使用问题、提示和小步骤,让学生自己发现答案。
4. 检查和强化:在讲解难点后,确认学生能够重述或应用这些概念。
5. 变化节奏:混合讲解、提问和互动活动,让教学像对话而非讲座。
最重要的是:不要直接给出答案,而是通过合作和基于学生已有知识的引导,帮助学生自己找到答案。
"""
async def lifespan(_: FastAPI):
yield
@@ -93,7 +76,7 @@ async def chat(request: fastapi.Request):
# 提取查询中的关键词作为额外标签 - 使用jieba分词
try:
seg_list = jieba.cut(query, cut_all=False) # 精确模式
keywords = [kw for kw in seg_list if kw.strip() and kw not in STOPWORDS and len(kw) > 1]
keywords = [kw for kw in seg_list if kw.strip() and kw not in search_util.STOPWORDS and len(kw) > 1]
keywords = keywords[:5]
tags.extend([f"keyword:{kw}" for kw in keywords])
logger.info(f"使用jieba分词提取的关键词: {keywords}")
@@ -131,7 +114,18 @@ async def chat(request: fastapi.Request):
student_context += f"- {key}: {value}\n"
# 5. 构建提示词
system_prompt = get_system_prompt()
system_prompt = """
你是一位平易近人且教学方法灵活的教师,通过引导学生自主学习来帮助他们掌握知识。
严格遵循以下教学规则:
1. 基于学生情况调整教学:如果已了解学生的年级水平和知识背景,应基于此调整教学内容和难度。
2. 基于现有知识构建:将新思想与学生已有的知识联系起来。
3. 引导而非灌输:使用问题、提示和小步骤,让学生自己发现答案。
4. 检查和强化:在讲解难点后,确认学生能够重述或应用这些概念。
5. 变化节奏:混合讲解、提问和互动活动,让教学像对话而非讲座。
最重要的是:不要直接给出答案,而是通过合作和基于学生已有知识的引导,帮助学生自己找到答案。
"""
# 添加学生信息到系统提示词
if user_id in search_util.student_info and search_util.student_info[user_id]:
@@ -183,7 +177,7 @@ async def chat(request: fastapi.Request):
answer_tags = [f"{user_id}_answer", f"time:{current_time.split()[0]}", f"session:{session_id}"]
try:
seg_list = jieba.cut(answer_text, cut_all=False)
answer_keywords = [kw for kw in seg_list if kw.strip() and kw not in STOPWORDS and len(kw) > 1]
answer_keywords = [kw for kw in seg_list if kw.strip() and kw not in search_util.STOPWORDS and len(kw) > 1]
answer_keywords = answer_keywords[:5]
answer_tags.extend([f"keyword:{kw}" for kw in answer_keywords])
except Exception as e: