main
HuangHai 5 months ago
parent 9d4f5b4f02
commit 598884c941

@ -18,17 +18,48 @@ 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 字符串转换为字典
return json.loads(json_content)
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
def extract_level1(json_dict):
"""
@ -37,10 +68,11 @@ def extract_level1(json_dict):
# 获取第一个一级目录的名称
level1_title = next(iter(json_dict.keys()), None)
if level1_title:
return [{"type": "cover", "data": {"title": level1_title, "text": level1_title}}]
# 提取 text 属性
level1_text = json_dict.get(f"{level1_title}_text", "")
return [{"type": "cover", "data": {"title": level1_title, "text": level1_text}}]
return []
def extract_level2_and_level3(json_dict, level1_title=None):
"""
提取指定一级目录下的二级目录及其三级目录内容生成指定格式的 JSON 对象列表
@ -52,11 +84,14 @@ 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():
# 输出二级目录
result.append({"type": "transition", "data": {"title": level2_title, "text": level2_title}})
# 提取二级目录的 text 属性
level2_text = json_dict[level1_title].get(f"{level2_title}_text", "")
result.append({"type": "transition", "data": {"title": level2_title, "text": level2_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]
@ -66,6 +101,7 @@ def extract_level2_and_level3(json_dict, level1_title=None):
"type": "content",
"data": {
"title": level3_title,
"text": level3_text,
"items": items
}
})
@ -97,6 +133,7 @@ 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) # 控制逐行输出的速度
@ -109,6 +146,7 @@ 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)
@ -139,7 +177,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、每部分都有生成完整的一、二、三级内容不能省略。4、必须做到:一级、二级、三级都要同步生成一个对于当前部分的一句话描述,尽量简短,不要出现标点符号,与当前级别换行后输出,放到【】这两个符号内部'}
],
stream=True, # 启用流式响应
timeout=6000,

Loading…
Cancel
Save