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

LangChain的核心组件之Models使用手册

目录

目标

版本

官方文档

概述

实战

LangChain调用OpenAI平台提供的在线LLM

LangChain调用本地Ollama LLM

以字符串作为输入

以消息列表作为输入

流式输出

批量处理


目标

  • 了解LangChain的基本信息,并且理解Retrieval Augmented Generation(RAG)的核心思想。
  • 使用Python语言集成LangChain,并通过案例来学习它的核心组件Models。本文虽然讲的是Models模块,但是并不涉及Agent对Models的集成使用(在后续的文章中再重点讲述),只将独立使用案例。

版本


官方文档

LangChain Docshttps://docs.langchain.com/oss/python/langchain/installOllamahttps://ollama.com/

OpenAI平台https://platform.openai.com/api-keys


概述

RAG是什么?

        RAG由Retrieval(检索)、Augmented(增强)、Generation(生成)这三个单词的首字母组合而成。它是一个可以动态访问外部知识、并将用户的prompt与之结合增强生成新的prompt,然后将prompt输入LLM生成最终回答的设计思想。它的本质逻辑往往抽象为四个方面:

  1. 数据准备(把数据向量化)
  2. 检索(根据用户问题从向量库中找到最相关的内容)
  3. 增强(将检索到的内容与用户问题融合形成新的 prompt)
  4. 生成(把增强后的prompt输入LLM生成最终回答)

        特别注意:RAG是一种设计思想或系统架构,而不是具体的框架或组件。不同的框架对RAG的实现侧重可能不一样(比如:LlamaIndex侧重RAG的数据结构化实现,LangChain侧重RAG的模块化流程。),所以单纯地问RAG是什么问的可能是RAG的概念,而问某个具体框架中的RAG是什么问的是该框架对于RAG的实现与侧重方向。

LangChain是什么?

在LangChain v1.0的官方文档中是这样描述的:

LangChain is the easiest way to start building agents and applications powered by LLMs. With under 10 lines of code, you can connect to OpenAI, Anthropic, Google, and more. LangChain provides a pre-built agent architecture and model integrations to help you get started quickly and seamlessly incorporate LLMs into your agents and applications.

意思是:LangChain是一个方便整合智能体、集成各个模块的框架。类比来看:LangChain之于各大语言模型,正如JDBC之于各大数据库

LangChain的核心组件有哪些?

        分别是:Agents、Models、Messages、Tools、Short-term memory、Streaming、Middleware、Structured output。

Models是什么?

        Models不是指某个具体的模型(比如:GPT-4、文心一言、通义千问、本地Ollama等),而是指一个组件层(这一点在官网的API目录中也能看出来)。它的作用是为这些不同厂商或本地模型提供统一的使用接口和功能封装

Models的使用方式有几种?

        两种,附上官网的两段描述及总结如下:

Models are the reasoning engine of agents. They drive the agent’s decision-making process, determining which tools to call, how to interpret results, and when to provide a final answer.

Basic usage

Models can be utilized in two ways:
  1. With agents - Models can be dynamically specified when creating an agent.
  2. Standalone - Models can be called directly (outside of the agent loop) for tasks like text generation, classification, or extraction without the need for an agent framework.

The same model interface works in both contexts, which gives you the flexibility to start simple and scale up to more complex agent-based workflows as needed.

使用方式概念特点使用场景
与Agent结合使用Models是Agent的推理引擎。Models驱动Agent的决策过程,决定调用哪些工具、如何解释结果以及何时给出最终答案。复杂、动态、可扩展工具调用、多步骤推理
独立使用Models独立运行,直接输入输出。简单、直接、轻量生成、分类、提取等任务

LangChain对语言模型的分类

        两种,附上官网的描述及总结如下:

Language models.

LangChain has two main classes to work with language models: chat models and "old-fashioned" LLMs.

Chat models

Language models that use a sequence of messages as inputs and return chat messages as outputs (as opposed to using plain text).

Chat models support the assignment of distinct roles to conversation messages, helping to distinguish messages from the AI, users, and instructions such as system messages.

The key abstraction for chat models is BaseChatModel. Implementations should inherit from this class.

See existing chat model integrations.

LLMs

Language models that takes a string as input and returns a string. These are traditionally older models (newer models generally are chat models).

Although the underlying models are string in, string out, the LangChain wrappers also allow these models to take messages as input. This gives them the same interface as chat models. When messages are passed in as input, they will be formatted into a string under the hood before being passed to the underlying model.

        总结起来,LangChain对语言模型的理解如下:

分类Chat models(对话模型)LLMs(传统模型、也叫非对话模型)
定义返回消息作为输出的语言模型。以字符串作为输入并返回字符串的语言模型。
输入可以是字符串,也可以是消息列表字符串
输出消息,通常是langchain_core.messages.ai.AIMessage字符串
使用场景对话、问答、聊天机器人文本生成、摘要、翻译、提问回答、代码生成等。
备注官方的描述中加了“输入的是消息”作为定义条件之一,实际上是不准确的。LangChain封装器也允许这些模型接受消息作为输入。这使得它们拥有与聊天模型相同的接口。

实战

LangChain调用OpenAI平台提供的在线LLM

第一步:去OpenAI平台申请秘钥。

第二步:把申请号的秘钥配置到环境变量中,推荐大家使用配置文件的方式(把秘钥配置在.env中)。

OPENAI_API_KEY=密钥
OPENAI_BASE_URL=https://api.openai.com/v1

第三步:使用LangChain集成在线的OpenAI LLM。

import dotenv
from langchain_openai import ChatOpenAI
import os#从.env文件加载环境变量到程序的运行环境中。
dotenv.load_dotenv()os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY')
os.environ['OPENAI_BASE_URL'] = os.getenv('OPENAI_BASE_URL')#创建大模型实例
llm = ChatOpenAI(model="gpt-4o-mini")#调用大模型
response = llm.invoke("说一下荒野求生中必备的技能")
print(type(response))
print(response)

LangChain调用本地Ollama LLM

第一步:在.env中配置好模型名称。

OLLAMA_MODEL="qwen3-vl:2b"

第二步:使用LangChain集成本地Ollama LLM。

import os
from dotenv import load_dotenv
from langchain_community.llms import Ollama# 加载本地配置
load_dotenv()
model_name = os.getenv("OLLAMA_MODEL")# 创建 Ollama LLM 实例
llm = Ollama(model=model_name,
)# 调用 LLM
prompt = "说一下荒野求生中必备的技能"
response = llm.invoke(prompt)# 输出结果
print(response)


以字符串作为输入

对话模型

import dotenv
from langchain_openai import ChatOpenAI, OpenAI
import os#从.env文件加载环境变量到程序的运行环境中。
dotenv.load_dotenv()os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY')
os.environ['OPENAI_BASE_URL'] = os.getenv('OPENAI_BASE_URL')#创建大模型实例
llm = ChatOpenAI(model="gpt-4o-mini")#调用大模型
response = llm.invoke("说一下荒野求生中必备的技能")
print(type(response))
print(response)

非对话模型

import dotenv
from langchain_openai import ChatOpenAI, OpenAI
import os#从.env文件加载环境变量到程序的运行环境中。
dotenv.load_dotenv()os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY')
os.environ['OPENAI_BASE_URL'] = os.getenv('OPENAI_BASE_URL')#创建大模型实例
llm = OpenAI(model="gpt-4o-mini")#调用大模型
response = llm.invoke("说一下荒野求生中必备的技能")
print(type(response))
print(response)

以消息列表作为输入

        这里只以常见的三种消息类型(AIMessage、HumanMessage、SystemMessage)作为输入。

import dotenv
from langchain_core.messages import AIMessage, SystemMessage, HumanMessage
from langchain_openai import ChatOpenAI, OpenAI
import os#从.env文件加载环境变量到程序的运行环境中。
dotenv.load_dotenv()os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY')
os.environ['OPENAI_BASE_URL'] = os.getenv('OPENAI_BASE_URL')#创建大模型实例
llm = ChatOpenAI(model="gpt-4o-mini")#创建大模型实例
# Create an AI message manually (e.g., for conversation history)
ai_msg = AIMessage("你是一名荒野求生专家。")# Add to conversation history
messages = [SystemMessage("我很乐意教你一些野外求生的知识。"),HumanMessage("你能教我野外求生的知识吗?"),ai_msg,HumanMessage("怎么生火?")
]#调用大模型
response = llm.invoke(messages)
print(type(response))
print(response)

流式输出

        大语言模型生成文本时,不是一次性返回整段文本,逐字(或逐句)输出。官方文档这里有详细的解释和案例:

https://docs.langchain.com/oss/python/langchain/models#streamhttp://Stream

import dotenv
from langchain_core.messages import HumanMessage
from langchain_openai import ChatOpenAI, OpenAI
import os#从.env文件加载环境变量到程序的运行环境中。
dotenv.load_dotenv()os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY')
os.environ['OPENAI_BASE_URL'] = os.getenv('OPENAI_BASE_URL')#创建大模型实例,开启流式输出。
llm = ChatOpenAI(model="gpt-4o-mini",streaming=True)message=[HumanMessage(content="请告诉我荒野求生的各种技能。")]#调用大模型
for chunk in llm.stream(message):print(chunk.content,end="",flush=True)

批量处理

        把一组彼此独立的请求一起发送给模型,可以显著提升性能、降低成本,因为它们会被并行处理。摘自官方文档:

Batching a collection of independent requests to a model can significantly improve performance and reduce costs, as the processing can be done in parallel.

案例一

import dotenv
from langchain_openai import ChatOpenAI, OpenAI
import os#从.env文件加载环境变量到程序的运行环境中。
dotenv.load_dotenv()os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY')
os.environ['OPENAI_BASE_URL'] = os.getenv('OPENAI_BASE_URL')#创建大模型实例
llm = ChatOpenAI(model="gpt-4o-mini")responses = llm.batch(["1+1=?","2+2=?","3+3=?"
])
for response in responses:print(response.content)

案例二

import dotenv
from langchain_core.messages import SystemMessage, HumanMessage
from langchain_openai import ChatOpenAI, OpenAI
import os#从.env文件加载环境变量到程序的运行环境中。
dotenv.load_dotenv()os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY')
os.environ['OPENAI_BASE_URL'] = os.getenv('OPENAI_BASE_URL')#创建大模型实例
llm = ChatOpenAI(model="gpt-4o-mini")message1=[SystemMessage(content="你是数学家。"),HumanMessage(content="告诉我1+1等于几。")]
message2=[SystemMessage(content="你是荒野求生专家。"),HumanMessage(content="告诉我钻木取火的步骤。")]
message3=[SystemMessage(content="你是英语老师。"),HumanMessage(content="告诉我AI是什么意思。")]message=[message1,message2,message3]
responses=llm.batch(message)for response in responses:print(response.content)
http://www.dtcms.com/a/579126.html

相关文章:

  • zencart网站搬家plm项目管理系统
  • 缔客网络上海响应式网站建设建网站 行业 销售额
  • 做盗市相关网站如何在线上推广产品
  • iMX6ULL使用GUI Guider开发LVGL
  • 新乡移动网站建设制作视频特效
  • 丹阳市住房建设管理局网站wordpress怎么挂广告
  • 已经有域名 怎么做网站关键词首页优化
  • 无锡网站建设公司排名高端网站建设哪家公司好
  • 做网站的图片尺寸怎么设定dede wap网站
  • 龙虎榜——20251106
  • 深圳市做网站建设平台设计是做什么的
  • 想要个免费网站设计网站推荐html代码
  • 怎样免费个人网站建设目前做的最好的电子烟网站
  • 江苏国家住房和城乡建设部网站开发高端市场应该注意
  • 在哪里做网站设计一个网站的建设要经过哪几个阶段
  • 广州冼村地铁站几号线夏天做哪些网站致富
  • 网站流量太大百度搜索不到网站
  • 机器视觉---UVC相机驱动
  • 杭州 网站定制wordpress用别人主题
  • 网站开发 word文件预览下厨房网站学做蒸包视频
  • 淘宝可以到哪些网站做推广哪些网站是用asp.net开发的
  • 安装了wps/卸载wps后office文件打开异常处理
  • 哪家公司设计网站好上海可以做网站的公司
  • BOQ 交付标准清单模板
  • 增城企业网站建设绵阳网站建设软件有哪些
  • 东莞哪里有网站建设厂家头条热点新闻
  • PostIn零基础学习 - 如何通过接口场景测试来验证业务场景的正确性
  • 数电基础:触发器
  • rt-thread信号量与互斥量
  • 网站如何做404页面自学摄影教程的网站有哪些