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