LangChain入门指南:调用DeepSeek api

news2025/4/18 10:16:24

文章目录

    • 1. 什么是LangChain?
    • 2. 核心组件
    • 3. 为什么选择LangChain?
    • 4. 实战案例
      • 安装
      • 简单chat案例
      • 流式交互
      • Prompt模板
    • 5. 简单总结

1. 什么是LangChain?

  • 定义:LangChain是一个用于构建大语言模型(LLM)应用的开发框架,支持链式调用、记忆管理、工具集成等。
  • 核心功能:
    • 连接LLM(如GPT-4、DeepSeek)与外部数据/工具
    • 构建多步骤任务的工作流(如问答、摘要、数据分析)
    • 支持对话记忆和上下文管理

2. 核心组件

  • Models(模型),LangChain支持几乎所有的主流LLM
  • Prompts(提示词),动态生成提示模板
  • Chains(任务链),多步骤任务串联
  • Memory(记忆),管理对话历史,甚至支持没有记忆能力的LLM
  • Agents(智能代理),能自动选择工具执行相应的任务

3. 为什么选择LangChain?

场景传统方法痛点LangChain解决方案
多工具调用需手动拼接API通过Agent自动选择工具
长文本处理上下文丢失分块+摘要链式处理
对话系统状态管理复杂内置Memory组件

4. 实战案例

安装

pip install langchain
pip install -U langchain-deepseek

简单chat案例

from langchain.chat_models import init_chat_model
from langchain_core.messages import SystemMessage, HumanMessage
from langchain_core.prompts import ChatPromptTemplate

# 这里只是示意,工程中建议使用getpass.getpass()来获取API密钥
api_key = "your DeepSeek API key"
api_base = "https://api.deepseek.com/"

def simpleDemo():
    """
    简单的Langchain使用示例
    """

    model = init_chat_model(
        model="deepseek-chat",
        api_key=api_key,
        api_base=api_base,
        temperature=0.8,
        max_tokens=1024,
        model_provider="deepseek",
    )

    messages = [
        SystemMessage("Translate the following English text to Chinese"),
        HumanMessage("Hello, how are you?")
    ]

    response = model.invoke(messages)
    print(response)

if __name__ == "__main__":
    simpleDemo()

流式交互

你在使用各种LLM的时,看见LLM一个字一个字往外蹦字,是不是都惊呆了!别急,用LangChain十分容易的实现这种功能

def streamDemo():
    """
    流式输出的Langchain使用示例
    """
    model = init_chat_model(
        model="deepseek-chat",
        api_key=api_key,
        api_base=api_base,
        temperature=0.8,
        max_tokens=1024,
        model_provider="deepseek",
    )

    messages = [
        SystemMessage("Translate the following English text to Chinese"),
        HumanMessage("Hello, how are you?")
    ]

    for token in model.stream(messages):
        print(token.content, end="", flush=True)
    print("\n\n")

if __name__ == "__main__":
    streamDemo()

是不是代码非常简单!赶快换上你的API key体验一下吧!

Prompt模板

def promptTemplateDemo():
    """
    使用PromptTemplate的Langchain使用示例
    """
    model = init_chat_model(
        model="deepseek-chat",
        api_key=api_key,
        api_base=api_base,
        temperature=0.8,
        max_tokens=1024,
        model_provider="deepseek",
    )

    prompt = ChatPromptTemplate.from_messages([
        SystemMessage("Translate the following English text to {language}"),
        HumanMessage("{text}")
    ])

    messages = prompt.invoke({"language": "Chinese", "text":"Hello, how are you?"})
    response = model.invoke(messages)
    print(response)

if __name__ == "__main__":
    promptTemplateDemo()

5. 简单总结

LangChain大幅降低了LLM应用开发门槛,确实是相当简单易用。并且为我们快速替换LLM提供了非常便利的基础。

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

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

相关文章

WES与WGS数据线粒体DNA数据分析及检测工具

1. 线粒体DNA的异质性 传统的全外显子组测序(WES)和全基因组测序(WGS)的二代测序(SGS) 数据分析流程,能够识别多种类型的基因改变。但大多数用于基因变异分析和注释的工具,在输出文…

word表格间隔设置

1.怎么解决word表格间隔达不到我们想要的要求 其实很简单, 我们直接在word表格里面, 全选表格中里面的内容。接着,我们选择自动调整---->根据内容自动调整表格,即可达到我们想要的要求

SpringBoot 接口限流Lua脚本接合Redis 服务熔断 自定义注解 接口保护

介绍 Spring Boot 接口限流是防止接口被频繁请求而导致服务器负载过重或服务崩溃的一种策略。通过限流,我们可以控制单位时间内允许的请求次数,确保系统的稳定性。限流可以帮助防止恶意请求、保护系统资源,并优化 API 的可用性,避…

I/O进程4

day4 九、信号灯集 1.概念 信号灯(semaphore),也叫信号量。它是不同进程间或一个给定进程内部不同线程间同步的机制;System V的信号灯是一个或者多个信号灯的一个集合。其中的每一个都是单独的计数信号灯。 通过信号灯集实现共享内存的同步操作。 2.编程…

【语法】C++的list

目录 为什么会有list? 迭代器失效: list和vector的迭代器不同的地方: list的大部分用法和vector都很像,例如push_back,构造,析构,赋值重载这些就不再废话了,本篇主要讲的是和vecto…

【Ai/Agent】Windows11中安装CrewAI过程中的错误解决记录

CrewAi是什么,可以看之下之前写的 《初识CrewAI多智能代理团队协框架》 (注:这篇是基于linux系统下安装实践的) 基于以下记录解决问题后,可以再回到之前的文章继续进行CrewAI的安装 遇到问题 在windows系统中安装 CrewAi 不管是使用 pip 或者…

OSPF的数据报文格式【复习篇】

OSPF协议是跨层封装的协议(跨四层封装),直接将应用层的数据封装在网络层协议之后,IP协议包中协议号字段对应的数值为89 OSPF的头部信息: 所有的数据共有的信息字段 字段名描述版本当前OSPF进程使用的版本(…

【力扣刷题实战】Z字形变换

大家好,我是小卡皮巴拉 文章目录 目录 力扣题目:Z字形变换 题目描述 解题思路 问题理解 算法选择 具体思路 解题要点 完整代码(C) 兄弟们共勉 !!! 每篇前言 博客主页:小卡…

力扣题解:142. 环形链表 II

在链表学习中,我们已经了解了单链表和双链表,两者的最后一个结点都会指向NULL;今天我们介绍的循环列表则不同,其末尾结点指向的这是链表中的一个结点。 循环链表是一种特殊类型的链表,其尾节点的指针指向头节点&#…

latex模板文件

LaTeX 是一款广泛应用于学术领域的​​文档排版系统​​,尤其以其在数学公式、科学符号和复杂技术文档排版中的强大能力著称。虽然它本身并非专门的“数学软件”,但在处理数学相关内容时表现尤为出色。 1. LaTeX 的核心特点​ 数学公式支持​​&#xff…

BLE 协议栈事件驱动机制详解

在 BlueNRG-LP 等 BLE 系统中,事件驱动是控制状态转移、数据交互和外设协作的基础。本文将深入讲解 BLE 协议栈中事件的来源、分发流程、处理结构与实际工程实践策略,帮助你构建稳定、可维护的 BLE 系统。 📦 一、BLE 事件的来源分类 BLE 协议栈中的事件严格来自协议栈本身…

Rust 之四 运算符、标量、元组、数组、字符串、结构体、枚举

概述 Rust 的基本语法对于从事底层 C/C 开发的人来说多少有些难以理解,虽然官方有详细的文档来介绍,不过内容是相当的多,看起来也费劲。本文通过将每个知识点简化为 一个 DEMO 每种特性各用一句话描述的形式来简化学习过程,提高学…

fuse-python使用fuse来挂载fs

winfsp 安装winfsp,https://winfsp.dev/ fusepy python安装fusepy #!/usr/bin/env python3 import os import stat from fuse import FUSE, FuseOSError, Operationsclass Passthrough(Operations):def __init__(self, root):self.root root# 辅助函数:将挂载点…

基于ueditor编辑器的功能开发之增加自定义一键排版功能

用户有自己的文章格式,要求复制或者粘贴进来的文章能够一键排版,不需要手动调试 这个需求的话咱们就需要自己去注册一个事件啦,这里我没有修改源码,而是在编辑器初始化之后给他注册了一个事件 我的工具列表变量 vue组件中data中…

VS Code Markdown渲染配置

VS code markdown preview enhanced插件渲染配置 mac: commandshiftP命令输入Markdown Preview Enhanced: Customize CSS,并点击在打开的style.less配置文件添加一下配置 /* Please visit the URL below for more information: */ /* https://shd101wyy.github.…

数据结构篇:线性表的另一表达—链表之单链表(上篇)

目录 1.链表的引入 1.1 链表的概念 1.2 next的意义 2.链表的分类 3.单链表的实现 3.1 单链表实现接口 3.1.1 插入节点函数封装 3.1.2 尾插 3.1.3 头插 3.1.4 报错的根本问题 3.1.5 头删 3.1.6 尾删 4.小结 1.链表的引入 根据顺序表的一些缺陷…

SpringBoot企业级开发之【用户模块-获取用户详细信息】

接口文档的要求: 了解一下token令牌头是怎么用的 我们直接放到前端交互的controller类下,在声明的方法中加入参数为String token且加入注解RequestHeader(name"Authorization【你自己设定的token】") 设计思路: 实战开发: control…

Mockito如何对静态方法进行测试

在 Mockito 中,直接对静态方法进行模拟是困难的,因为 Mockito 的设计理念是优先通过依赖注入(DI)管理对象,而静态方法破坏了这种设计(难以解耦)。不过,从 Mockito 3.4.0 版本开始,通过 mockStatic 方法支持了对静态方法的模拟(需配合 mockito-inline 依赖)。 从 Mo…

Navicat 17 for Mac 数据库管理

Navicat 17 for Mac 数据库管理 一、介绍 Navicat Premium 17 for Mac是一款专业的数据库管理工具,适用于开发人员、数据库管理员和分析师等用户。它提供了强大的数据管理功能和丰富的工具,使用户能够轻松地管理和维护数据库,提高数据处理效…

grok 驱动级键盘按键记录器分析

grok是一个驱动模块,其主要功能就行进行键盘按键及剪切板数据的记录,也就是一个键盘记录器。实现原理是通过对shadow-ssdt的相关函数进行hook,和r3对GetUserMessage进行hook的原理差不多。 关键部分如下: 查找csrss.exe进程是否已经启动&…