
颠覆AI新时代!Langchain与DeepSeek-R1联手打造成本低效能高的RAG奇迹!
DeepSeek R1 的特点是使用强化学习(RL)进行后训练。预训练:通过大量语料库创建一个"预测下一个单词"的模型。监督微调(SFT):使用高质量的人类创建的指令-响应对来微调模型以完成特定任务。RLHF(带有人类反馈的强化学习):人类评估模型的输出,并使用分数作为奖励来更新模型。据报道,DeepSeek R1 在大规模上进行了强化学习,尤其是在第 3 步。
基于推理的大规模语言模型"DeepSeek-R1",并将其开源!
据说它的性能与OpenAI最准确的推理模型’o1’不相上下。更令人印象深刻的是,它是一个极具性价比的模型,API价格不到OpenAI o1的1/25。此外,它还在高度灵活的MIT许可证下开源,任何人都可以下载和使用该模型。
R1模型一经推出,便不仅反驳了之前关于提炼OpenAI o1的说法,官方也直接表示:“我们可以与o1的开源版本相媲美。”
值得一提的是,R1突破了以往的模型训练方法,完全不使用任何SFT数据,而是通过纯粹的RL训练模型。这表明R1已经学会了独立思考问题——这实际上更符合人类的思维规则。
当我想开发RAG聊天机器人时,我发现LangChain在我使用它开发RAG聊天机器人之前进行了巨大的更新。不幸的是,它并不像ChatGPT那样记住对话内容,也不能像客服聊天机器人那样输入新数据或进行特定问题的训练。
所以,让我给你一个实时聊天机器人的快速演示,向你展示我的意思。
我将上传一个包含图像的PDF,然后问聊天机器人一个问题:"总结这个PDF。"随意问任何你想问的问题。如果你看看聊天机器人生成输出的方式,你会看到PDF文件将其内容存储在临时文件中,使用PDFPlumberLoader处理复杂数据,如表格,并清理临时文件。
它使用SemanticChunker将文档拆分为语义块,并使用FAISS进行高效的基于相似性的搜索。检索器为查询找到最相似的3个块,并使用history_aware_retriever增强代理将整个对话历史纳入检索过程的能力。
它还集成了context_chain以处理外部输入数据和docs_chain以记录对话,使用create_retrieval_chain形成完整的检索过程。它通过验证文档是否已上传、检索上下文以及使用RAG链生成响应来处理上下文感知的响应。
在视频结束时,你将了解Deepseek R1是如何训练的,以及如何使用Deepseek-R1与RAG。
DeepSeek R1 学习方法概述
DeepSeek R1 的特点是使用强化学习(RL)进行后训练。一般来说,大规模语言模型的开发经过以下步骤:
-
预训练:通过大量语料库创建一个"预测下一个单词"的模型。
-
监督微调(SFT):使用高质量的人类创建的指令-响应对来微调模型以完成特定任务。
-
RLHF(带有人类反馈的强化学习):人类评估模型的输出,并使用分数作为奖励来更新模型。
据报道,DeepSeek R1 在大规模上进行了强化学习,尤其是在第 3 步。此外,他们探索了一种通过直接应用 RL 的方法,而不使用传统的 SFT(称为 DeepSeek-R1-Zero),然后再添加 SFT 来完成 DeepSeek R1。这种方法被认为促进了模型的内部思维过程(思维链)和自我验证。
通常,有效处理思维链需要一些 SFT 数据和人类标签。然而,DeepSeek-R1-Zero 声称仅通过 RL 实现了推理能力,而没有经过 SFT。这种方法提供了以下优势:
-
降低大规模数据收集的成本
-
使模型能够在未知任务和复杂情况下进行自我纠正
然而,完全没有经过 SFT 的模型仍然存在一些问题,例如文本有些难以阅读和意外的多语言内容。
让我们构建应用程序
现在让我们逐步探索并揭示如何创建 RAG 应用程序的答案。我们将安装支持该模型的库。为此,我们将执行 pip install requirements
pip install -r requirements.txt
下一步是通常的步骤,我们将导入相关库,其重要性在后续过程中将变得明显。
PDFPlumberLoader 是一个非常强大的工具,用于处理复杂的结构化数据,例如来自 PDF 文件的表格。它可以提取文本、图像、表格、字段等。
SemanticChunker 根据语义相似性将文本拆分为块,确保相关内容保留在同一块中。
如果您想了解更多关于最新 langchain 升级的信息,我将在其中详细解释。
import os import streamlit as st from langchain_community.document_loaders import PDFPlumberLoader from langchain_experimental.text_splitter import SemanticChunker from langchain_huggingface import HuggingFaceEmbeddings import os from langchain_community.vectorstores import FAISS from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain.chains.history_aware_retriever import create_history_aware_retriever from langchain.chains.combine_documents import create_stuff_documents_chain from langchain.chains.retrieval import create_retrieval_chain from langchain_core.messages import AIMessage, HumanMessage import tempfile from langchain_openai.chat_models.base import BaseChatOpenAI
文件处理函数
我创建了一个函数来处理上传的文件,使用临时文件存储其内容。然后,我使用 PDFPlumberLoader 处理 PDF,以处理复杂的结构化数据,例如来自 PDF 文件的表格,确保在之后清理临时文件以保持系统整洁。最后,我返回提取的数据以供进一步使用。
def process_uploaded_file(uploaded_file): with tempfile.NamedTemporaryFile(delete=False, suffix='.pdf') as tmp_file: tmp_file.write(uploaded_file.getvalue()) loader = PDFPlumberLoader(tmp_file.name) documents = loader.load() os.unlink(tmp_file.name) return documents
检索器构建函数
我创建了一个函数来处理文档列表并构建一个基于相似性的搜索检索器。首先,我使用 SemanticChunker
和 OpenAIEmbeddings
将文档拆分为较小的块,同时保留语义关系,确保相关内容保持在一起。
def get_vs_retriever_from_docs(doc_list): text_splitter = SemanticChunker(HuggingFaceEmbeddings()) documents = text_splitter.split_documents(doc_list) st.write('文档拆分完成') embedder = HuggingFaceEmbeddings() vector = FAISS.from_documents(documents, embedder) return vector.as_retriever(search_type="similarity", search_kwargs={"k": 3})
UI初始化函数
我创建了 init_ui()
函数,以设置一个用户友好的界面,用于使用 Streamlit 上传和分析 PDF 文档。
def init_ui(): st.set_page_config(page_title='文档上传器') st.markdown('#### :books:🧙高达烈 (Gao Dalie): 您的文档摘要工具') st.markdown("<h8 style='text-align: right; color: green;'>*分享您想阅读的书的 PDF*</h8>", unsafe_allow_html=True) if"vector_store"notin st.session_state: st.session_state.vector_store = None if"chat_history"notin st.session_state: st.session_state.chat_history = [] if"doc_upload"notin st.session_state: st.session_state.doc_upload = False uploaded_file = st.file_uploader("上传 PDF", type=["pdf"]) if uploaded_file: docs = process_uploaded_file(uploaded_file) if docs: retriever = get_vs_retriever_from_docs(docs) st.session_state.vector_store = retriever st.session_state.doc_upload = True st.success("文档处理成功")
上下文检索函数
我创建了 get_related_context()
函数,以改善对话系统中相关信息的检索。
def get_related_context(vector_store): llm = BaseChatOpenAI( model='deepseek-reasoner', openai_api_key='sk-68f459660c7b4d179e074cbedce962c0', openai_api_base='https://api.deepseek.com', max_tokens=1024 ) prompt = ChatPromptTemplate.from_messages([ ("system", "根据对话生成搜索查询。"), ("user", "{input}") ]) return create_history_aware_retriever(llm, vector_store, prompt)
上下文感知提示函数
def get_context_aware_prompt(context_chain): llm = BaseChatOpenAI( model='deepseek-reasoner', openai_api_key='sk-68f459660c7b4d179e074cbedce962c0', openai_api_base='https://api.deepseek.com', max_tokens=1024 ) prompt = ChatPromptTemplate.from_messages([ ("system", "使用提供的上下文回答问题:\n\n{context}"), ("user", "{input}") ]) return create_retrieval_chain(context_chain, docs_chain)
响应生成函数
def get_response(query: str) -> str: ifnot st.session_state.vector_store: return"错误:请先上传文档" try: context_chain = get_related_context(st.session_state.vector_store) ifnot context_chain: return"错误:无法处理上下文" rag_chain = get_context_aware_prompt(context_chain) current_history = st.session_state.chat_history[-2:] iflen(st.session_state.chat_history) > 1else [] return rag_chain.invoke({ "chat_history": current_history, "input": query })["answer"].do except Exception as e: return f"错误:{str(e)}"
聊天界面初始化
def init_chat_interface(): for message in st.session_state.chat_history: with st.chat_message("user"ifisinstance(message, HumanMessage) else"assistant"): st.write(message.content) if prompt := st.chat_input("问一个问题...", disabled=not st.session_state.doc_upload): st.session_state.chat_history.append(HumanMessage(content=prompt)) response = get_response(prompt) st.session_state.chat_history.append(AIMessage(content=response)) if __name__ == "__main__": init_ui() if st.session_state.vector_store: init_chat_interface()
实践指南:快速接入DeepSeek-R1
在完成上述RAG系统构建后,开发者常面临模型部署的工程化挑战。为此推荐使用Rifx.Online AI模型市场进行快速集成。
🔗 相关链接:
-
AI模型市场:https://rifx.online/models/
-
DeepSeek-R1免费版:https://rifx.online/models/deepseek-deepseek-r1free/
-
DeepSeek-R1专业版:https://rifx.online/models/deepseek-deepseek-r1/
-
限时优惠活动:https://rifx.online/#special-offers–free-trial-models
该平台提供以下特性:
技术特性
# 标准OpenAI接口兼容 from openai import OpenAI client = OpenAI( api_key="YOUR_RIFX_KEY", base_url="https://api.rifx.online/v1" # 兼容OpenAI标准端点 ) response = client.chat.completions.create( model="deepseek-r1", # 指定模型版本 messages=[{"role": "user", "content": "解释量子计算的核心概念"}], max_tokens=1024, temperature=0.3 ) print(response.choices[0].message.content)
-
📈 性能监控面板:实时追踪P99延迟、token消耗、错误率等关键指标
-
⚡ 智能路由:自动选择最优API节点
结论
DeepSeek R1 的发布是一个技术突破,也是人工智能民主化的一个关键里程碑。它的开放方法正在重塑我们对人工智能的看法,使更多人能够参与其开发。
实践推荐
想要亲身体验DeepSeek-R1的强大功能?推荐通过Rifx.Online AI聚合平台进行体验,该平台提供:
- 🆓 免费版:适合个人开发者和小规模实验
> 链接:https://rifx.online/models/deepseek-deepseek-r1free/
- 💰 专业版:享受完整功能与更高性能
> 链接:https://rifx.online/models/deepseek-deepseek-r1/
-
🔄 统一API接口:轻松集成到现有系统
-
📊 实时用量监控:清晰掌握AI资源消耗
🎁 特别优惠: 平台当前提供多个限时折扣模型(https://rifx.online/),包括OpenAI o1系列40%优惠和GPT-4o mini半价体验,是成本敏感型开发的理想选择。
理解像 Retrieval Chain 和 Conversation Retrieval Chain 这样的概念对于使用 LangChain 至关重要。
只要理解这两个链的原理,您不仅可以了解基于语言模型的客户服务聊天机器人的操作原理,还可以使我们能够实现类似的应用。
然而,LangChain 不仅仅是这些。创建与语言模型相关的应用程序还需要学习许多功能和技巧。
访问200+LLM聚合平台:https://rifx.online
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
更多推荐
所有评论(0)