From 365bdd35730d6be02ee2d71ddd9de5965e342ba3 Mon Sep 17 00:00:00 2001 From: HuangHai <10402852@qq.com> Date: Thu, 6 Mar 2025 11:33:14 +0800 Subject: [PATCH] 'commit' --- AI/AiService/CallDeepSeekStream.py | 60 +++++------------------------- AI/AiService/Sample.md | 42 +++++++++++++++++++++ 2 files changed, 52 insertions(+), 50 deletions(-) create mode 100644 AI/AiService/Sample.md diff --git a/AI/AiService/CallDeepSeekStream.py b/AI/AiService/CallDeepSeekStream.py index c3a76204..6235bf04 100644 --- a/AI/AiService/CallDeepSeekStream.py +++ b/AI/AiService/CallDeepSeekStream.py @@ -10,7 +10,6 @@ import asyncio # 阿里云中用来调用 deepseek v3 的密钥 MODEL_API_KEY = "sk-01d13a39e09844038322108ecdbd1bbc" -#MODEL_NAME = "deepseek-v3" MODEL_NAME = "qwen-plus" # 初始化 OpenAI 客户端 @@ -18,48 +17,17 @@ client = OpenAI( api_key=MODEL_API_KEY, base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", ) -import re -import re def markdown_to_dict(markdown_content): """ - 将 Markdown 内容转换为 Python 字典,并处理【】中的文字 + 将 Markdown 内容转换为 Python 字典 """ # 将 Markdown 转换为 JSON 字符串 json_content = markdown_to_json.jsonify(markdown_content) # 解码 Unicode 转义 json_content = json_content.encode('utf-8').decode('unicode_escape') # 将 JSON 字符串转换为字典 - json_dict = json.loads(json_content) - - # 提取【】中的文字 - def extract_brackets(text): - match = re.search(r'【(.*?)】', text) - return match.group(1) if match else None - - # 递归处理字典,提取并赋值 title 和 text 属性 - def process_dict(d): - if isinstance(d, dict): - for key, value in d.items(): - if isinstance(value, str): - # 提取【】中的文字作为 text - text = extract_brackets(value) - if text: - # title 是【】左侧的文字 - d[key] = value.split("【")[0].strip() - # text 是【】中的内容 - d[f"{key}_text"] = text - elif isinstance(value, dict): - process_dict(value) - elif isinstance(value, list): - for item in value: - process_dict(item) - elif isinstance(d, list): - for item in d: - process_dict(item) - - process_dict(json_dict) - return json_dict + return json.loads(json_content) def extract_level1(json_dict): """ @@ -68,9 +36,7 @@ def extract_level1(json_dict): # 获取第一个一级目录的名称 level1_title = next(iter(json_dict.keys()), None) if level1_title: - # 提取 text 属性 - level1_text = json_dict.get(f"{level1_title}_text", "") - return [{"type": "cover", "data": {"title": level1_title, "text": level1_text}}] + return [{"type": "cover", "data": {"title": level1_title, "text": ""}}] return [] def extract_level2_and_level3(json_dict, level1_title=None): @@ -84,31 +50,26 @@ def extract_level2_and_level3(json_dict, level1_title=None): if level1_title and level1_title in json_dict: result = [] for level2_title, level2_content in json_dict[level1_title].items(): - # 提取二级目录的 text 属性 - level2_text = json_dict[level1_title].get(f"{level2_title}_text", "") - result.append({"type": "transition", "data": {"title": level2_title, "text": level2_text}}) + result.append({"type": "transition", "data": {"title": level2_title, "text": ""}}) # 输出三级目录内容 if isinstance(level2_content, dict): for level3_title, level3_items in level2_content.items(): - # 提取三级目录的 text 属性 - level3_text = level2_content.get(f"{level3_title}_text", "") # 确保 level3_items 是列表 if isinstance(level3_items, list): items = [{"title": item, "text": item} for item in level3_items] else: - items = [{"title": str(level3_items), "text": str(level3_items)}] + items = [{"title": str(level3_items), "text": ""}] result.append({ "type": "content", "data": { "title": level3_title, - "text": level3_text, + "text": "", "items": items } }) return result return [] - def extract_contents(json_dict, level1_title=None): """ 提取所有二级目录名称,生成目录部分的 JSON 对象 @@ -123,7 +84,6 @@ def extract_contents(json_dict, level1_title=None): return {"type": "contents", "data": {"items": level2_titles}} return {"type": "contents", "data": {"items": []}} - async def ConvertMarkdownToJson(markdown_content): """ 生成一个 AsyncIterable,逐行返回 JSON 字符串 @@ -133,7 +93,6 @@ async def ConvertMarkdownToJson(markdown_content): # 提取一级目录 level1_json = extract_level1(json_dict) - print(level1_json) for item in level1_json: yield json.dumps(item, ensure_ascii=False) await asyncio.sleep(0.5) # 控制逐行输出的速度 @@ -146,12 +105,12 @@ async def ConvertMarkdownToJson(markdown_content): # 提取二级目录及其三级目录内容 level2_and_level3_json = extract_level2_and_level3(json_dict) for item in level2_and_level3_json: - print(item) yield json.dumps(item, ensure_ascii=False) await asyncio.sleep(0.5) # 添加结束标记 yield '{"type": "end" }' + # 获取本机所有 IPv4 地址 def get_local_ips(): ips = [] @@ -177,7 +136,7 @@ async def generate_stream_markdown(course_name: str): model=MODEL_NAME, messages=[ {'role': 'system', 'content': '你是一个教学经验丰富的基础教育教师'}, - {'role': 'user', 'content': '帮我设计一下' + course_name + '的课件提纲,用markdown格式返回。强调1、标签只能返回 #,##,###,-,其它标签一率不可以返回,这个非常重要!2、不要返回 ```markdown 或者 ``` 这样的内容! 3、每部分都有生成完整的一、二、三级内容,不能省略。4、必须做到:一级、二级、三级都要同步生成一个对于当前部分的一句话描述,尽量简短,不要出现标点符号,与当前级别换行后输出,放到【】这两个符号内部。'} + {'role': 'user', 'content': '帮我设计一下' + course_name + '的课件提纲,用markdown格式返回。强调1、标签只能返回 #,##,###,-,其它标签一率不可以返回,这个非常重要!2、不要返回 ```markdown 或者 ``` 这样的内容! 3、每部分都有生成完整的一、二、三级内容,不能省略。'} ], stream=True, # 启用流式响应 timeout=6000, @@ -198,6 +157,7 @@ async def generate_stream_markdown(course_name: str): # 在控制台输出完整的 Markdown 内容 print("\n完整的 Markdown 内容:") print(full_markdown) + app = FastAPI() # 添加 CORS 中间件 @@ -209,7 +169,6 @@ app.add_middleware( allow_headers=["*"], ) - # 根路由,返回提示信息 @app.get("/") def root(): @@ -230,6 +189,7 @@ async def aippt_outline( "X-Accel-Buffering": "no" } ) + @app.post("/api/tools/aippt") # 修改为 POST 方法 async def aippt(content: str = Body(..., embed=True, description="Markdown 内容")): # 使用 Body 接收请求体参数 return StreamingResponse( diff --git a/AI/AiService/Sample.md b/AI/AiService/Sample.md new file mode 100644 index 00000000..d72f205a --- /dev/null +++ b/AI/AiService/Sample.md @@ -0,0 +1,42 @@ +# 方程解决问题的课件提纲 +- 【整体框架展示方程解决实际问题的思路与步骤】 +## 一、引入方程概念 +- 【从生活实例出发引出方程的概念】 +### 1.1 生活中的等量关系 +- 【通过具体事例展现等量关系是方程的基础】 +- 分享小明买书的例子 总价等于单价乘以数量 +- 引导学生发现其中存在的等量关系 +### 1.2 方程的定义 +- 【明确什么是方程及其基本构成要素】 +- 给出方程的正式定义 含有未知数的等式 +- 解释方程中各个部分 如未知数 系数 常数项 +## 二、建立方程模型 +- 【掌握从实际问题到方程模型的转化方法】 +### 2.1 分析问题找关键信息 +- 【学会筛选有用信息为建模做准备】 +- 演示如何阅读理解应用题 找出已知条件和所求 +- 强调寻找等量关系的重要性 +### 2.2 设定未知数构建方程 +- 【正确设定未知数并根据等量关系列出方程】 +- 讲解设未知数的原则 一般设要求的量为x +- 举例说明根据等量关系列出方程的过程 +## 三、求解方程 +- 【学习不同类型的方程求解方法】 +### 3.1 一元一次方程的解法 +- 【掌握最基础的一元一次方程求解技巧】 +- 复习等式的性质 为解方程做铺垫 +- 详细讲解移项 合并同类项 系数化1等步骤 +### 3.2 验根的重要性 +- 【确保求得的解符合实际情况】 +- 强调验根的意义 防止出现增根或漏根 +- 展示验根的具体操作过程 +## 四、方程的实际应用 +- 【体会方程在解决实际问题中的价值】 +### 4.1 行程问题 +- 【利用方程解决与行程相关的计算】 +- 分析路程 速度 时间之间的关系 +- 举例行程问题并用方程求解 +### 4.2 工程问题 +- 【运用方程处理工程进度方面的难题】 +- 探讨工作量 工作效率 工作时间的关系 +- 通过具体案例体现方程在工程问题中的应用 \ No newline at end of file