保姆级教程|Python+DeepSeek-V4-Pro实现AI客服Demo 支持OCR扫描PDF+全格式RAG知识库(附完整源码)
一、前言当下大模型开发学习中AI对话问答是最热门的入门实践方向。相比于固定话术的传统问答程序大模型驱动的对话Demo具备上下文记忆、自然语言理解、智能应答、场景适配等能力非常适合新手练习大模型API调用、RAG知识库开发、OCR图文识别等核心技术。DeepSeek 是国内高性能大模型服务平台提供高稳定、低延迟的官方API服务完全兼容OpenAI调用规范接入简单、学习成本低。本文将手把手带大家基于Python DeepSeek API搭建一套功能完整的AI智能对话客服Demo。项目最终实现多轮上下文对话、流式打字输出、自定义问答人设、RAG私有知识库、TXT/PDF/Word/扫描PDF/图片全格式文档解析本地OCR全套代码开箱即用零基础可搭建适合大模型全流程技术学习。二、项目技术栈与核心功能2.1 核心技术栈运行环境Python 3.8全平台兼容大模型服务DeepSeek Official API最新 DeepSeek-V4-Pro调用框架OpenAI 兼容SDK零改造快速接入适合API学习RAG向量知识库langchain、faiss-cpu、sentence-transformers本地轻量化检索学习文档解析依赖PyPDF2、python-docx常规文档解析学习OCR图文识别依赖pytesseract、pdf2image、pillow扫描件/图片解析实践核心特性本地私有化部署、数据零上传、无泄露风险、低模型幻觉纯技术学习向2.2 项目功能亮点✅ 自定义问答人设适配日常咨询、知识答疑等学习场景✅ 完整多轮对话记忆上下文连贯告别单轮问答割裂问题✅ 流式实时输出模拟真人打字效果交互体验优秀✅全格式知识库支持TXT、Word、普通PDF、扫描PDF、JPG、PNG✅ 智能双模解析可复制文本高速解析、空白扫描文档自动触发OCR✅ 批量自动切片、向量化入库无需手动整理文档内容✅ 全流程本地化OCR识别、文档解析、向量检索均本地完成学习环境下保护文件内容✅ 支持模型参数自定义创意度、最大输出字数、思考模式自由调节✅ 轻量化无冗余代码适合二次修改调试、技术拓展学习三、前置环境准备保姆级零报错配置本项目新增本地OCR扫描文档识别能力可适配扫描手册、拍照文档、图片资料是学习OCR大模型结合开发的优质案例。部署前需完成「API密钥获取、Python依赖安装、系统OCR组件配置」三步操作。3.1 获取 DeepSeek API Key访问官方平台DeepSeek 开放平台完成注册并登录进入【API密钥管理】页面生成专属 API Key核心注意密钥仅展示一次立即复制保存严禁公开泄露避免被盗用扣费平台提供免费测试额度完全满足个人学习、项目调试使用当前全线适配DeepSeek-V4-Pro综合能力、文档解析能力大幅升级适合技术实践学习。3.2 批量安装Python依赖库一键安装所有RAG、文档解析、OCR识别依赖采用清华镜像加速解决超时、安装失败问题pipinstallopenai langchain faiss-cpu sentence-transformers PyPDF2 python-docx pytesseract pdf2image pillow-ihttps://pypi.tuna.tsinghua.edu.cn/simple3.3 系统OCR核心组件安装全系统统一规范OCR识别依赖两大必备组件Tesseract-OCR文字识别引擎、PopplerPDF转图片工具。以下为全系统统一规范安装、路径配置、校验教程彻底解决新手配置报错、中文乱码、识别为空等问题适配零基础学习。3.3.1 Windows 系统完整配置Win10/Win11通用① Tesseract-OCR 安装与配置官方下载地址Tesseract-OCR 官方发布页推荐版本最新稳定版tesseract-ocr-w64-setup-5.5.3.20260724.exe64位专属安装核心规范必看安装路径统一默认C:\Program Files\Tesseract-OCR禁止中文、空格、自定义路径组件勾选核心运行程序、增强脚本数据、简体中文英文语言包勾选「自动添加系统环境变量」简化配置流程兜底环境变量配置自动配置失效时手动补充系统Path变量新增路径C:\Program Files\Tesseract-OCR② Poppler 工具安装与配置PDF转图片必备官方发布页poppler-windows 官方Release稳定兼容版直链poppler-24.08.0-0-w64.zip统一解压规范解压至纯英文无空格路径C:\poppler核心配置路径唯一有效路径C:\poppler\Library\bin将上述 bin 路径添加至系统Path环境变量③ 配置校验百分百生效验证关闭所有终端、IDE重启后依次执行校验命令输出版本号即配置成功tesseract-vpdfinfo-v④ 代码路径兜底Windows专属防错在项目代码中取消注释以下配置固定引擎路径彻底规避路径找不到报错# Windows系统固定路径兜底Mac/Linux请注释此行pytesseract.pytesseract.tesseract_cmdrC:\Program Files\Tesseract-OCR\tesseract.exe3.3.2 Mac 系统一键配置安装Homebrew后终端执行一键命令自动安装组件、配置环境、适配中文brewinstalltesseract poppler校验命令tesseract -v输出版本号即可正常使用。3.3.3 Linux 系统一键配置Ubuntu/Debiansudoaptupdatesudoaptinstalltesseract-ocr tesseract-ocr-chi-sim poppler-utils-y自动安装简体中文语言包、OCR引擎、PDF解析工具零额外配置。3.3.4 中文识别异常专属修复方案中文乱码/识别为空确认安装时勾选简体中文语言包兜底修复下载chi_sim.traineddata中文模型放入Tesseract-OCR/tessdata目录代码强制双语识别固定参数OCR_LANG chi_simeng3.3.5 全局配置规范总结新手必记所有组件禁止安装在中文、空格、特殊字符路径环境变量修改后必须重启终端/IDE方可生效扫描PDF解析失败90%为Poppler路径配置错误Windows优先开启代码路径兜底一劳永逸解决报错四、全格式RAGOCR知识库原理传统RAG知识库仅支持可复制文本文档无法适配扫描件、拍照文档是新手学习大模型知识库开发的常见难点。本项目升级智能双模解析架构全自动区分文档类型非常适合入门学习核心流程读取本地文档 → 优先常规文本解析 → 无有效文本自动触发OCR图文识别 → 文本清洗智能切片 → 本地向量化入库 → 语义相似度检索 → 大模型精准答疑核心优势全流程本地化处理文档数据无需上传云端适合本地技术练习自动适配所有主流文档格式无需人工分类、格式转换降低学习门槛。五、完整可运行源码全格式OCRRAG智能问答Demo以下代码整合所有功能统一编码规范、路径配置、异常捕获兼容全平台开箱即用无冗余代码适合新手学习参考。importosimportshutilfromopenaiimportOpenAIfromlangchain.embeddingsimportSentenceTransformerEmbeddingsfromlangchain.vectorstoresimportFAISSfromlangchain.text_splitterimportCharacterTextSplitterfromlangchain.document_loadersimportTextLoader,PyPDFLoader,Docx2txtLoaderfromlangchain.schemaimportDocument# OCR识别依赖importpytesseractfrompdf2imageimportconvert_from_pathfromPILimportImage# 全局统一配置全路径规范固定# DeepSeek API 客户端初始化clientOpenAI(api_keyos.environ.get(DEEPSEEK_API_KEY),base_urlhttps://api.deepseek.com/v1)# 向量模型与文件路径统一配置EMBEDDING_MODELall-MiniLM-L6-v2FAISS_DB_PATHdeepseek_rag_dbKNOWLEDGE_DIRknowledge_baseOCR_LANGchi_simeng# Windows系统Tesseract路径兜底Mac/Linux注释此行# pytesseract.pytesseract.tesseract_cmd rC:\Program Files\Tesseract-OCR\tesseract.exe# 自动创建知识库目录ifnotos.path.exists(KNOWLEDGE_DIR):os.mkdir(KNOWLEDGE_DIR)withopen(os.path.join(KNOWLEDGE_DIR,使用说明.txt),w,encodingutf-8)asf:f.write(支持格式TXT、DOCX、PDF、扫描PDF、JPG、PNG\n放入文件后输入 update 即可更新知识库\n)classDeepSeekRAGChatDemo:def__init__(self):# 统一问答人设提示词self.system_prompt 你是专业耐心的智能问答助手严格遵循以下规则应答 1. 优先依据知识库内容回答无资料不编造、不幻觉 2. 知识库无匹配内容使用通用知识友好回复并主动告知 3. 语气通俗简洁、耐心友好拒绝冗余专业术语 4. 无法解答礼貌说明全程使用中文应答 .strip()# 初始化对话上下文self.chat_history[{role:system,content:self.system_prompt}]# 初始化向量模型与知识库self.embeddingSentenceTransformerEmbeddings(model_nameEMBEDDING_MODEL)self.vector_dbself.init_rag_db()defocr_scan_pdf(self,file_path):OCR解析扫描版/图片型PDF文档docs[]try:pagesconvert_from_path(file_path)foridx,pageinenumerate(pages):textpytesseract.image_to_string(page,langOCR_LANG).strip()iftext:docs.append(Document(page_contenttext,metadata{source:file_path,page:idx1}))exceptExceptionase:print(f[扫描PDF解析失败]{file_path}{str(e)})returndocsdefocr_image(self,file_path):OCR解析JPG/PNG图片文档docs[]try:imgImage.open(file_path)textpytesseract.image_to_string(img,langOCR_LANG).strip()iftext:docs.append(Document(page_contenttext,metadata{source:file_path}))exceptExceptionase:print(f[图片OCR解析失败]{file_path}{str(e)})returndocsdefload_all_documents(self):批量加载解析全格式文档智能双模识别documents[]file_count0forfile_nameinos.listdir(KNOWLEDGE_DIR):file_pathos.path.join(KNOWLEDGE_DIR,file_name)ifos.path.isdir(file_path):continue# 1. TXT文本文档iffile_name.endswith(.txt):loaderTextLoader(file_path,encodingutf-8)documents.extend(loader.load())file_count1# 2. PDF双模解析文本优先无文本自动OCReliffile_name.endswith(.pdf):loaderPyPDFLoader(file_path)pdf_docsloader.load()text_content.join([d.page_content.strip()fordinpdf_docs])ifnottext_content:pdf_docsself.ocr_scan_pdf(file_path)documents.extend(pdf_docs)file_count1# 3. Word文档eliffile_name.endswith((.docx,.doc)):loaderDocx2txtLoader(file_path)documents.extend(loader.load())file_count1# 4. 图片文档OCR解析eliffile_name.endswith((.jpg,.jpeg,.png)):documents.extend(self.ocr_image(file_path))file_count1print(f[系统] 本次共解析{file_count}个文档/图片文件)returndocumentsdefinit_rag_db(self):初始化/重建本地FAISS向量知识库# 加载已有知识库ifos.path.exists(FAISS_DB_PATH):returnFAISS.load_local(FAISS_DB_PATH,self.embedding,allow_dangerous_deserializationTrue)# 加载并切片文档documentsself.load_all_documents()ifnotdocuments:print([系统提示] 知识库暂无有效文档请放入文件后执行 update 更新)returnNonetext_splitterCharacterTextSplitter(chunk_size300,chunk_overlap50,separator\n)split_docstext_splitter.split_documents(documents)# 构建并保存向量库vector_dbFAISS.from_documents(split_docs,self.embedding)vector_db.save_local(FAISS_DB_PATH)print(f[系统] 知识库构建完成总文本片段数{len(split_docs)})returnvector_dbdefsearch_knowledge(self,query:str,top_k2):语义检索匹配私有知识库内容ifnotself.vector_db:return暂无私有知识库数据将使用通用知识作答resultsself.vector_db.similarity_search(query,ktop_k)return\n.join([doc.page_content.strip()fordocinresults])defchat_stream(self,user_input:str):流式对话RAG知识库增强应答rag_textself.search_knowledge(user_input)promptf【私有知识库内容】\n{rag_text}\n【用户问题】\n{user_input}self.chat_history.append({role:user,content:prompt})try:streamclient.chat.completions.create(modeldeepseek-v4-pro,messagesself.chat_history,temperature0.7,max_tokens2048,streamTrue,extra_body{thinking_mode:normal})full_replyprint([智能问答],end,flushTrue)forchunkinstream:contentchunk.choices[0].delta.contentifcontent:print(content,end,flushTrue)full_replycontent self.chat_history.append({role:assistant,content:full_reply})print(\n)exceptExceptionase:print(f[系统异常] 应答失败{str(e)}\n)defclear_history(self):清空本轮对话上下文记忆self.chat_history[{role:system,content:self.system_prompt}]print([系统] 已清空对话历史可重新提问\n)defupdate_knowledge(self):强制更新重建知识库ifos.path.exists(FAISS_DB_PATH):shutil.rmtree(FAISS_DB_PATH)self.vector_dbself.init_rag_db()print([系统] 全格式OCR知识库更新完成\n)if__name____main__:serviceDeepSeekRAGChatDemo()print(*75)print(DeepSeek 全格式OCR智能问答Demo启动成功 | 支持文本/扫描PDF/图片/Word)print(指令说明直接提问咨询 | clear清空对话 | update更新知识库 | exit退出程序)print(*75\n)whileTrue:user_inputinput([用户]).strip().lower()ifuser_inputexit:print([系统] 程序已退出感谢使用)breakelifuser_inputclear:service.clear_history()elifuser_inputupdate:service.update_knowledge()elifnotuser_input:print([系统提示] 输入内容不能为空请重新输入\n)else:service.chat_stream(user_input)六、知识库使用规范统一操作流程6.1 支持文件格式文本格式.txt、.docx、.doc、可复制文本PDF扫描图片格式扫描版PDF、图片型PDF、JPG、JPEG、PNG截图6.2 标准化使用步骤将学习文档、测试资料、文本素材统一放入项目knowledge_base文件夹控制台输入update指令系统自动完成解析、OCR识别、切片入库直接提问文档内相关问题程序优先匹配知识库精准应答新增/修改/删除文档后重复执行update即可更新知识库6.3 OCR识别优化规则默认开启「中文英文」双语识别适配绝大多数学习类文档智能容错单文件识别失败不影响整体知识库构建自动跳过损坏文件文本PDF优先高速解析空白内容自动切换OCR模式兼顾速度与兼容性七、项目核心学习优势7.1 双模智能解析零人工干预彻底解决传统RAG仅支持文本文档的学习痛点系统自动判别PDF类型可复制文本高速解析、扫描图片PDF自动OCR识别无需手动分类转换格式是学习多模态文档解析的优质案例。7.2 全本地化部署学习安全可控文档解析、OCR识别、向量检索全部在本地设备完成本地处理文件内容适合个人技术练习规避文件内容上传泄露问题。7.3 适配DeepSeek-V4-Pro模型能力新版模型对OCR碎片化文本、不规整排版文档适配性极强可自动梳理错乱内容、提取核心信息大幅提升扫描文档的问答准确率适合学习大模型文本纠错、语义理解能力。八、项目运行效果演示 DeepSeek 全格式OCR智能问答Demo启动成功 | 支持文本/扫描PDF/图片/Word 指令说明直接提问咨询 | clear清空对话 | update更新知识库 | exit退出程序 [系统] 本次共解析 5 个文档/图片文件 [系统] 知识库构建完成总文本片段数32 [用户]设备日常维护规范有哪些 [智能问答]您好设备日常维护需遵循以下规范 1. 每日开机前检查电源、线路、机身外观排查破损、漏电隐患 2. 设备运行禁止超负荷工作定时停机散热 3. 每日下班清理机身灰尘、杂物保持设备整洁 4. 每月完成整机巡检紧固零件、排查线路老化问题。 [用户]扫描件中的售后报修流程是什么 [智能问答]设备售后报修完整流程用户故障反馈 → 客服信息登记 → 技术初审 → 上门/寄修服务 → 故障确认 → 维修验收完结。 [用户]update [系统] 本次共解析 6 个文档/图片文件 [系统] 全格式OCR知识库更新完成 [用户]clear [系统] 已清空对话历史可重新提问 [用户]exit [系统] 程序已退出感谢使用九、API密钥安全配置学习最佳实践严禁在代码中明文写入API Key极易造成密钥泄露、恶意扣费统一使用系统环境变量配置适合学习开发规范9.1 Windows 临时配置当前终端生效setDEEPSEEK_API_KEY你的DeepSeek_API密钥9.2 Mac/Linux 临时配置exportDEEPSEEK_API_KEY你的DeepSeek_API密钥永久配置可写入系统环境变量文件重启终端即可全局生效。十、常见报错一站式排查全场景覆盖10.1 OCR识别为空/失效原因Tesseract未安装、环境变量未配置、未加载中文语言包解决方案重装完整版Tesseract配置系统环境变量开启代码路径兜底确认chi_sim语言参数正确。10.2 PDF转图片报错、poppler not found原因Poppler未安装或配置路径错误解决方案严格按照规范解压至C:\poppler仅配置Library\bin路径至环境变量重启终端生效。10.3 中文乱码、识别不全原因缺失中文训练模型解决方案补充chi_sim.traineddata模型至tessdata目录固定双语识别参数。10.4 通用运行报错API key is required未配置环境变量密钥重新设置DEEPSEEK_API_KEYInsufficient Balance账号额度不足前往DeepSeek平台领取免费额度或充值Word解析失败老旧.doc格式转为.docx后重新入库响应缓慢切换deepseek-chat轻量模型调低检索top_k数值十一、项目二次学习拓展方向Web接口拓展基于Flask/FastAPI封装接口练习前后端交互开发智能去重优化新增文本相似度去重学习RAG知识库优化技巧机器人对接学习适配公众号、小程序问答对接拓展大模型应用场景对话记忆优化新增对话摘要、超时清空功能学习大模型上下文优化高精度OCR升级可拓展对接云端OCR接口学习复杂场景图文识别优化十二、项目总结本项目完成了基础大模型对话 → 文本RAG知识库 → 多格式文档解析 → OCR扫描件识别的全流程技术实践。基于最新DeepSeek-V4-Pro大模型搭配本地FAISS向量检索私有化OCR识别解决了传统大模型Demo幻觉严重、格式适配单一、无法识别扫描文档的常见问题。整套项目代码轻量化、部署简单、零学习门槛全程本地运行非常适合新手练习大模型API调用、RAG检索、OCR图文识别等核心技术是入门大模型应用开发的优质实践案例。