From 2bb1aefe8b59788d1f112c67351f0f4532bcf6ba Mon Sep 17 00:00:00 2001 From: HuangHai <10402852@qq.com> Date: Thu, 4 Sep 2025 15:15:07 +0800 Subject: [PATCH] 'commit' --- dsLightRag/Util/AllLiuCheng.py | 193 ++++++++++++++++++++++++ dsLightRag/Util/万有引力导学案.md | 89 +++++++++++ dsLightRag/static/AllLiuChengYaoQiu.txt | 111 ++++++++++++++ 3 files changed, 393 insertions(+) create mode 100644 dsLightRag/Util/AllLiuCheng.py create mode 100644 dsLightRag/Util/万有引力导学案.md create mode 100644 dsLightRag/static/AllLiuChengYaoQiu.txt diff --git a/dsLightRag/Util/AllLiuCheng.py b/dsLightRag/Util/AllLiuCheng.py new file mode 100644 index 00000000..5625ea01 --- /dev/null +++ b/dsLightRag/Util/AllLiuCheng.py @@ -0,0 +1,193 @@ +import asyncio +import logging +import os +import sys +import aiofiles # 添加aiofiles导入 + +from openai import AsyncOpenAI + +from Config.Config import * + +# 配置日志 +logger = logging.getLogger(__name__) + +class LLMClient: + """ + 大语言模型客户端封装类,提供与LLM的交互功能 + """ + def __init__(self, api_key=None, base_url=None, model_name=None, system_prompt=""): + """ + 初始化LLM客户端 + + @param api_key: API密钥,默认为配置文件中的ALY_LLM_API_KEY + @param base_url: API基础URL,默认为配置文件中的ALY_LLM_BASE_URL + @param model_name: 模型名称,默认为配置文件中的ALY_LLM_MODEL_NAME + @param system_prompt: 系统提示词,默认使用预设的学伴角色提示词 + """ + self.api_key = api_key or ALY_LLM_API_KEY + self.base_url = base_url or ALY_LLM_BASE_URL + self.model_name = model_name or ALY_LLM_MODEL_NAME + self.system_prompt = system_prompt # 添加这一行来初始化system_prompt属性 + + + async def get_response(self, query_text: str, knowledge_content: str = "", stream: bool = True): + """ + 异步获取大模型响应 + + @param query_text: 查询文本 + @param knowledge_content: 可选的知识内容,将作为上下文提供给模型 + @param stream: 是否使用流式输出 + @return: 流式响应生成器或完整响应文本 + """ + try: + # 创建AsyncOpenAI客户端 + client = AsyncOpenAI( + api_key=self.api_key, + base_url=self.base_url, + ) + + # 构建完整的查询文本 + full_query = query_text + if knowledge_content: + full_query = f"选择作答的相应知识内容:{knowledge_content}\n下面是用户提的问题:{query_text}" + + # 创建请求 + completion = await client.chat.completions.create( + model=self.model_name, + messages=[ + {'role': 'system', 'content': self.system_prompt}, + {'role': 'user', 'content': full_query} + ], + stream=stream + ) + + if stream: + # 流式输出模式,返回生成器 + async for chunk in completion: + # 确保 chunk.choices 存在且不为空 + if chunk and chunk.choices and len(chunk.choices) > 0: + # 确保 delta 存在 + delta = chunk.choices[0].delta + if delta: + # 确保 content 存在且不为 None 或空字符串 + content = delta.content + if content is not None and content.strip(): + print(content, end='', flush=True) + yield content + else: + # 非流式处理 + if completion and completion.choices and len(completion.choices) > 0: + message = completion.choices[0].message + if message: + content = message.content + if content is not None and content.strip(): + yield content + except Exception as e: + print(f"大模型请求异常: {str(e)}", file=sys.stderr) + yield f"处理请求时发生异常: {str(e)}" + +# 保留原有接口以保持兼容性 +async def get_response_async(query_text: str, stream: bool = True): + """ + 异步获取学伴角色的大模型响应(兼容旧接口) + @param query_text: 查询文本 + @param stream: 是否使用流式输出 + @return: 流式响应生成器或完整响应文本 + """ + # 创建LLM客户端实例 + llm_client = LLMClient() + + # 打开文件读取知识内容 + try: + with open(r"D:\dsWork\dsProject\dsLightRag\static\YunXiao.txt", "r", encoding="utf-8") as f: + zhishiContent = f.read() + except Exception as e: + print(f"读取知识文件失败: {str(e)}", file=sys.stderr) + zhishiContent = "" + + # 调用封装的方法 + async for chunk in llm_client.get_response(query_text, zhishiContent, stream): + yield chunk + + + +# 生成万有引力导学案函数(修改为异步函数) +async def generate_gravitation_lesson_plan(): + """ + 生成万有引力导学案 + @return: 生成的导学案文本 + """ + # 创建LLM客户端实例,设置专门的系统提示词 + system_prompt = """你是'国家中级教师资格'持证教研员,熟悉《中国义务教育物理课程标准(2022版)》,擅长设计'先学后教、以学定教'的导学案。请用'问题链'驱动学生自学,体现'学习目标—前置学习—问题探究—自主检测—疑问记录'五环节。""" + + llm_client = LLMClient(system_prompt=system_prompt) + + # 构建生成导学案的提示词 + prompt = """请围绕'万有引力'一节课,输出一份适用于八年级下的导学案,供学生课前45分钟完成。要求: +1. 语言亲切,用'你'称呼学生; +2. 问题难度梯度:识记→理解→应用; +3. 至少2个生活化情境问题; +4. 留3行空白让学生写'我还有哪些困惑'。 + +【格式要求】 +严格按以下Markdown层级输出: +### 1. 学习目标 +### 2. 前置学习(知识链接+阅读指引) +### 3. 问题探究(问题链) +### 4. 自主检测(5道客观题+1道开放题) +### 5. 疑问记录区(留空) + +【变量】 +教材版本:{人教版八年级下第十章第2节} +学生基础:{已学过重力、匀速圆周运动} +课时长度:{45分钟}""" + + # 修改为流式获取响应 + # 确保这是一个异步生成器函数 + async def get_lesson_plan(): + async for chunk in llm_client.get_response(prompt, stream=True): + yield chunk + + return get_lesson_plan() + +# 测试生成导学案的函数 +async def test_generate_lesson_plan(): + print("\n===== 测试生成万有引力导学案 =====") + + try: + # 必须await生成器函数 + lesson_plan_chunks = await generate_gravitation_lesson_plan() + full_response = "" + output_file = "万有引力导学案.md" + + # 使用aiofiles进行异步文件写入 + async with aiofiles.open(output_file, 'w', encoding='utf-8') as f: + print("\n生成的导学案:") + async for chunk in lesson_plan_chunks: + # 实时打印chunk并刷新缓冲区 + print(chunk, end='', flush=True) + full_response += chunk + await f.write(chunk) + await f.flush() # 刷新文件缓冲区 + + print(f"\n导学案已保存到:{os.path.abspath(output_file)}") + + except Exception as e: + print(f"生成导学案时发生异常: {str(e)}", file=sys.stderr) + +# 修改主函数以包含导学案生成测试 +async def main(): + try: + # 直接生成导学案,不进行交互式测试 + await test_generate_lesson_plan() + + except KeyboardInterrupt: + print("\n程序被用户中断") + except Exception as e: + print(f"测试过程中发生异常: {str(e)}", file=sys.stderr) + finally: + print("\n测试程序结束") + +if __name__ == '__main__': + # 运行异步主函数 + asyncio.run(main()) \ No newline at end of file diff --git a/dsLightRag/Util/万有引力导学案.md b/dsLightRag/Util/万有引力导学案.md new file mode 100644 index 00000000..f2fd6030 --- /dev/null +++ b/dsLightRag/Util/万有引力导学案.md @@ -0,0 +1,89 @@ +### 1. 学习目标 + +通过本节课的自学,你将能够: + +- 说出万有引力的概念及其提出者; +- 理解万有引力定律的基本内容; +- 能用万有引力解释一些生活和自然现象; +- 初步了解万有引力与重力的关系。 + +--- + +### 2. 前置学习 + +**知识链接:** + +你已经学过“重力”和“匀速圆周运动”的相关知识,这将有助于你理解为什么地球会绕太阳转、为什么月亮不会飞走等问题。 + +**阅读指引:** + +请认真阅读人教版八年级下册第十章第2节《万有引力》相关内容,边读边思考以下问题: + +- 什么是万有引力? +- 它是由哪位科学家提出的? +- 万有引力定律适用于哪些物体之间? + +--- + +### 3. 问题探究(问题链) + +**识记类问题:** + +1. 你知道是谁最早提出“万有引力”这一概念的吗?他提出了什么著名的定律? + +2. 万有引力定律的基本内容是什么?你能用自己的话简单说一说吗? + +**理解类问题:** + +3. 为什么月亮不会飞离地球,而是绕着地球转?你能用万有引力来解释吗? + +4. 如果没有万有引力,我们的生活会发生什么变化?试着想象一下。 + +**应用类问题:** + +5. 你在跳起来的时候,为什么还会落回地面?这与万有引力有什么关系? + +6. 想象一个生活场景:宇航员在太空中“漂浮”,这是不是说明他们不受万有引力?为什么? + +--- + +### 4. 自主检测 + +**选择题:** + +1. 提出万有引力定律的科学家是(  ) +A. 爱因斯坦  B. 伽利略  C. 牛顿  D. 哥白尼 + +2. 万有引力的作用对象是(  ) +A. 地球上的物体  B. 天体之间C. 所有物体之间  D. 只有行星之间 + +3. 下列现象中,能用万有引力解释的是(  ) +A. 风吹动树叶  B. 苹果从树上落下  C. 汽车加速行驶  D. 电灯发光 + +4. 关于万有引力,下列说法正确的是(  ) +A. 只有质量大的物体才有万有引力 +B. 万有引力只存在于地球和月亮之间 +C. 任何两个物体之间都存在万有引力 +D. 万有引力是一种看不见、不存在的力 + +5. 在太空中漂浮的宇航员是否受到地球的万有引力?(  ) +A. 不受,因为没有空气 +B. 受到,但感觉不到 +C. 受到,并且有明显重力感 +D. 不受,因为距离太远 + +**开放题:** + +6. 请你举出一个生活中体现万有引力的例子,并尝试用所学知识解释它。 + +--- + +### 5. 疑问记录区 + +你自学过程中还有哪些问题或困惑?请写下来,便于课堂上与老师和同学一起探讨: + +1. _______________________________________ + +2. _______________________________________ + +3. _______________________________________ \ No newline at end of file diff --git a/dsLightRag/static/AllLiuChengYaoQiu.txt b/dsLightRag/static/AllLiuChengYaoQiu.txt new file mode 100644 index 00000000..90b89f5e --- /dev/null +++ b/dsLightRag/static/AllLiuChengYaoQiu.txt @@ -0,0 +1,111 @@ +我开发了一个教育领域垂直训练的大模型,将 万有引力这节课的所有相关信息喂给了大模型,现在我找让大模型分别为我提供如下内容,最好是markdown格式返回,然后我可以用来保存成word,或者用于生成ppt: + +1、生成导学案 +2、生成教案 +3、生成课件 +4、生成作业 【客观、主观】 + + +问题是这4个步骤的提示词都需要怎么写呢? + + +导学案提示词 +【系统指令】 +你是“国家中级教师资格”持证教研员,熟悉《中国义务教育物理课程标准(2022版)》,擅长设计“先学后教、以学定教”的导学案。请用“问题链”驱动学生自学,体现“学习目标—前置学习—问题探究—自主检测—疑问记录”五环节。 + +【任务描述】 +请围绕“万有引力”一节课,输出一份适用于八年级下的导学案,供学生课前45分钟完成。要求: +1. 语言亲切,用“你”称呼学生; +2. 问题难度梯度:识记→理解→应用; +3. 至少2个生活化情境问题; +4. 留3行空白让学生写“我还有哪些困惑”。 + +【格式要求】 +严格按以下Markdown层级输出: +### 1. 学习目标 +### 2. 前置学习(知识链接+阅读指引) +### 3. 问题探究(问题链) +### 4. 自主检测(5道客观题+1道开放题) +### 5. 疑问记录区(留空) + +【变量】 +教材版本:{人教版八年级下第十章第2节} +学生基础:{已学过重力、匀速圆周运动} +课时长度:{45分钟} + +. 教案提示词 +【系统指令】 +你是市级骨干教师,撰写教案时严格对标“核心素养四维度(物理观念、科学思维、探究能力、态度责任)”,并采用“目标—评价—活动”逆向设计模板(UbD)。活动设计需包含“教师行为+期望的学生行为+评价要点”三列表格。 + +【任务描述】 +请输出“万有引力”第1课时的详案,要求: +1. 教学重难点用“行为动词+知识内容”表述; +2. 至少1个“演示实验”+1个“小组探究”+1个“即时反馈”技术(如Padlet); +3. 时间轴精确到分钟; +4. 课后“教学反思提示”留3条空白,供教师手写。 + +【格式要求】 +### 1. 教材与学情分析 +### 2. 四维目标(对应核心素养) +### 3. 重难点 +### 4. 教学准备(器材+数字资源) +### 5. 教学过程(时间轴表格) +### 6. 板书设计(ASCII示意图) +### 7. 作业布置(与导学案分层衔接) +### 8. 教学反思提示(空白) + + +课件提示词 +【系统指令】 +你是PPT视觉设计教练,遵循“6×6原则”(每页≤6行,每行≤6词),字体≥28pt,主色调#005BAC(教育蓝),强调色#FFB703(暖黄)。所有动画≤0.5s,禁止花哨。需要给出演示者备注栏(<备注>)。 + +【任务描述】 +为“万有引力”生成可直接导入PowerPoint的Markdown大纲,共12页,含: +1. 封面(课程名+章节+教师姓名留白) +2. 情境导入(1个30s短视频建议+2张图片提示) +3. 概念建构(苹果落地+月亮绕地对比图) +4. 规律探究(卡文迪许实验GIF占位) +5. 公式推导(F=G·m₁m₂/r²分三步行) +6. 例题精讲(2道,step-by-step动画) +7. 当堂检测(Padlet二维码占位) +8. 小结(思维导图,可一键转SmartArt) +9. 作业二维码(链接到在线表单) +10. 结束页(“思考:如果没有万有引力?”留白) + +【格式要求】 +每页用三级标题###表示,下方用