diff --git a/dsLightRag/Routes/QA.py b/dsLightRag/Routes/QA.py index e58cebc4..356a46f5 100644 --- a/dsLightRag/Routes/QA.py +++ b/dsLightRag/Routes/QA.py @@ -27,6 +27,7 @@ client = AsyncOpenAI( # 初始化 ElasticSearch 工具 search_util = EsSearchUtil(Config.ES_CONFIG) + @router.post("/chat") async def chat(request: fastapi.Request): """ @@ -37,6 +38,8 @@ async def chat(request: fastapi.Request): data = await request.json() user_id = data.get('user_id', 'anonymous') query = data.get('query', '') + type_id = data.get('type_id', '1') # 1-教学模式,2-对话模式 + yunxiao_sample = data.get('yunxiao_sample', False) # 是不是给长春云校做例子 session_id = data.get('session_id', str(uuid.uuid4())) # 获取或生成会话ID include_history = data.get('include_history', True) @@ -96,6 +99,9 @@ async def chat(request: fastapi.Request): for i, (user_msg, ai_msg) in enumerate(recent_history, 1): history_context += f"[对话 {i}] 用户: {user_msg}\n" history_context += f"[对话 {i}] 老师: {ai_msg}\n" + if yunxiao_sample: + with open(r"D:\dsWork\dsProject\dsLightRag\static\YunXiao.txt", "r", encoding="utf-8") as f: + history_context += f"[讨论的内容] " + f.read() + "\n" # 4. 构建学生信息上下文 student_context = "" @@ -121,6 +127,9 @@ async def chat(request: fastapi.Request): 最重要的是:不要直接给出答案,而是通过合作和基于学生已有知识的引导,帮助学生自己找到答案。 """ + if type_id == 2: + system_prompt = "你是一位具有丰富经验的K12教师,可以解答学生提出的各类问题。" + # 添加学生信息到系统提示词 if user_id in search_util.student_info and search_util.student_info[user_id]: student_info_str = "\n\n学生基础信息:\n" @@ -171,7 +180,8 @@ 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 search_util.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: @@ -201,4 +211,3 @@ async def chat(request: fastapi.Request): except Exception as e: logger.error(f"聊天接口异常: {str(e)}") raise HTTPException(status_code=500, detail=f"处理请求失败: {str(e)}") - diff --git a/dsLightRag/Routes/TeachingModel/tasks/__pycache__/BackgroundTasks.cpython-310.pyc b/dsLightRag/Routes/TeachingModel/tasks/__pycache__/BackgroundTasks.cpython-310.pyc index c95abd0c..6a5846b5 100644 Binary files a/dsLightRag/Routes/TeachingModel/tasks/__pycache__/BackgroundTasks.cpython-310.pyc and b/dsLightRag/Routes/TeachingModel/tasks/__pycache__/BackgroundTasks.cpython-310.pyc differ diff --git a/dsLightRag/Routes/__pycache__/QA.cpython-310.pyc b/dsLightRag/Routes/__pycache__/QA.cpython-310.pyc index e913e574..26fd0ed9 100644 Binary files a/dsLightRag/Routes/__pycache__/QA.cpython-310.pyc and b/dsLightRag/Routes/__pycache__/QA.cpython-310.pyc differ diff --git a/dsLightRag/Util/__pycache__/DocxUtil.cpython-310.pyc b/dsLightRag/Util/__pycache__/DocxUtil.cpython-310.pyc index 39feec3a..a0c11cb4 100644 Binary files a/dsLightRag/Util/__pycache__/DocxUtil.cpython-310.pyc and b/dsLightRag/Util/__pycache__/DocxUtil.cpython-310.pyc differ diff --git a/dsLightRag/static/YunXiao.txt b/dsLightRag/static/YunXiao.txt new file mode 100644 index 00000000..80c41518 --- /dev/null +++ b/dsLightRag/static/YunXiao.txt @@ -0,0 +1,47 @@ +### 代数式与整式复习资料 一、代数式 1. 代数式的概念 +由数和字母用运算符号连接所成的式子称为代数式。特别的,单独的一个数或一个字母也是代数式。 + 2. 代数式的书写规则 +- 如果式子中出现了乘号,通常写作点或者省略不写。 +- 数字与字母相乘时,常把数字放在字母的前面。 +- 如果出现了除法,通常写成分数的形式。 3. 列代数式示例 +- 某瓜子的单价为16元每千克,购买N千克:16N元。 +- 1500米跑步测试,某同学跑完全程的成绩是T秒,平均速度:1500/T 米每秒。 +- 练习本单价1元,圆珠笔单价2元,买A本练习本和B支圆珠笔的总价:A + 2B 元(带单位的相加或相减式子要用括号括起来)。 4. 代数式的值 +一般的,用数值来代替代数式中的字母,按照代数式中的运算关系,计算得出的结果,称为代数式的值。 + 5. 代数式求值方法 +- 直接代入法:例如当A=2,B=-1,C=-30时,求B²-4AC的值,直接代入计算得25。 +- 整体代入法:例如若A²+2A-1=0,求2A²+4A-1的值,可由A²+2A=1,整体代入得2×1-1=1。 二、整式 1. 整式的相关概念 +- 整式:单项式和多项式统称为整式。 +- 单项式:由数和字母的乘积组成的代数式,单独的一个数或者一个字母也是单项式。 +- 单项式的次数:所有字母的指数和。 +- 单项式的系数:单项式中的数字因数(注意负号)。 +- 多项式:几个单项式的和。 +- 多项式的项:多项式中的每个单项式,不含字母的项叫做常数项。 +- 多项式的次数:多项式里次数最高项的次数。 2. 整式的加减运算 +- 同类项:所含字母相同,并且相同字母的指数也相同的项。 +- 合并同类项法则:系数相加减,字母和字母的指数保持不变。 +- 去括号法则:括号前是正号,去掉括号后各项不变号;括号前是负号,去掉括号后各项都变号。 3. 整式的乘法运算 +- 幂的运算: + - 同底数幂相乘:底数不变,指数相加(a^m · a^n = a^(m+n))。 + - 幂的乘方:底数不变,指数相乘((a^m)^n = a^(mn))。 + - 积的乘方:各因式分别乘方,再把所得的幂相乘((ab)^n = a^n b^n)。 +- 单项式与单项式相乘:系数、相同字母的幂分别相乘,单独的字母连同指数作为积的因式。 +- 单项式与多项式相乘:用单项式去乘多项式中的每一项(m(a+b+c) = ma+mb+mc)。 +- 多项式与多项式相乘:用一个多项式中的每一项分别乘以另一个多项式中的每一项((m+n)(a+b) = ma+mb+na+nb)。 4. 乘法公式 +- 平方差公式:两数的和乘以这两数的差等于两数的平方差((a+b)(a-b) = a²-b²)。 +- 完全平方公式:两数的和(或差)的完全平方等于两数的平方和加上(或减去)它们乘积的二倍((a±b)² = a²±2ab+b²)。 +- 常见恒等变换:a²+b² = (a+b)²-2ab = (a-b)²+2ab;(a+b)² = (a-b)²+4ab。 5. 整式的除法运算 +- 同底数幂相除:底数不变,指数相减(a^m ÷ a^n = a^(m-n),a≠0)。 +- 单项式除以单项式:系数、相同字母的幂分别相除,单独的字母连同指数作为商的因式。 +- 多项式除以单项式:用多项式的每一项除以单项式,再把所得的商相加。 6. 因式分解 +- 定义:把一个多项式化成几个整式的乘积的形式(整式乘法的逆运算)。 +- 方法: + - 提公因式法:如果多项式中含有相同的因式,提取出来(ma+mb+mc = m(a+b+c))。 + - 公式法:利用平方差公式(a²-b² = (a+b)(a-b))和完全平方公式(a²±2ab+b² = (a±b)²)进行分解。 +- 步骤:一提(提公因式)、二套(套公式)、三检验(分解到不能再分解为止)。 7. 因式分解示例 +- x³-9x = x(x²-9) = x(x+3)(x-3) +- 16x⁴-1 = (4x²+1)(4x²-1) = (4x²+1)(2x+1)(2x-1) +- -9x²y+6xy²-y³ = -y(9x²-6xy+y²) = -y(3x-y)² +- (2a-b)²+8ab = 4a²-4ab+b²+8ab = 4a²+4ab+b² = (2a+b)² +### 总结 +通过以上复习,应熟练掌握代数式的概念及求值方法,整式的相关概念,整式的加减、乘除运算,乘法公式的应用以及因式分解的方法和步骤。 \ No newline at end of file diff --git a/dsSchoolBuddy/TestStart.py b/dsSchoolBuddy/TestStart.py index 33185407..c58ad077 100644 --- a/dsSchoolBuddy/TestStart.py +++ b/dsSchoolBuddy/TestStart.py @@ -23,16 +23,19 @@ MIN_QUERY_INTERVAL = 1 last_query_time = 0 +# type_id = data.get('type_id', '1') # 1-教学模式,2-对话模式 +# yunxiao_sample = data.get('yunxiao_sample', False) # 是不是给长春云校做例子 + def send_message(query): """发送消息到聊天API并接收流式响应""" global last_query_time current_time = time.time() - + # 检查查询间隔 if current_time - last_query_time < MIN_QUERY_INTERVAL: print(f"\n请等待 {MIN_QUERY_INTERVAL} 秒后再发送消息") return - + last_query_time = current_time headers = { "Content-Type": "application/json" @@ -42,6 +45,8 @@ def send_message(query): "user_id": USER_ID, "query": query, "session_id": SESSION_ID, + "type_id": 2, + "yunxiao_sample": True, "include_history": True # 包含历史记录 } @@ -60,14 +65,14 @@ def send_message(query): line_str = line.decode('utf-8').strip() if line_str.startswith('data:'): line_str = line_str.replace('data:', '') - + # 处理[DONE]标记 if line_str == '[DONE]': break - + if not line_str: # 跳过空行 continue - + try: # 解析JSON data = json.loads(line_str) @@ -132,4 +137,4 @@ def main(): if __name__ == "__main__": - main() \ No newline at end of file + main()