LangChain + DeepSeek 详解

LangChain

最近看了很多的 Agent 项目, 如果想要自己开发发现还是 Langchain 框架最适合我这样的小白。记录一下今天跑的一个 Demo

基础介绍

LangChain 旨在简化 AI 应用开发,通过标准化接口将 LLM 与外部系统(数据源、工具、向量数据库等)无缝连接,帮助开发者构建可扩展、模块化的智能应用。
主要功能如下

  • Prompt templates:Prompt templates 是不同类型提示的模板。例如“ chatbot ”样式模板、ELI5 问答等
  • LLMs:像 GPT-3、BLOOM 等大型语言模型
  • Agents:Agents 使用 LLMs 决定应采取的操作。可以使用诸如网络搜索或计算器之类的工具,并将所有工具包装成一个逻辑循环的操作。
  • Memory:短期记忆、长期记忆。

生态系统

  • LangSmith:用于监控、调试和评估 LLM 应用性能(如跟踪 Agent 轨迹)。

  • LangGraph:构建长期记忆和复杂状态控制的 Agent 工作流(被 LinkedIn、Uber 等企业采用)。

  • LangGraph Platform:可视化部署和扩展 Agent 的云平台。

在这里插入图片描述

快速开始

安装 LangChain 只有官方只支持Python 和 js 两个版本,我用的是Python 版本。

安装依赖

安装调用基础的依赖

	pip install -U langchain  # 安装最新版
	pip install -U langchain-core langchain-community langchain-openai # 安装核心库
	pip install python-dotenv

使用新版 LangChain 语法(兼容 DeepSeek)


from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI  # 虽然叫 OpenAI,但可兼容 DeepSeek
from langchain.memory import ConversationBufferMemory
from langchain_core.vectorstores import InMemoryVectorStore
from langchain_openai import OpenAIEmbeddings

# 初始化DeepSeek LLM

# # 创建提示模板
# prompt = PromptTemplate(
#     input_variables=["product"],
#     template="为{product}写一个创意广告文案:",
# )

# 注意:这里使用 ChatOpenAI 但指向 DeepSeek 的 API
llm = ChatOpenAI(
    api_key="sk-xxxxxx",
    base_url="https://api.deepseek.com/v1",  # 注意 /v1 路径
    model="deepseek-chat"
)

# 新版链式调用
prompt = ChatPromptTemplate.from_template("{input}")
chain = prompt | llm  # 使用管道操作符替代旧版 LLMChain

# 调用流式返回
for chunk in chain.stream({"input": "AI编程助手"}):
    print(chunk.content, end="", flush=True)

下面是整体的流程简介

from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from langchain.memory import ConversationBufferMemory
from langchain_core.vectorstores import InMemoryVectorStore
from langchain_openai import OpenAIEmbeddings

这段导入语句展示了 LangChain 的模块化架构设计:

  • langchain_core:包含框架基础类和接口
  • langchain_openai:提供与 OpenAI 兼容的接口(可适配 DeepSeek)
  • langchain:集成高级功能如内存管理

版本提示:建议使用 langchain-core ≥0.1.0 和 langchain-openai ≥0.0.5

2. 向量数据库配置

2.1 嵌入模型初始化

embeddings = OpenAIEmbeddings(model="text-embedding-3-large")

关键参数解析:

  • model="text-embedding-3-large":指定嵌入模型版本
    • 虽然使用 OpenAIEmbeddings 类,但可通过 base_url 重定向到 DeepSeek
    • 实际部署时应替换为 DeepSeek 的嵌入模型(如可用)

技术原理:

  • 将文本转换为 3072 维向量(text-embedding-3-large 的默认维度)
  • 支持余弦相似度等向量运算

2.2 内存向量数据库

vector_store = InMemoryVectorStore(embeddings)

特性说明:

  • InMemoryVectorStore:轻量级内存向量数据库
    • 优点:零配置、快速原型开发
    • 缺点:重启后数据丢失,不适合生产环境
  • 生产替代方案:
    from langchain_community.vectorstores import Chroma
    vector_store = Chroma.from_documents(docs, embeddings)
    

3. 大语言模型集成

3.1 DeepSeek 适配配置

llm = ChatOpenAI(
    api_key="sk-xxxxx",
    base_url="https://api.deepseek.com/v1",
    model="deepseek-chat"
)

关键配置项:

参数说明注意事项
api_keyDeepSeek API 密钥应从环境变量读取,避免硬编码
base_urlAPI 端点必须包含 /v1 路径
model模型标识deepseek-chat 为对话优化版本

安全建议:

import os
llm = ChatOpenAI(
    api_key=os.getenv("DEEPSEEK_API_KEY"),
    base_url="https://api.deepseek.com/v1"
)

4. 对话链构建

4.1 提示词模板

prompt = ChatPromptTemplate.from_template("{input}")

模板系统进阶用法:

from langchain_core.prompts import (
    SystemMessagePromptTemplate,
    HumanMessagePromptTemplate
)

prompt = ChatPromptTemplate.from_messages([
    SystemMessagePromptTemplate.from_template("你是一个{role}"),
    HumanMessagePromptTemplate.from_template("{input}")
])

4.2 链式组合

chain = prompt | llm

管道操作符 (|) 的等效实现:

from langchain_core.runnables import RunnableSequence
chain = RunnableSequence(first=prompt, last=llm)

扩展链示例(带记忆):

from langchain_core.runnables import RunnablePassthrough

memory = ConversationBufferMemory()
chain = (
    RunnablePassthrough.assign(
        history=memory.load_memory_variables
    ) 
    | prompt 
    | llm
)

5. 流式输出处理

5.1 流式调用

for chunk in chain.stream({"input": "AI编程助手"}):
    print(chunk.content, end="", flush=True)

技术细节:

  • chunk 对象结构:
    class AIMessageChunk:
        content: str
        additional_kwargs: dict
    
  • 网络优化:使用 Server-Sent Events (SSE) 协议
  • 延迟对比:流式 vs 非流式
    模式首字节时间适用场景
    流式200-500ms实时交互
    批处理1-2s数据分析

6. 生产环境建议

6.1 性能优化

llm = ChatOpenAI(
    ...,
    max_retries=3,
    timeout=30.0,
    streaming=True
)

6.2 监控集成

from langsmith import Client

client = Client()
client.create_feedback(
    run_id="...",
    key="accuracy",
    score=0.9
)

6.3 错误处理

from tenacity import (
    retry,
    stop_after_attempt,
    wait_exponential
)

@retry(
    stop=stop_after_attempt(3),
    wait=wait_exponential(multiplier=1, min=4, max=10)
)
def safe_invoke(input_text):
    return chain.invoke({"input": input_text})

7. 架构演进路线

单次调用
带记忆的对话
检索增强生成
多Agent协作
业务工作流集成

通过上面内容完成了基础的Python调用介绍

添加链接描述
80 个开源项目合集
100 个副业赚钱合集

黑河是我国西北干旱区最重要的内陆河流之一,灌区分布及水利工程体系直接关系到流域农业发展、水资源配置与生态安全。 本资源包含黑河流域范围内的灌区空间分布矢量数据(Shapefile格式)与干支渠分布栅格图(TIF格式),可广泛应用于农业水资源管理、流域水文模拟、灌溉工程布局分析及生态水文研究等领域。 【数据内容】 灌区分布数据(Shapefile) 数据类型:矢量多边形(Polygon) 坐标系统:WGS 84 或 CGCS2000(具体可查看 .prj 文件)。 干支渠分布图(GeoTIFF) 数据类型:栅格图像(TIF) 分辨率:通常为10–30米,满足中尺度制图与分析; 图像内容:表示黑河流域干渠与支渠的空间路径分布,可作为水利网络基础图层; 内容描述:标识黑河流域主要灌区边界,包括各县(如张掖、高台、临泽、肃南等)所辖的骨干灌区、支渠灌区分布; 属性字段:灌区名称等; 应用价值:可用于构建灌溉水流路径、流量估算、水资源调度仿真模型等。 【典型应用场景】 流域灌溉调度研究:用于构建灌区供水模型,估算引水量与灌溉效率; 遥感与地理建模:与MODIS、Sentinel遥感数据叠加进行土地覆被分类或作物监测; 农业统计分析:与统计年鉴灌溉面积核对比对,服务于灌溉政策评估; 地图制图与展示:支持ArcGIS、QGIS、Mapbox等平台加载使用,可生成专题图; 水文模型输入:可作为SWAT、MIKE SHE 等模型的空间输入因子。 【附加说明】 文件命名清晰,包含 .shp, .shx, .dbf, .prj 等标准矢量格式; TIF 文件配有 .tfw 文件及标准色带,可直接叠加到DEM、水系图等背景图上; 可适配常用 GIS 软件(ArcGIS/QGIS)及建模工具; 数据来源规范,具有较高的空间精度与现势性。
<think>好的,我现在需要回答用户关于如何使用DeepSeekLangChain构建聊天机器人的问题。首先,我需要理解用户的需求,他们可能希望了解两者的集成方法和步骤。接下来,我得回顾已有的引用内容,特别是引用[1]和引用[2],看看里面有哪些关键信息可以利用。 引用[1]提到使用DeepSeek构建智能聊天机器人的过程,包括环境准备、代码实现、优化和扩展。而引用[2]则具体说明了如何将DeepSeekLangchain结合,例如安装依赖包、设置环境变量以及使用管道符连接组件。这应该是用户需要的核心内容。 接下来,我需要将这些信息结构化,分步骤说明如何集成两者。首先,环境准备部分需要安装必要的库,如langchain-deepseeklangchain_community,还有管理环境变量的python-dotenv。然后,设置API密钥,这在.env文件中完成。接下来是代码实现的步骤,可能需要导入相关模块,加载环境变量,初始化DeepSeek的模型,并创建处理链,比如使用prompt、model、parser的管道结构。 另外,用户可能关心代码示例,所以需要提供一个简单的示例代码,展示如何将DeepSeek模型集成到LangChain的链中。同时,还需要说明可能的优化方法,比如调整温度参数、使用不同的提示模板,或者结合其他LangChain组件如记忆模块或检索器。 需要注意的是,引用中提到的chain = prompt | model | parser的结构类似于Linux管道符,这个类比可以帮助用户理解数据流动的方式。在解释过程中,要确保术语准确,比如正确使用LangChain中的概念,如LLMChain、PromptTemplate等。 此外,用户可能还希望了解实际应用场景,比如在客服系统中使用,或者结合知识库增强回答能力。这些可以作为扩展应用场景的部分,帮助用户更好地理解集成的优势。 最后,要检查是否符合用户的要求,比如使用正确的中文表达,LaTeX格式是否正确,以及生成的相关问题是否合理。确保所有引用都正确标注,比如在提到环境变量设置时引用[2],在优化部分引用[1]和[2]。 总结一下,回答的结构应该是:先概述集成方案,然后分步骤详细说明环境准备、代码实现、优化方法,最后给出应用场景和相关问题。确保每个部分都有对应的引用支持,并且语言清晰易懂。</think>以下是使用 DeepSeekLangChain 构建聊天机器人的集成方案详解: ### 一、核心集成架构 通过 LangChain 的模块化设计,可将 DeepSeek 大模型能力整合到对话流程中,典型架构为: $$prompt \rightarrow DeepSeek \rightarrow parser \rightarrow output$$ 类似 Linux 管道操作,其中 LangChain 负责流程编排[^2] ### 二、实施步骤 #### 1. 环境准备 ```bash pip install langchain-deepseek langchain_community python-dotenv ``` 需特别注意 LangChainDeepSeek API 的版本兼容性 #### 2. 密钥配置 在项目根目录创建`.env`文件: ```python DEEPSEEK_API_KEY="your_api_key_here" ``` #### 3. 基础实现代码 ```python from langchain_deepseek import DeepSeek from langchain_core.prompts import ChatPromptTemplate from langchain_community.llms import load_llm from dotenv import load_dotenv load_dotenv() # 初始化模型 model = DeepSeek(temperature=0.7) # 构建对话链 prompt = ChatPromptTemplate.from_template("你是一个AI助手,请回答:{query}") chain = prompt | model | (lambda x: x.content) # 执行对话 response = chain.invoke({"query": "解释量子计算原理"}) print(response) ``` 该实现包含完整的对话处理流程:提示词构造→模型推理→结果解析 ### 三、优化方案 1. **参数调优** 通过调整`temperature`参数(范围 0-1)控制生成结果的创造性,数学表达为: $$P(w_i|w_{<i}) = \frac{\exp(z_i/\tau)}{\sum_j \exp(z_j/\tau)}$$ 其中$\tau$即为temperature参数[^1] 2. **记忆增强** 集成 ConversationBufferMemory 实现多轮对话: ```python from langchain.memory import ConversationBufferMemory memory = ConversationBufferMemory() chain = ConversationChain(llm=model, memory=memory) ``` 3. **知识库集成** 通过 LangChain 的 RetrievalQA 结合向量数据库: ```python from langchain.chains import RetrievalQA qa_chain = RetrievalQA.from_chain_type( llm=model, retriever=vector_db.as_retriever() ) ``` ### 四、应用场景 1. 智能客服系统(处理日均 10万+咨询) 2. 教育领域的个性化辅导机器人 3. 结合 RAG 架构的专业领域知识问答
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值