当前位置: 首页 > news >正文

LangChain--(1)

LangChain

1 基本概念

1.1 langchain是什么

langchain是一个用于开发由大型语言模型 (LLMs) 驱动的应用程序的框架,方便用户快速构建本地应用。

在这里插入图片描述

如图为langchain开发生态,其主要由以下部分组成:

  • langchain-core: 基础抽象和LangChain表达式 (LCEL)。
  • langchain-community: 第三方集成。
  • 合作伙伴库(例如 langchain-openailangchain-anthropic 等):一些集成已进一步拆分为自己的轻量级库,仅依赖于 langchain-core
  • langchain: 组成应用程序认知架构的链、代理和检索策略。
  • LangGraph: 通过将步骤建模为图中的边和节点,构建强大且有状态的多参与者应用程序。与LangChain无缝集成,但也可以单独使用。
  • LangServe: 将LangChain链部署为REST API。
  • LangSmith: 一个开发者平台,让您调试、测试、评估和监控LLM应用程序。

1.2 langchain的开发环境

langchain 的核心是 langchain-core 和 langchain,如果用到一些社区功能,还要加上 langchain-community,搭建 Agent 用的是 langgraph,监控使用的是langsmith。

pip install langchain-core langchain langchain-community langgraph langsmith

2 基础知识

2.1 LLM的加载

langchain支持多种不同平台LLM的API调用,模型皆为会话模型,命名都以前缀且Chat-开始。支持模型详见:Chat models | ️ LangChain

2.1.1 显示加载

安装官方所支持的对应依赖包(如:langchain-openai,langchain-deepseek,langchain-qwq),提供显式的调用。具体如下:

from langchain_deepseek import ChatDeepSeek
# api-key已配置为环境变量,提供后默认的base_url
llm = ChatDeepSeek(model="deepseek-chat")
from langchain_qwq.chat_models import ChatQwen
# 此处我提供的api-key是阿里百炼平台,与源码的base_url不同,所以我进行了重新赋值
llm = ChatQwen(model="qwen-plus", base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")

支持openAI接口的都可以使用ChatOpenAI调用。

2.1.2 统一加载

langchain核心也提供了统一的加载方式,进行动态加载。

from langchain.chat_models import init_chat_model
llm = init_chat_model(model_provider="deepseek", model="deepseek-chat")# qwen的加载使用openai的接口,需提供新的访问地址base_url,否则默认为openai访问地址,model_provider不支持qwq,但百炼平台支持openai接口
llm = init_chat_model(model_provider='openai', model='qwen-plus', base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")

v0.3版本支持的model_provider如下所示:

在这里插入图片描述

2.1.3 加载方式对比

对比维度方式1方式2
依赖来源langchain_{deepseek} 包langchain 核心模块 + langchain_{对应}包
扩展性仅支持 DeepSeek支持多厂商(如 OpenAI、Anthropic)
配置灵活性参数硬编码,仅使用 DeepSeek,无法切换模型参数可通过 model_provider 动态传递,支持加载配置字典切换模型
代码简洁性需要显式导入类,代码直观,依赖简单。一行代码完成初始化,代码可维护性强,符合 LangChain 最佳实践
错误处理需手动实现内置异常处理
默认参数需手动指定厂商级默认配置

2.2 流式输出

2.2.1 invoke 与 stream 的区别

invoke(同步调用)

**行为:**一次性等待模型生成完整响应后返回结果。

**特点:**阻塞式调用,需等待全部结果生成后才能处理。适用于非实时场景(如批量处理、离线任务)。

示例如下:

  response = llm.invoke("请解释相对论")  # 等待整个回答生成后返回print(response)  # 一次性输出完整回答

stream(流式调用)

**行为:**逐步迭代模型生成的响应块(chunk),按需处理。

**特点:**非阻塞式调用,实时获取部分结果。适用于实时交互场景(如聊天机器人逐字输出、进度条)。

示例如下:

stream = llm.stream("请解释相对论")
for chunk in stream:  # 逐步接收生成的内容print(chunk, end="", flush=True)  # 逐字/逐句显示输出 end="":除"\n"外不换行   flush=True:不进行缓存,强制输出

2.3 提示词模板

langchain支持使用提示词模板来完成大模型的交互

llm = ChatQwen(model="qwen-plus", base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")from langchain_core.prompts import ChatPromptTemplate
# 提示词模板,支持模板填空
prompt_template = ChatPromptTemplate.from_messages([("system", "You are a helpful assistant that translates {input_language} to {output_language}."),("human", "{text}"),
])
# 模板的invoke用来填空
prompt = prompt_template.invoke({"input_language": "English", "output_language": "Chinese", "text": "I love programming."})
# 模板输入llm
reponse = llm.invoke(prompt)
print(reponse.content)
---------------------------------
我热爱编程。

2.4 定制参数

Langchain支持传入更多的定制参数,如temperate,top_k等。

llm = ChatQwen(model="qwen3-32b",temperature=0,              # 控制生成文本的随机性,范围[0,2)之间的参数,越大越随机max_tokens=None,            # 限制模型单次生成的最大 token 数量timeout=None,               # 设置单次 API 请求的超时时间(单位:秒)max_retries=2,              # 设置失败请求的自动重试次数。enable_thinking=True,       # 启用模型的深度思考模式(推理优化)thinking_budget=100,        # 设置深度思考模式下的预算(单位:token 或计算量)值越大,模型分配的推理资源越多,复杂任务成功率更高。# api_key="...",# other params...)

相关文章:

  • 如何将一个url地址打包成一个windows桌面版本的应用程序
  • 质因数分解_java
  • Redis哨兵机制
  • 基于SpringAI实现专家系统
  • echarts中给饼图加圆点
  • 关于深度学习网络中的归一化BN
  • 【Java面试笔记:实战】41、Java面试核心考点!AQS原理及应用生态全解析
  • 【亲测有效】MybatisPlus中MetaObjectHandler自动填充字段失效
  • 【cv学习笔记】YOLO系列笔记
  • 树莓派5 ubuntu 24.04 docker配置镜像Docker pull时报错:https://registry-1.docker.io/v2/
  • 海外广告投放|FB IG 速推帖子有效吗?
  • 测试过程中有哪些风险?
  • 3.4_1 流量控制、可靠传输与滑动窗口机制
  • 【Spring AI 1.0.0】Spring AI 1.0.0框架快速入门(2)——提示词
  • 简述Python里面search和match的区别
  • 【富士康租赁德克萨斯州工厂以扩大AI服务器产能】
  • Java并发编程实战 Day 20:响应式编程与并发
  • Windows 下安装 NVM
  • Mitsubishi GX Works3 / GOT3 的惡意工程混淆邏輯注入攻擊
  • Kratos 与Golang Cms的关系
  • 电商网站开发公司哪家好/站内营销推广方案
  • 公司网站怎么突然多了好多友情链接如何删除/六年级上册数学优化设计答案
  • 服务器做php网站/seo网站建设公司
  • 企业网站的建设包括哪些/seo资讯
  • 静态网站如何建设/百度收录平台
  • 做鞋子批发网站/aso平台