From 9ebe92a5c546c99d723445a1ea1404e03211af5f Mon Sep 17 00:00:00 2001 From: HuangHai <10402852@qq.com> Date: Fri, 27 Jun 2025 07:25:39 +0800 Subject: [PATCH] 'commit' --- dsRag/494913b3598b4c73876bd7b821860973.html | 79 +++++++++++++++ dsRag/Doc/9、Pandoc下载.md | 2 + dsRag/Start.py | 102 ++++++++++---------- dsRag/Test/TestPandoc.py | 7 ++ dsRag/static/1.html | 42 ++++++++ dsRag/static/output.docx | Bin 0 -> 12622 bytes dsRag/小学数学问答.docx | Bin 0 -> 10353 bytes 7 files changed, 183 insertions(+), 49 deletions(-) create mode 100644 dsRag/494913b3598b4c73876bd7b821860973.html create mode 100644 dsRag/Doc/9、Pandoc下载.md create mode 100644 dsRag/Test/TestPandoc.py create mode 100644 dsRag/static/1.html create mode 100644 dsRag/static/output.docx create mode 100644 dsRag/小学数学问答.docx diff --git a/dsRag/494913b3598b4c73876bd7b821860973.html b/dsRag/494913b3598b4c73876bd7b821860973.html new file mode 100644 index 00000000..65f69b0b --- /dev/null +++ b/dsRag/494913b3598b4c73876bd7b821860973.html @@ -0,0 +1,79 @@ + + + + + “如何理解点、线、面、体、角”教学设计 + + +

“如何理解点、线、面、体、角”教学设计

+ +

一、教学背景与目标

+

基于欧几里得几何的基本概念,针对小学阶段学生认知特点,通过直观体验和操作活动帮助学生建立对点、线、面、体、角的描述性理解,重点突破“角”的概念教学难点。

+ +

二、核心教学策略

+ + +

三、分模块教学设计

+ +

模块1:点、线、面的认识

+
    +
  1. 立体图形分类活动:引导学生观察不同立体模型(立方体、球体等),发现共性特征
  2. +
  3. 抽象过程演示:以长方体为例演示抽象过程(顶点→点,棱→线,表面→面)
  4. +
  5. 特征归纳:通过对比强调"点无大小、线无宽窄、面无薄厚"的抽象特性
  6. +
+ +

模块2:角的初步认识(重点模块)

+
+

阶段1:情境化引入

+

教具演示:使用无刻度钟表模型,通过时针/分针位置变化让学生感知:

+ + +

阶段2:描述性定义建立

+
    +
  1. 生活实例观察(书本角、桌角等),归纳特征:"边直、尖顶"
  2. +
  3. 操作活动:用长方形纸折出不同角,理解"端点重合的两边所夹部分"
  4. +
  5. 关键强调:角大小与边长无关,只与两边张开程度有关
  6. +
+ +

阶段3:几何作图深化

+ +
+ +

四、教学要点说明

+ + + + + + + + + + + + + + + + +
概念教学要点常见误区
强调"两边所夹部分",通过大小比较理解本质避免使用射线定义,不强调边的无限性
线从直线段出发,延伸理解射线与直线不过分强调"直",但通过"两点间最短"感悟特性
+ +

五、评价建议

+ + +

六、拓展资源

+

可结合《课标》例46(几何概念计数)、例58(立体图形抽象)开展跨课时整合教学。

+ diff --git a/dsRag/Doc/9、Pandoc下载.md b/dsRag/Doc/9、Pandoc下载.md new file mode 100644 index 00000000..674e9ba8 --- /dev/null +++ b/dsRag/Doc/9、Pandoc下载.md @@ -0,0 +1,2 @@ +https://github.com/jgm/pandoc/releases/tag/3.7.0.2 +https://objects.githubusercontent.com/github-production-release-asset-2e65be/571770/92882bf5-3b76-4345-b08a-9d9badc74957?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20250626%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250626T231242Z&X-Amz-Expires=1800&X-Amz-Signature=55493529bc6e5a3779e95bcdd9f33cf09477d3e47f9a441b9412b5b193d788db&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3Dpandoc-3.7.0.2-windows-x86_64.msi&response-content-type=application%2Foctet-stream \ No newline at end of file diff --git a/dsRag/Start.py b/dsRag/Start.py index 7c5ed95b..3daf0a20 100644 --- a/dsRag/Start.py +++ b/dsRag/Start.py @@ -1,9 +1,11 @@ +import os +import tempfile import urllib.parse +import uuid from contextlib import asynccontextmanager from io import BytesIO from logging.handlers import RotatingFileHandler -import html2text import jieba # 导入 jieba 分词库 import uvicorn from docx import Document @@ -20,6 +22,13 @@ from Config.Config import MS_MODEL_PATH, MS_MODEL_LIMIT, MS_HOST, MS_PORT, MS_MA from Milvus.Utils.MilvusCollectionManager import MilvusCollectionManager from Milvus.Utils.MilvusConnectionPool import * from Milvus.Utils.MilvusConnectionPool import MilvusConnectionPool +import subprocess + + +# 将HTML文件转换为Word文件 +def html_to_word_pandoc(html_file, output_file): + subprocess.run(['pandoc', html_file, '-o', output_file]) + # 初始化日志 logger = logging.getLogger(__name__) @@ -75,10 +84,8 @@ def text_to_embedding(text): async def generate_stream(client, milvus_pool, collection_manager, query): - """生成SSE流""" # 从连接池获取连接 connection = milvus_pool.get_connection() - try: # 1. 将查询文本转换为向量 current_embedding = text_to_embedding(query) @@ -89,7 +96,7 @@ async def generate_stream(client, milvus_pool, collection_manager, query): "params": {"nprobe": MS_NPROBE} # 设置 IVF_FLAT 的 nprobe 参数 } # 7. 将文本转换为嵌入向量 - results = collection_manager.search(current_embedding, search_params, limit=5) # 返回 2 条结果 + results = collection_manager.search(current_embedding, search_params, limit=5) # 返回 5 条结果 # 3. 处理搜索结果 logger.info("最相关的知识库内容:") @@ -100,7 +107,7 @@ async def generate_stream(client, milvus_pool, collection_manager, query): try: # 查询非向量字段 record = collection_manager.query_by_id(hit.id) - if hit.distance < 0.88: # 设置距离阈值 + if hit.distance < 0.88: # 设置距离阈值 logger.info(f"ID: {hit.id}") logger.info(f"标签: {record['tags']}") logger.info(f"用户问题: {record['user_input']}") @@ -144,8 +151,11 @@ async def generate_stream(client, milvus_pool, collection_manager, query): temperature=0.3, stream=False ) - - yield {"data": response.choices[0].message.content} + # 将返回的html代码保存成文件 + htmlStr = response.choices[0].message.content + with open("Static/1.html", "w", encoding="utf-8") as f: + f.write(htmlStr) + yield {"data": htmlStr} except Exception as e: yield {"data": f"生成报告时出错: {str(e)}"} finally: @@ -168,11 +178,15 @@ http://10.10.21.22:8000/static/ai.html class QueryRequest(BaseModel): query: str = Field(..., description="用户查询的问题") + class SaveWordRequest(BaseModel): html: str = Field(..., description="要保存为Word的HTML内容") + @app.post("/api/save-word") async def save_to_word(request: Request): + temp_html = None + output_file = None try: # Parse request data try: @@ -183,52 +197,42 @@ async def save_to_word(request: Request): except Exception as e: logger.error(f"Request parsing failed: {str(e)}") raise HTTPException(status_code=400, detail=f"Invalid request: {str(e)}") - - # Convert HTML to text - try: - text_maker = html2text.HTML2Text() - text_maker.ignore_links = True - text_maker.ignore_images = True - text_content = text_maker.handle(html_content) - except Exception as e: - logger.error(f"HTML conversion failed: {str(e)}") - raise HTTPException(status_code=400, detail=f"HTML processing error: {str(e)}") - - # Create Word document - try: - doc = Document() - doc.add_heading('小学数学问答', 0) - - for para in text_content.split('\n\n'): - if para.strip(): - doc.add_paragraph(para.strip()) - except Exception as e: - logger.error(f"Document creation failed: {str(e)}") - raise HTTPException(status_code=500, detail=f"Document creation error: {str(e)}") - - # Save to stream - try: - stream = BytesIO() - doc.save(stream) - stream.seek(0) - except Exception as e: - logger.error(f"Document saving failed: {str(e)}") - raise HTTPException(status_code=500, detail=f"Document saving error: {str(e)}") - - # Return response - filename = "小学数学问答.docx" - encoded_filename = urllib.parse.quote(filename) + + # 创建临时HTML文件 + temp_html = os.path.join(tempfile.gettempdir(), uuid.uuid4().hex + ".html") + with open(temp_html, "w", encoding="utf-8") as f: + f.write(html_content) + + # 使用pandoc转换 + output_file = os.path.join(tempfile.gettempdir(), "小学数学问答.docx") + subprocess.run(['pandoc', temp_html, '-o', output_file], check=True) + + # 读取生成的Word文件 + with open(output_file, "rb") as f: + stream = BytesIO(f.read()) + + # 返回响应 + encoded_filename = urllib.parse.quote("小学数学问答.docx") return StreamingResponse( stream, media_type="application/vnd.openxmlformats-officedocument.wordprocessingml.document", - headers={"Content-Disposition": f"attachment; filename*=UTF-8''{encoded_filename}"} - ) - + headers={"Content-Disposition": f"attachment; filename*=UTF-8''{encoded_filename}"}) + except HTTPException: raise except Exception as e: logger.error(f"Unexpected error: {str(e)}") raise HTTPException(status_code=500, detail="Internal server error") + finally: + # 清理临时文件 + try: + if temp_html and os.path.exists(temp_html): + os.remove(temp_html) + if output_file and os.path.exists(output_file): + os.remove(output_file) + except Exception as e: + logger.warning(f"Failed to clean up temp files: {str(e)}") + @app.post("/api/rag") async def rag_stream(request: Request): @@ -243,10 +247,10 @@ async def rag_stream(request: Request): raise HTTPException(status_code=400, detail="无效的请求格式") """RAG+DeepSeek接口""" async for chunk in generate_stream( - request.app.state.deepseek_client, - request.app.state.milvus_pool, - request.app.state.collection_manager, - query_request.query + request.app.state.deepseek_client, + request.app.state.milvus_pool, + request.app.state.collection_manager, + query_request.query ): return chunk diff --git a/dsRag/Test/TestPandoc.py b/dsRag/Test/TestPandoc.py new file mode 100644 index 00000000..e004310c --- /dev/null +++ b/dsRag/Test/TestPandoc.py @@ -0,0 +1,7 @@ +import subprocess + +def html_to_word_pandoc(html_file, output_file): + subprocess.run(['pandoc', html_file, '-o', output_file]) + +# 使用示例 +html_to_word_pandoc('../static/1.html', '../static/output.docx') \ No newline at end of file diff --git a/dsRag/static/1.html b/dsRag/static/1.html new file mode 100644 index 00000000..cf78316b --- /dev/null +++ b/dsRag/static/1.html @@ -0,0 +1,42 @@ + + + + 小学数学中的模型 + + +

小学数学中的模型

+ +

什么是模型?

+

在小学数学中,模型是用数学的语言讲述现实世界中的故事,强调如何用数学的方法描述或解决一类现实生活中的问题。模型不仅仅是数学表达,而是能够解决一类具有实际背景问题的数学方法。

+ +

小学数学中的主要模型

+ + +

模型的重要性

+

模型的重要性不仅取决于数学表达是否完美,更取决于对现实世界的解释。通过模型的构建和理解,学生可以认识到数学是描述现实世界的强有力工具。

+ +

教学建议

+

在教学中,应通过现实例子让学生感悟模型的意义,引导学生灵活使用模型,培养学生的应用意识和创新意识。

+ + \ No newline at end of file diff --git a/dsRag/static/output.docx b/dsRag/static/output.docx new file mode 100644 index 0000000000000000000000000000000000000000..bfa0714f5784e569556ca33334b31e9af90c9034 GIT binary patch literal 12622 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