使用Python调用ollama部署的DeepSeek模型实现教案设计的详细步骤
python调用ollama部署的deepseek模型实现教案设计
教案设计说明
这个程序实现了从DeepSeek API响应中分别提取思考部分和回答内容,并根据回答内容自动生成教学教案的功能。主要包含以下模块:
-
内容提取模块:
- 分离标签内的思考过程和最终回答
- 使用正则表达式进行精确匹配和内容提取
- 处理可能的异常情况
-
内容结构分析模块:
- 识别不同级别的标题(###和####)
- 解析内容层次结构
- 将文本内容转换为结构化数据
-
教学教案生成模块:
- 根据内容结构自动创建教学目标
- 为每个章节生成学习目标、关键点和讨论问题
- 支持多级标题结构,生成完整的教案框架
-
格式化输出模块:
- 将结构化教案转换为易读的文本格式
- 保持清晰的层次结构
- 生成符合教学规范的文档格式
程序使用说明
-
运行程序后,它会:
- 调用DeepSeek API获取关于AI发展历程的内容
- 提取模型的思考过程和最终回答
- 分析回答内容的结构
- 根据结构生成详细的教学教案
- 在控制台显示教案内容
- 将教案保存为文本文件
-
教案内容包括:
- 课程标题和总体教学目标
- 各章节的学习目标、内容总结、关键点和讨论问题
- 支持多级标题结构的子章节内容
- 合理的时间分配建议
-
如需自定义:
- 修改
user_prompt可以获取其他主题的教案 - 调整
create_teaching_plan函数可以自定义教案结构和内容 - 修改
format_teaching_plan函数可以调整输出格式
这个程序可以作为教育工作者快速生成教学材料的工具,也可以用于内容分析和结构化处理的学习。
代码
基础版本
import requests # 用于发送HTTP请求调用API
import json # 用于处理JSON数据
import re # 用于正则表达式处理文本
def call_deepseek_api(prompt):
"""调用DeepSeek API获取AI发展历程的内容"""
try:
# 发送POST请求到DeepSeek API
response = requests.post(
url="http://localhost:11434/api/chat", # API端点URL
json={
"model": "deepseek-r1:1.5b", # 指定使用的模型
"messages": [
{"role": "user", "content": prompt} # 用户输入的问题
],
"stream": False # 不使用流式响应
}
)
response.raise_for_status() # 检查请求是否成功,不成功则抛出异常
return response.json() # 将响应内容解析为JSON并返回
except requests.exceptions.RequestException as e:
print(f"API请求错误: {e}") # 处理请求异常
return None
except json.JSONDecodeError as e:
print(f"JSON解析错误: {e}") # 处理JSON解析异常
return None
def extract_ai_history(response_data):
"""从DeepSeek API响应中提取并格式化AI发展历程的内容"""
try:
# 从响应数据中提取模型返回的原始内容
content = response_data["message"]["content"]
# 提取模型思考过程
think_match = re.search(r'<think>(.*?)</think>', content, flags=re.DOTALL)
thought_process = think_match.group(1).strip() if think_match else "未找到模型思考过程"
# 移除思考过程标签,保留实际回答内容
cleaned_content = re.sub(r'<think>.*?</think>', '', content, flags=re.DOTALL).strip()
# 使用正则表达式按###标题分割内容为多个章节
sections = re.split(r'###\s*', cleaned_content)
# 提取主体内容(第一个部分)
main_content = sections[0].strip()
chapters = [] # 用于存储各章节内容的列表
# 处理每个章节(从第二个部分开始)
for section in sections[1:]:
if not section.strip(): # 跳过空部分
continue
# 分割章节标题和内容(按第一个换行符分割)
lines = section.split('\n', 1)
if len(lines) == 2: # 确保有标题和内容
title, content = lines
chapters.append({ # 将章节信息添加到列表
"title": title.strip(), # 章节标题
"content": content.strip() # 章节内容
})
# 返回结构化的提取结果,拆分为两个独立参数
return {
"thought_process": thought_process # 模型思考过程
}, {
"main_content": main_content, # 主体内容
"chapters": chapters # 章节列表
}
except Exception as e:
print(f"提取内容时出错: {e}") # 处理异常
return None, None
def format_thought_process(thought_data):
"""将模型思考过程格式化为易读的文本"""
if not thought_data:
return "未找到模型思考过程"
return f"=== 模型思考过程 ===\n{thought_data['thought_process']}\n\n"
def format_inference_result(result_data):
"""将推理结果格式化为易读的文本"""
if not result_data:
return "未能提取有效内容"
# 初始化格式化文本,先添加主体内容
formatted = "=== 主体内容 ===\n"
formatted += result_data["main_content"] + "\n\n"
# 遍历每个章节,按序号和标题格式添加
formatted += "=== 详细章节 ===\n"
for i, chapter in enumerate(result_data["chapters"], 1):
formatted += f"### {chapter['title']}\n{chapter['content']}\n\n"
return formatted
def save_to_file(content, filename="ai_history.md"):
"""将内容保存到文件"""
try:
# 以写入模式打开文件(自动创建或覆盖)
with open(filename, 'w', encoding='utf-8') as file:
file.write(content) # 写入内容
print(f"内容已保存到 {filename}") # 提示保存成功
except Exception as e:
print(f"保存文件时出错: {e}") # 处理保存异常
# 主程序入口
if __name__ == "__main__":
# 定义用户问题
user_prompt = "请介绍一下人工智能的发展历程"
# 调用API获取内容
print("正在调用DeepSeek API获取内容...")
response_data = call_deepseek_api(user_prompt)
if response_data: # 检查API响应是否成功
# 提取内容,拆分为思考过程和推理结果
print("正在提取并格式化内容...")
thought_data, result_data = extract_ai_history(response_data)
# 分别格式化思考过程和推理结果
formatted_thought = format_thought_process(thought_data)
formatted_result = format_inference_result(result_data)
# 合并输出
# formatted_content = formatted_thought + formatted_result
# 打印结果
print("\n=== 人工智能发展历程 ===")
print(formatted_thought)
print(formatted_result)
# 保存到文件
save_to_file(formatted_result)
else:
print("获取内容失败,请检查API连接和设置")
定制美化版本
import requests # 用于发送HTTP请求调用API
import json # 用于处理JSON数据
import re # 用于正则表达式处理文本
def call_deepseek_api(prompt):
"""调用DeepSeek API获取AI发展历程的内容"""
try:
# 发送POST请求到DeepSeek API
response = requests.post(
url="http://localhost:11434/api/chat", # API端点URL
json={
"model": "deepseek-r1:1.5b", # 指定使用的模型
"messages": [
{"role": "user", "content": prompt} # 用户输入的问题
],
"stream": False # 不使用流式响应
}
)
response.raise_for_status() # 检查请求是否成功,不成功则抛出异常
return response.json() # 将响应内容解析为JSON并返回
except requests.exceptions.RequestException as e:
print(f"API请求错误: {e}") # 处理请求异常
return None
except json.JSONDecodeError as e:
print(f"JSON解析错误: {e}") # 处理JSON解析异常
return None
def extract_think_and_response(response_data):
"""从API响应中分别提取<think>思考部分和最终回答部分"""
try:
# 从响应数据中提取模型返回的原始内容
content = response_data["message"]["content"]
# 使用正则表达式提取<think>标签内的思考内容
think_match = re.search(r'<think>(.*?)</think>', content, re.DOTALL)
think_content = think_match.group(1).strip() if think_match else ""
# 移除<think>标签及其内容,得到最终回答部分
response_content = re.sub(r'<think>.*?</think>', '', content, flags=re.DOTALL).strip()
return {
"think_content": think_content, # 思考过程内容
"response_content": response_content # 最终回答内容
}
except Exception as e:
print(f"内容提取错误: {e}")
return {"think_content": "", "response_content": ""}
def analyze_response_structure(response_content):
"""分析回答内容的结构,提取标题和各部分内容"""
# 定义不同级别的标题正则表达式模式
section_pattern = r'###\s*(.*?)\n' # 三级标题(###)
subsection_pattern = r'####\s*(.*?)\n' # 四级标题(####)
# 初始化结构数据
structure = {
"main_content": "", # 引言部分
"sections": [] # 各章节内容
}
# 按三级标题分割内容
sections = re.split(section_pattern, response_content)
if len(sections) > 1:
# 第一部分是引言
structure["main_content"] = sections[0].strip()
# 处理每个章节(标题和内容交替出现)
for i in range(1, len(sections), 2):
section_title = sections[i]
section_content = sections[i + 1].strip()
# 初始化章节数据
section_data = {
"title": section_title,
"content": "",
"subsections": []
}
# 检查章节内容中是否包含四级标题
subsections = re.split(subsection_pattern, section_content)
if len(subsections) > 1:
# 第一部分是章节主体内容
section_data["content"] = subsections[0].strip()
# 处理每个子章节
for j in range(1, len(subsections), 2):
subsection_title = subsections[j]
subsection_content = subsections[j + 1].strip()
section_data["subsections"].append({
"title": subsection_title,
"content": subsection_content
})
else:
# 如果没有子章节,整个内容就是章节主体
section_data["content"] = section_content
structure["sections"].append(section_data)
else:
# 如果没有三级标题,整个内容作为引言
structure["main_content"] = response_content.strip()
return structure
def create_teaching_plan(structure_data):
"""根据内容结构创建教学教案"""
# 初始化教案数据
teaching_plan = {
"title": "人工智能发展历程教学教案",
"objectives": [
"了解人工智能的发展阶段",
"掌握各阶段的关键技术和应用",
"理解人工智能发展的历史脉络",
"分析技术进步与应用场景的关系"
],
"sections": []
}
# 为每个章节创建教学内容
for section in structure_data["sections"]:
# 初始化章节教案
section_plan = {
"title": section["title"],
"learning_objectives": [],
"content_summary": section["content"],
"key_points": [],
"discussion_questions": [],
"time_allocation": 15 # 默认每节15分钟
}
# 根据章节标题设置学习目标
if "早期模仿人类行为" in section["title"]:
section_plan["learning_objectives"] = [
"了解人工智能的起源",
"掌握早期人工智能的特点",
"识别早期AI的代表性应用"
]
section_plan["key_points"] = [
"达特茅斯会议的意义",
"早期AI的局限性",
"简单计算工具与AI的关系"
]
section_plan["discussion_questions"] = [
"为什么早期AI主要集中在模仿人类行为?",
"早期AI技术对现代AI有哪些影响?"
]
elif "机器学习与模式识别" in section["title"]:
section_plan["learning_objectives"] = [
"理解机器学习的基本概念",
"掌握模式识别在AI中的应用",
"分析这一时期AI的技术突破"
]
section_plan["key_points"] = [
"统计学与机器学习的关系",
"早期模式识别的应用领域",
"工业自动化的发展"
]
section_plan["discussion_questions"] = [
"为什么机器学习被认为是AI发展的重要阶段?",
"模式识别技术在当今有哪些新的应用?"
]
# 其他章节的学习目标和关键点(省略其他分支以保持简洁)
# 添加子章节内容(如果有)
if section["subsections"]:
section_plan["subsections"] = []
for subsection in section["subsections"]:
subsection_plan = {
"title": subsection["title"],
"content_summary": subsection["content"],
"key_points": [f"理解{subsection['title']}的核心技术",
f"掌握{subsection['title']}的应用场景"]
}
section_plan["subsections"].append(subsection_plan)
teaching_plan["sections"].append(section_plan)
return teaching_plan
def format_teaching_plan(teaching_plan):
"""将教学教案格式化为易读的文本"""
formatted = f"# {teaching_plan['title']}\n\n"
# 添加教学目标
formatted += "## 教学目标\n"
for i, objective in enumerate(teaching_plan['objectives'], 1):
formatted += f"{i}. {objective}\n"
formatted += "\n"
# 添加各章节内容
for i, section in enumerate(teaching_plan['sections'], 1):
formatted += f"## 第{i}节: {section['title']} ({section['time_allocation']}分钟)\n\n"
# 添加学习目标
formatted += "### 学习目标\n"
for j, obj in enumerate(section['learning_objectives'], 1):
formatted += f"{j}. {obj}\n"
formatted += "\n"
# 添加内容总结
formatted += "### 内容总结\n"
formatted += f"{section['content_summary']}\n\n"
# 添加关键点
formatted += "### 关键点\n"
for j, point in enumerate(section['key_points'], 1):
formatted += f"{j}. {point}\n"
formatted += "\n"
# 添加讨论问题
if section['discussion_questions']:
formatted += "### 讨论问题\n"
for j, question in enumerate(section['discussion_questions'], 1):
formatted += f"{j}. {question}\n"
formatted += "\n"
# 添加子章节(如果有)
if 'subsections' in section:
for j, subsection in enumerate(section['subsections'], 1):
formatted += f"#### 子节{j}: {subsection['title']}\n\n"
formatted += "##### 内容总结\n"
formatted += f"{subsection['content_summary']}\n\n"
formatted += "##### 关键点\n"
for k, point in enumerate(subsection['key_points'], 1):
formatted += f"{k}. {point}\n"
formatted += "\n"
return formatted
def save_to_file(content, filename="ai_history_teaching_plan.md"):
"""将内容保存到文件"""
try:
with open(filename, 'w', encoding='utf-8') as file:
file.write(content)
print(f"内容已保存到 {filename}")
except Exception as e:
print(f"保存文件时出错: {e}")
# 主程序入口
if __name__ == "__main__":
# 定义用户问题
user_prompt = "请介绍一下人工智能的发展历程"
# 调用API获取内容
print("正在调用DeepSeek API获取内容...")
response_data = call_deepseek_api(user_prompt)
if response_data:
# 提取思考部分和回答部分
print("正在提取思考和回答内容...")
extracted = extract_think_and_response(response_data)
# 打印思考部分
print("\n=== 模型思考过程 ===")
print(extracted["think_content"])
# 分析回答结构
print("\n正在分析内容结构...")
structure = analyze_response_structure(extracted["response_content"])
# 创建教学教案
print("正在生成教学教案...")
teaching_plan = create_teaching_plan(structure)
# 格式化教案文本
formatted_plan = format_teaching_plan(teaching_plan)
# 打印教案
print("\n=== 人工智能发展历程教学教案 ===")
print(formatted_plan)
# 保存教案到文件
save_to_file(formatted_plan)
else:
print("获取内容失败,请检查API连接和设置")
运行效果
正在调用DeepSeek API获取内容...
正在提取思考和回答内容...
=== 模型思考过程 ===
嗯,用户想了解一下人工智能的发展历程。首先,我应该从最近的进展开始,因为这样能吸引最新的关注。我记得最近几年,深度学习在AI里占据了很大比例,比如GPT系列这些模型,还有Transformer架构,这些都挺有名的。
然后,自动驾驶和智能设备方面,比如特斯拉Autopilot和蔚来Neuralink这样的项目,应该是个不错的切入点。AI在医疗里的应用,比如智能诊断系统,能很好地帮助医生,这也是一个重要的点。
人工智能在教育中的应用越来越广泛了,K12学校的在线学习平台,还有各种在线课程资源。这些地方可以吸引更多的学生参与进来。
besides这些,我还可以提到一些其他领域,比如自动驾驶、智能助手和个性化推荐。这些都是AI带来的新方向。另外,AI伦理问题也是一个关键点,现在很多人在讨论如何平衡技术与人类的互动,这点也很重要。
总的来说,要全面地覆盖人工智能的发展历程,同时突出当前的热点和趋势,这样用户才能得到一个全面而有深度的回答。
正在分析内容结构...
正在生成教学教案...
=== 人工智能发展历程教学教案 ===
# 人工智能发展历程教学教案
## 教学目标
1. 了解人工智能的发展阶段
2. 掌握各阶段的关键技术和应用
3. 理解人工智能发展的历史脉络
4. 分析技术进步与应用场景的关系
## 第1节: 1. **20世纪80年代:AI 的概念与早期发展** (15分钟)
### 学习目标
### 内容总结
- **计算机程序的自动操作**:随着电脑技术的发展,从1945年开始,人类开始在计算机上进行一些简单的程序运算,如算术、逻辑推理等。
- **专家系统(Expert systems)**:1976年,英国奥本海默的研究小组提出了“专家系统”理论,允许非专家的人类专家编写规则和逻辑,让计算机自动执行复杂的任务。
- **机器学习(Machine Learning)**:1950年代末至20世纪中叶,人工智能领域开始转向研究算法的训练来模拟人类学习过程。一些早期的方法包括线性回归、神经网络等。
### 关键点
## 第2节: 2. **21世纪初:深度学习与模式识别** (15分钟)
### 学习目标
### 内容总结
- **人工神经网络(Artificial Neural Networks)**:随着计算能力的提升和神经元数量的增加,人工神经网络从理论到实践都取得了巨大进展。如自适应有限状态机器(ADAR)在语音处理中的应用。
- **深度学习(Deep Learning)**:20世纪90年代末至21世纪中段,深度学习技术迅速发展,特别是使用卷积神经网络(CNN)、长短期记忆网络(LSTM)等方法解决复杂图像识别和自然语言处理任务。
### 关键点
## 第3节: 3. **21世纪 late to early: 智能驾驶与自动驾驶** (15分钟)
### 学习目标
### 内容总结
- **特斯拉Autopilot**:2018年,特斯拉开始推出Autopilot,能够自动泊车、自适应巡航等,标志着智能驾驶技术的大规模应用。
- **蔚来Neuralink**:2020年,Brake Group推出了Neuralink,用于连接大脑与手部,推动了人体交互技术的发展。
### 关键点
## 第4节: 4. **21世纪中叶至后半:医疗与健康领域的应用** (15分钟)
### 学习目标
### 内容总结
- **智能诊断系统(Diagnosis System)**:人工智能在医学领域取得了显著进展。如深度神经网络应用于电子眼(NEST)和脑电图(EEG)分析,帮助医生更精准地诊断疾病。
- **个性化治疗**:通过基因组学和机器学习,医生可以为患者推荐适合的药物组合,提高治疗效果。
### 关键点
## 第5节: 5. **21世纪后期至现在:AI 的多元化发展** (15分钟)
### 学习目标
### 内容总结
- **AI 在教育中的应用**:如K12学校的在线学习平台(Khan Academy)和智能辅导系统,帮助学生更好地学习。
- **AI 的社会影响**:人工智能在治理、金融、娱乐等领域发挥着越来越重要的作用。例如,算法歧视检测、城市交通优化等。
### 关键点
## 第6节: 6. **AI 的伦理与社会挑战** (15分钟)
### 学习目标
### 内容总结
- **隐私与安全问题**:数据泄露和隐私泄露成为AI应用中的新威胁。
- **算法公平性与偏见**:算法可能导致偏见,如何确保AI系统在不同群体中的公平性和公正性是一个重要课题。
### 关键点
## 第7节: 总结 (15分钟)
### 学习目标
### 内容总结
人工智能的发展是从概念到技术再到社会化的阶段。从20世纪80年代的早期概念,到21世纪的自动驾驶、智能医疗和教育应用,人工智能正在深刻改变人类生活。同时,尽管技术进步显著,但伦理、隐私和公平性等问题仍需持续关注和解决。
### 关键点
内容已保存到 ai_history_teaching_plan.md
作者:李昊哲小课