大模型应用班-第2课 DeepSeek使用与提示词工程课程重点 学习ollama 安装 用deepseek-r1:1.5b 分析PDF 内容

DeepSeek使用与提示词工程课程重点

Homework:ollama 安装 用deepseek-r1:1.5b 分析PDF 内容

python 代码建构:

1.小模型 1.5b 可以在 笔记本上快速执行

2.分析结果还不错

3. 重点是提示词 prompt 的写法

一、DeepSeek模型创新与特点

1. DeepSeek-V3模型特点

  • 采用MoE架构(61个专家模块),总参数量671B但仅激活37B参数
  • 引入MLA(Multi-Head Latent Attention)注意力机制,显著减小KV缓存
  • 使用混合精度框架(FP8)降低训练计算量
  • 在主流榜单中与顶级闭源模型性能相当

2. DeepSeek-R1模型突破

  • 基于V3模型通过GRPO强化学习训练
  • 思维链长度可达数万字,支持复杂推理
  • 性能对标OpenAI o1模型
  • 提供API调用(deepseek-reasoner)

二、模型部署与使用

1. 私有化部署选项

模型类型参数量显存需求适用场景
1.5B-14B小模型1-12GB轻量级任务
32B中模型24-48GB专业领域
70B大模型96-128GB高精度任务
671B满血版496GBAGI研究

2. 部署方式

  • Ollama部署​:支持macOS/Linux/Windows

    ollama pull deepseek-r1:1.5b
    ollama run deepseek-r1:1.5b
  • vLLM高速推理框架​: 公司使用

    vllm serve deepseek-r1-distill-qwen-32b --tensor-parallel-size 2

三、提示词工程核心原则

1. 提示词组成要素(重要性排序)

  1. 任务​:明确动词开头的目标
  2. 上下文​:提供背景信息
  3. 示例​:展示期望输出格式
  4. 角色​:指定AI扮演的身份
  5. 格式​:定义输出结构
  6. 语气​:设定回答风格

2. 通用模型vs推理模型提示策略

模型类型提示特点适用场景
通用模型需要分步引导,依赖Few-shot示例创意写作、常规问答
推理模型简洁指令,信任内化能力数学、编程等逻辑任务

四、Prompt实战技巧

1. 核心技巧

  1. 限制输出格式​:如JSON结构化返回

    "以JSON格式输出包含名称、价格、流量的套餐信息"
  2. 使用分隔符​:清晰区分输入部分

    '''请总结以下三个引号内的文本'''
  3. CoT思维链​:分步解决复杂问题

    "请按步骤计算:1.加1000 2.减500 3.乘1.2"

2. 优化方法

  • 迭代测试​:根据输出持续调整Prompt
  • 角色扮演​:明确AI身份(如"你是一名专业客服")
  • 示例引导​:提供输入输出对示范

五、典型应用案例

1. 小球碰撞模拟

  • 使用DeepSeek-R1生成HTML/JavaScript代码
  • 通过多次交互优化物理效果
  • 最终实现包含重力、弹力等参数的完整模拟

2. 客服场景Prompt优化

"""
你是一名电信客服"小瓜",需:
1. 保持礼貌官方口吻
2. 准确提及套餐名称、价格、流量
3. 不可使用网络用语
已知套餐:
- 经济套餐:50元/10G
- 畅游套餐:180元/100G 
"""

Ollama 运用代码

流程说明


​PDF解析阶段​

1. 代码功能概述

该代码实现了一个课程大纲分析系统,主要功能包括:

2.2 学习路径生成

2.3 输出处理


3. 关键技术点


4. 扩展应用场景


5. 改进建议

  • PDF文本提取​:使用pdfplumber库解析PDF文件,提取文本内容和章节结构
  • 章节识别​:通过正则表达式匹配多级标题(如"第X章"、"1.1"等格式)
  • 学习路径生成​:调用DeepSeek-R1模型(通过Ollama API)生成结构化学习建议
  • 结果输出​:

    2. 核心模块解析

    2.1 PDF解析与章节识别
  • 文本提取​:
    使用pdfplumber.open()逐页读取PDF,通过extract_text()获取文本内容,并标注页码信息。
  • 标题识别逻辑​:
    • 正则匹配多级标题(如r'^第[一二三四五六七八九十\d]+章'匹配中文章节)
    • 辅助规则:全大写文本、含"学习"/"知识"等关键词的短文本也被视为标题
    • 层级判定:
      • 一级标题:第X章1. 标题
      • 二级标题:1.1 标题一、标题
      • 三级标题:1.1.1 标题
  • 模型交互​:
    • 构建结构化提示词,包含章节树状结构和课纲前8000字符
    • 调用DeepSeek-R1时启用temperature=0.2top_p=0.9,平衡创造性与稳定性
    • 响应解析优先提取JSON块(兼容模型可能附加的解释文本)
  • 错误处理​:
    • JSON解码失败时保留原始响应
    • 捕获API超时等异常
  • 控制台展示​:
    格式化输出学习阶段、核心概念、练习顺序等,使用符号图标(如📖🎯)增强可读性
  • JSON持久化​:
    按时间戳生成文件名,确保ASCII转义关闭(ensure_ascii=False)以支持中文
  • PDF解析优化

    • 混合正则规则与启发式判断,提升标题识别准确率
    • 记录页码+行号,便于人工校验
  • 大模型工程化应用

    • 两阶段生成:先提取章节结构,再填充细节(如学习目标、练习类型)
    • 通过num_predict=2000确保长文生成完整性
  • 结构化输出设计

    {"learning_stages": [{"stage_number": 1,"key_concepts": ["核心概念1", "核心概念2"],"practice_order": ["练习类型1", "练习类型2"]}]
    }

    字段覆盖教学设计的核心要素(时间预估、预习要求等)

  • 教育自动化​:适配在线教育平台的课程规划自动化
  • 文档分析​:扩展支持EPUB、Word等格式(需调整解析逻辑)
  • 多模型支持​:替换Ollama接口为其他LLM(如GPT-4)
  • 性能优化
    • 使用多线程处理PDF分页解析(注意pdfplumber的线程安全性)
    • 缓存模型响应,减少重复请求
  • 错误恢复
    • 添加PDF解析失败时的备用文本提取方案(如PyMuPDF
  • 交互增强
    • 支持用户手动修正误识别的章节标题
  • 支持控制台格式化展示和JSON文件保存

6.完整代码

try:import pdfplumber
except ImportError:print("❌ 请安装pdfplumber: pip install pdfplumber")exit(1)import ollama
from typing import List, Dict, Tuple
import re
import json
import os
from datetime import datetimeclass SyllabusAnalyzer:def __init__(self, model_name="deepseek-r1:1.5b"):self.model_name = model_namedef extract_pdf_content(self, pdf_path: str) -> Tuple[str, List[Dict]]:"""提取PDF内容并识别章节结构"""if not os.path.exists(pdf_path):raise FileNotFoundError(f"PDF文件不存在: {pdf_path}")full_text = ""sections = []with pdfplumber.open(pdf_path) as pdf:for page_num, page in enumerate(pdf.pages):# 提取页面文本text = page.extract_text()if text:full_text += f"\n=== 第{page_num+1}页 ===\n{text}\n"# 按行分析文本,识别章节标题lines = text.split('\n')for line_num, line in enumerate(lines):clean_line = line.strip()if clean_line and self._is_section_title(clean_line):level = self._determine_section_level(clean_line)sections.append({"title": clean_line,"level": level,"page": page_num + 1,"line": line_num + 1})return full_text, sectionsdef _is_section_title(self, text: str) -> bool:"""判断是否为章节标题"""# 匹配各种章节标题格式patterns = [r'^第[一二三四五六七八九十\d]+章',  # 第X章r'^第[一二三四五六七八九十\d]+节',  # 第X节r'^\d+\.\s+.+',                    # 1. 标题r'^\d+\.\d+\s+.+',                # 1.1 标题r'^[一二三四五六七八九十]+、',      # 一、标题r'^([一二三四五六七八九十\d]+)',  # (一)标题]for pattern in patterns:if re.match(pattern, text):return True# 检查是否为全大写标题或特殊格式return len(text) < 50 and (text.isupper() or '学习' in text or '知识' in text)def _determine_section_level(self, text: str) -> int:"""确定章节层级"""if re.match(r'^第[一二三四五六七八九十\d]+章', text):return 1elif re.match(r'^\d+\.\s+', text):return 1elif re.match(r'^\d+\.\d+\s+', text):return 2elif re.match(r'^\d+\.\d+\.\d+\s+', text):return 3else:return 2def generate_learning_path(self, pdf_text: str, sections: List[Dict]) -> Dict:"""使用deepseek-r1模型生成学习路径"""# 构建章节结构section_structure = self._build_section_structure(sections)# 构建详细的提示词prompt = self._build_analysis_prompt(section_structure, pdf_text)try:response = ollama.chat(model=self.model_name,messages=[{"role": "user", "content": prompt}],options={"temperature": 0.2,"top_p": 0.9,"num_predict": 2000})# 尝试解析JSON响应content = response['message']['content']# 提取JSON部分(如果响应包含其他文本)json_match = re.search(r'\{.*\}', content, re.DOTALL)if json_match:json_str = json_match.group()return json.loads(json_str)else:# 如果没有找到JSON,尝试直接解析return json.loads(content)except json.JSONDecodeError as e:return {"error": f"JSON解析失败: {str(e)}","raw_response": response['message']['content']}except Exception as e:return {"error": f"生成学习路径时出错: {str(e)}","raw_response": str(e)}def _build_section_structure(self, sections: List[Dict]) -> str:"""构建章节结构字符串"""structure_lines = []for i, section in enumerate(sections[:30]):  # 限制章节数量indent = "  " * (section['level'] - 1)structure_lines.append(f"{indent}{section['title']} (第{section['page']}页)")return "\n".join(structure_lines)def _build_analysis_prompt(self, section_structure: str, pdf_text: str) -> str:"""构建分析提示词"""return f"""你是一名专业的教学设计师和课程规划专家。请根据以下课纲内容,设计一份详细的学习路径指南。## 课纲章节结构:
{section_structure}## 分析要求:
1. 将整个课程合理划分为3-5个学习阶段
2. 每个阶段建议学习2-4个章节
3. 为每个阶段标注建议学习时长(以小时为单位)
4. 明确指出每个阶段需要预习的知识点
5. 推荐每个阶段的练习顺序和类型
6. 提取每个章节的核心知识点(3-5个)## 输出格式(严格按照JSON格式):
{{"course_title": "课程名称","total_estimated_hours": 总学习时长,"learning_stages": [{{"stage_number": 1,"stage_name": "阶段名称","chapters": ["章节1", "章节2", "章节3"],"suggested_hours": 学习时长数字,"prerequisites": ["预习知识点1", "预习知识点2"],"key_concepts": ["核心概念1", "核心概念2", "核心概念3"],"practice_order": ["练习类型1", "练习类型2", "练习类型3"],"learning_objectives": ["学习目标1", "学习目标2"]}}],"study_tips": ["学习建议1", "学习建议2", "学习建议3"]
}}## 课纲内容:
{pdf_text[:8000]}请严格按照上述JSON格式输出,确保所有字段都包含有意义的内容。"""def save_results(self, learning_path: Dict, output_file: str = None):"""保存分析结果到文件"""if output_file is None:timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")output_file = f"learning_path_{timestamp}.json"with open(output_file, 'w', encoding='utf-8') as f:json.dump(learning_path, f, ensure_ascii=False, indent=2)print(f"学习路径已保存到: {output_file}")def display_learning_path(self, learning_path: Dict):"""格式化显示学习路径"""if "error" in learning_path:print("❌ 生成学习路径时出错:")print(learning_path["error"])if "raw_response" in learning_path:print("\n原始响应:")print(learning_path["raw_response"])returnprint("📚 课程学习路径分析")print("=" * 60)print(f"课程名称: {learning_path.get('course_title', '未知课程')}")print(f"预计总时长: {learning_path.get('total_estimated_hours', '未知')} 小时")print()for stage in learning_path.get('learning_stages', []):print(f"🎯 阶段 {stage.get('stage_number', '?')}: {stage.get('stage_name', '未知阶段')}")print(f"   ⏱️  建议时长: {stage.get('suggested_hours', '?')} 小时")print(f"   📖 包含章节: {', '.join(stage.get('chapters', []))}")print("   🔍 核心知识点:")for concept in stage.get('key_concepts', []):print(f"      • {concept}")print("   📋 预习要求:")for prereq in stage.get('prerequisites', []):print(f"      • {prereq}")print("   🏃 练习顺序:")for i, practice in enumerate(stage.get('practice_order', []), 1):print(f"      {i}. {practice}")print("   🎯 学习目标:")for objective in stage.get('learning_objectives', []):print(f"      • {objective}")print("-" * 60)if 'study_tips' in learning_path:print("💡 学习建议:")for tip in learning_path['study_tips']:print(f"   • {tip}")def main():"""主函数"""# 初始化分析器analyzer = SyllabusAnalyzer()# PDF文件路径 - 请修改为你的实际路径pdf_path = input("请输入课纲PDF文件路径: ").strip().strip('"')if not pdf_path:print("❌ 请提供有效的PDF文件路径")returntry:print("📖 正在提取PDF内容...")pdf_text, sections = analyzer.extract_pdf_content(pdf_path)print(f"✅ 成功提取 {len(sections)} 个章节")print("🤖 正在使用 deepseek-r1:1.5b 分析课纲...")learning_path = analyzer.generate_learning_path(pdf_text, sections)print("📊 分析完成,正在显示结果...")analyzer.display_learning_path(learning_path)# 保存结果save_option = input("\n是否保存结果到文件?(y/n): ").strip().lower()if save_option == 'y':analyzer.save_results(learning_path)except FileNotFoundError:print(f"❌ 找不到PDF文件: {pdf_path}")except Exception as e:print(f"❌ 处理过程中出错: {str(e)}")if __name__ == "__main__":main()

7. 输出截屏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/90668.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/90668.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在FreeBSD系统下使用llama-cpp运行飞桨开源大模型Ernie4.5 0.3B(失败)

先上结论&#xff0c;截止到目前2025.7.25日&#xff0c;还不能用。也就是Ernie4.5模型无法在llama.cpp 和Ollama上进行推理&#xff0c;原因主要就llama是不支持Ernie4.5异构MoE架构。 不局限于FreeBSD系统&#xff0c;Windows也测试失败&#xff0c;理论上Ubuntu下也是不行。…

OpenCV图像梯度、边缘检测、轮廓绘制、凸包检测大合集

一、图像梯度 在图像处理中&#xff0c;「梯度&#xff08;Gradient&#xff09;」是一个非常基础但又极其重要的概念。它是图像边缘检测、特征提取、纹理分析等众多任务的核心。梯度的本质是在空间上描述像素灰度值变化的快慢和方向。 但我们如何在图像中计算梯度&#xff1f;…

GitHub 趋势日报 (2025年07月25日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图1814Resume-Matcher985neko714Qwen3-Coder622OpenBB542BillionMail486hrms219hyper…

编程语言Java——核心技术篇(五)IO流:数据洪流中的航道设计

&#x1f31f; 你好&#xff0c;我是 励志成为糕手 &#xff01; &#x1f30c; 在代码的宇宙中&#xff0c;我是那个追逐优雅与性能的星际旅人。 ✨ 每一行代码都是我种下的星光&#xff0c;在逻辑的土壤里生长成璀璨的银河&#xff1b; &#x1f6e0;️ 每一个算法都是我绘制…

基于FPGA的16QAM软解调+卷积编码Viterbi译码通信系统,包含帧同步,信道,误码统计,可设置SNR

目录 1.引言 2.算法仿真效果 3.算法涉及理论知识概要 3.1 16QAM调制软解调原理 3.2 帧同步 3.3 卷积编码&#xff0c;维特比译码 4.Verilog程序接口 5.参考文献 6.完整算法代码文件获得 1.引言 基于FPGA的16QAM软解调卷积编码Viterbi译码通信系统开发,包含帧同步,高斯…

Python数据分析基础(二)

一、Numpy 常用函数分类概览函数类别常用函数基本数学函数np.sum(x)、np.sqrt(x)、np.exp(x)、np.log(x)、np.sin(x)、np.abs(x)、np.power(a, b)、np.round(x, n) 等统计函数np.mean(x)、np.median(x)、np.std(x)、np.var(x)、np.min(x)、np.max(x)、np.percentile(x, q) 等比…

Colab中如何临时使用udocker(以MinIO为例)

本文主要是想记录一下自己在Colab中用udocker启动一个MinIO的容器的过程。 1. 命令行配置环境 由于目前没有用到GPU&#xff0c;所以我选择的是CPU的环境。(内存12G)然后就可以在命令行里安装udocker了&#xff0c;并配置minio的环境 # 由于minio需要做两个端口映射&#xff0c…

rt-thread 5.2.1 基于at-start-f437开发过程记录

基于rt-thread 5.2.1 bsp/at/at32f437-start进行开发&#xff0c;记录详细过程&#xff0c;包括中间遇到的各种坑。 at32f437-start原理图 自己设计的电路板主要换了一块小封装的同系列芯片, 目标是移植opENer。 1. 开发环境 env长时间不用&#xff0c;有点忘了。这次新下载…

EMCCD相机与电可调变焦透镜的同步控制系统设计与实现

EMCCD相机与电可调变焦透镜的同步控制系统设计与实现 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff0c;觉得好请收藏。点击跳转到网站。 摘要 本文详细介绍了基于Python的EMCCD相机&#xff0…

前缀和-560.和为k的子数组-力扣(LeetCode)

一、题目解析1.子数组是数组中元素的连续非空序列2.nums[i]范围为[-1000,1000]&#xff0c;存在负数3.由于2的题目条件&#xff0c;该题不能用双指针算法&#xff0c;不具备单调性 二、算法原理解法1&#xff1a;暴力解法->枚举 O(N^2)固定一个值&#xff0c;向后枚举数组和…

解决企业微信收集表没有图片、文件组件,不能收集图片的问题

问题&#xff1a; 企业微信里面的收集表功能&#xff0c;有一个图片收集的收集表&#xff0c;但是插入的组件没有收集图片的组件&#xff1f; 原因&#xff1a; 大概率是微盘未启用 解决方法&#xff1a; 1、登陆企业微信管理后台 企业微信 2、访问微盘页面&#xff0c;…

认识单片机

《认识单片机》课程内容 一、课程导入 在我们的日常生活中&#xff0c;有很多看似普通却充满智慧的小物件。比如家里的智能电饭煲&#xff0c;它能精准地控制煮饭的时间和温度&#xff0c;让米饭煮得香喷喷的&#xff1b;还有楼道里的声控灯&#xff0c;当有人走过发出声音时&a…

数据结构(2)顺序表算法题

一、移除元素1、题目描述2、算法分析 思路1&#xff1a;查找val值对应的下标pos&#xff0c;执行删除pos位置数据的操作。该方法时间复杂度为O&#xff08;n^2&#xff09;&#xff0c;因此不建议使用。思路2&#xff1a;创建新数组&#xff08;空间大小与原数组一致&#xff0…

汽车电子架构

本文试图从Analog Devices官网中的汽车解决方案视角带读者构建起汽车电子的总体架构图&#xff0c;为国内热爱和从事汽车电子行业的伙伴们贡献一份力量。 一 、汽车电子架构总览 整个汽车电子包括四个部分&#xff1a;车身电子&#xff08;Body Electronics&#xff09;、座舱与…

pycharm 2025 专业版下载安装教程【附安装包】

安装之前&#xff0c;请确保已经关闭所有安全软件&#xff08;如杀毒软件、防火墙等&#xff09;安装包 &#x1f447;链接&#xff1a;https://pan.xunlei.com/s/VOU-5_L1KOH5j3zDaaCh-Z28A1# 提取码&#xff1a;6bjy下载 PyCharm2025专业版 安装包 并 进行解压运行 pycharm-2…

在 Java 世界里让对象“旅行”:序列化与反序列化

Java 生态里关于 JSON 的序列化与反序列化&#xff08;以下简称“序列化”&#xff09;是一个久经考验的话题&#xff0c;却常因框架繁多、配置琐碎而让初学者望而却步。本文将围绕一段极简的 JsonUtils 工具类展开&#xff0c;以 FastJSON 与 Jackson 两大主流实现为例&#x…

High Speed SelectIO Wizard ip使用记录

本次实验的目的是通过VU9P开发板的6个TG接口&#xff0c;采用固定连接的方式&#xff0c;即X和X-维度互联&#xff0c;其框图如下所示&#xff1a;IP参数配置通过调用High Speed SelectIO Wizard来实现数据通路&#xff0c;High Speed SelectIO Wizard ip有24对数据通道&#x…

Execel文档批量替换标签实现方案

问题背景需求&#xff1a;俺现网班级作为维度&#xff0c;批量导出每个班级学员的数据&#xff0c;excel的个数在1k左右&#xff0c;每一张表的人数在90左右。导出总耗时在10小时左右。代码编写完成并导出现网数据后&#xff0c;发现导出的标题错了。解决方案1.通过修改代码&am…

SpringBoot配置多数据源多数据库

Springboot支持配置多数据源。默认情况&#xff0c;在yml文件中只会配置一个数据库。如果涉及到操作多个数据库的情况&#xff0c;在同实例中&#xff08;即同一个ip地址下的不同数据库&#xff09;&#xff0c;可以采用数据库名点数据库表的方式&#xff0c;实现跨库表的操作。…

Rocky9.4部署Zabbix7

一、配置安装源 rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rocky/9/x86_64/zabbix-release-7.0-5.el9.noarch.rpm ​ yum clean all 二、安装Zabbix server&#xff0c;Web前端&#xff0c;agent yum install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf z…