main
HuangHai 5 months ago
parent 598884c941
commit 365bdd3573

@ -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(

@ -0,0 +1,42 @@
# 方程解决问题的课件提纲
- 【整体框架展示方程解决实际问题的思路与步骤】
## 一、引入方程概念
- 【从生活实例出发引出方程的概念】
### 1.1 生活中的等量关系
- 【通过具体事例展现等量关系是方程的基础】
- 分享小明买书的例子 总价等于单价乘以数量
- 引导学生发现其中存在的等量关系
### 1.2 方程的定义
- 【明确什么是方程及其基本构成要素】
- 给出方程的正式定义 含有未知数的等式
- 解释方程中各个部分 如未知数 系数 常数项
## 二、建立方程模型
- 【掌握从实际问题到方程模型的转化方法】
### 2.1 分析问题找关键信息
- 【学会筛选有用信息为建模做准备】
- 演示如何阅读理解应用题 找出已知条件和所求
- 强调寻找等量关系的重要性
### 2.2 设定未知数构建方程
- 【正确设定未知数并根据等量关系列出方程】
- 讲解设未知数的原则 一般设要求的量为x
- 举例说明根据等量关系列出方程的过程
## 三、求解方程
- 【学习不同类型的方程求解方法】
### 3.1 一元一次方程的解法
- 【掌握最基础的一元一次方程求解技巧】
- 复习等式的性质 为解方程做铺垫
- 详细讲解移项 合并同类项 系数化1等步骤
### 3.2 验根的重要性
- 【确保求得的解符合实际情况】
- 强调验根的意义 防止出现增根或漏根
- 展示验根的具体操作过程
## 四、方程的实际应用
- 【体会方程在解决实际问题中的价值】
### 4.1 行程问题
- 【利用方程解决与行程相关的计算】
- 分析路程 速度 时间之间的关系
- 举例行程问题并用方程求解
### 4.2 工程问题
- 【运用方程处理工程进度方面的难题】
- 探讨工作量 工作效率 工作时间的关系
- 通过具体案例体现方程在工程问题中的应用
Loading…
Cancel
Save