From 267193ab37118cf274adfb035177c02c5306ba31 Mon Sep 17 00:00:00 2001 From: HuangHai <10402852@qq.com> Date: Tue, 19 Aug 2025 13:44:03 +0800 Subject: [PATCH] 'commit' --- .../ElasticSearch/Utils/EsSearchUtil.py | 6 ++++ dsSchoolBuddy/Start.py | 34 ++++++++----------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/dsSchoolBuddy/ElasticSearch/Utils/EsSearchUtil.py b/dsSchoolBuddy/ElasticSearch/Utils/EsSearchUtil.py index 69f0d165..17aa2bec 100644 --- a/dsSchoolBuddy/ElasticSearch/Utils/EsSearchUtil.py +++ b/dsSchoolBuddy/ElasticSearch/Utils/EsSearchUtil.py @@ -44,6 +44,12 @@ class EsSearchUtil: # 最大对话历史轮数 MAX_HISTORY_ROUNDS = 10 + + # 初始化停用词表 + STOPWORDS = set( + ['的', '了', '在', '是', '我', '有', '和', '就', '不', '人', '都', '一', '一个', '上', '也', '很', '到', '说', + '要', '去', '你', '会', '着', '没有', '看', '好', '自己', '这']) + def __init__(self, es_config): """ 初始化Elasticsearch搜索工具 diff --git a/dsSchoolBuddy/Start.py b/dsSchoolBuddy/Start.py index d2c9d485..0f7704cc 100644 --- a/dsSchoolBuddy/Start.py +++ b/dsSchoolBuddy/Start.py @@ -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: