使用Python调用ollama部署的DeepSeek模型实现教案设计的详细步骤

python调用ollama部署的deepseek模型实现教案设计

教案设计说明

这个程序实现了从DeepSeek API响应中分别提取思考部分和回答内容,并根据回答内容自动生成教学教案的功能。主要包含以下模块:

  1. 内容提取模块

  2. 分离标签内的思考过程和最终回答
  3. 使用正则表达式进行精确匹配和内容提取
  4. 处理可能的异常情况
  5. 内容结构分析模块

  6. 识别不同级别的标题(###和####)
  7. 解析内容层次结构
  8. 将文本内容转换为结构化数据
  9. 教学教案生成模块

  10. 根据内容结构自动创建教学目标
  11. 为每个章节生成学习目标、关键点和讨论问题
  12. 支持多级标题结构,生成完整的教案框架
  13. 格式化输出模块

  14. 将结构化教案转换为易读的文本格式
  15. 保持清晰的层次结构
  16. 生成符合教学规范的文档格式

程序使用说明

  1. 运行程序后,它会:

  2. 调用DeepSeek API获取关于AI发展历程的内容
  3. 提取模型的思考过程和最终回答
  4. 分析回答内容的结构
  5. 根据结构生成详细的教学教案
  6. 在控制台显示教案内容
  7. 将教案保存为文本文件
  8. 教案内容包括:

  9. 课程标题和总体教学目标
  10. 各章节的学习目标、内容总结、关键点和讨论问题
  11. 支持多级标题结构的子章节内容
  12. 合理的时间分配建议
  13. 如需自定义:

  14. 修改user_prompt可以获取其他主题的教案
  15. 调整create_teaching_plan函数可以自定义教案结构和内容
  16. 修改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

作者:李昊哲小课

物联沃分享整理
物联沃-IOTWORD物联网 » 使用Python调用ollama部署的DeepSeek模型实现教案设计的详细步骤

发表回复