LangChain快速入门

一、快速上手

1、安装OpenAI包

pip install -U langchain-openai

2、定义大模型,由于我们使用的是openAI可以兼容deepseek,我们用deepseek即可

复制代码
key = os.environ.get('DEEPSEEK_API_KEY')
model = ChatOpenAI(
    model='deepseek-v4-flash',
    base_url='https://api.deepseek.com',
    api_key=key
)

3、定义消息列表

复制代码
message = [
    HumanMessage(content='apple'),
    SystemMessage(content='帮我翻译单词'),
]

4、调用大模型

复制代码
result = model.invoke(message)
print(result)

输出结果(调试可以看⻅ result 类型为 AIMessage)

content='苹果'

additional_kwargs={'refusal': None}

response_metadata={'token_usage': {'completion_tokens': 46, 'prompt_tokens': 8, 'total_tokens': 54, 'completion_tokens_details': {'accepted_prediction_tokens': None, 'audio_tokens': None, 'reasoning_tokens': 44, 'rejected_prediction_tokens': None}, 'prompt_tokens_details': {'audio_tokens': None, 'cached_tokens': 0}, 'prompt_cache_hit_tokens': 0, 'prompt_cache_miss_tokens': 8}, 'model_provider': 'openai', 'model_name': 'deepseek-v4-flash', 'system_fingerprint': 'fp_058df29938_prod0820_fp8_kvcache_20260402', 'id': 'cfcfbb3a-25e7-475e-92e7-505c07ce9dac', 'finish_reason': 'stop', 'logprobs': None} id='lc_run--019dfd36-15e5-7b22-bbc4-3d5cdfbe47c2-0' tool_calls=[] invalid_tool_calls=[]

usage_metadata={'input_tokens': 8, 'output_tokens': 46, 'total_tokens': 54, 'input_token_details': {'cache_read': 0}, 'output_token_details': {'reasoning': 44}}
输出说明:

  • AIMessage :来自AI 的消息。从聊天模型返回,作为对提示(输⼊)的响应。
  • content :消息的内容。
  • additional_kwargs :与消息关联的其他有效负载数据。对于来⾃ AI 的消息,可能包括模 型提供程序编码的⼯具调⽤。
  • response_metadata :响应元数据。例如:响应标头、logprobs、令牌计数、模型名称。 侧重于 "响应"本⾝的信息,⽐如这次请求的 ID、使⽤的模型版本、以及服务提供商返回 的所有原始元数据。它主要⽤于调试、⽇志记录和获取请求的上下⽂信息。
  • usage_metadata :消息的使⽤元数据,例如令牌计数。 侧重于 "资源消耗"的量化信息,即这次请求消耗了多少 Token。它主要⽤于成本计算、监控和预算控制

5、输出解析

若只想输出聊天模型返回的结果字符串,可以使⽤ StrOutputParser 输出解析器组件,将⼤模型输出结果解析为最可能的字符串。核心代码

复制代码
parse = StrOutputParser()
content = parse.invoke(result)
print(content)

运行结果:

苹果

6、链式执行

我们进行完上述操作,并没有发现链式调用的过程,对于 LangChain,它给我们提供了链式执⾏的能⼒,即我们只需要定义各个"组件",将它们"链起来",⼀次性执行即可得到最终效果。

复制代码
#定义大模型
key = os.environ.get('DEEPSEEK_API_KEY')
model = ChatOpenAI(
    model='deepseek-v4-flash',
    base_url='https://api.deepseek.com',
    api_key=key
)
#定义消息
message = [
    HumanMessage(content='apple'),
    SystemMessage(content='帮我翻译单词'),
]
#定义解析工具
parse = StrOutputParser()
#定义链
chain = model | parse
#执行链
print(chain.invoke(message))

运行结果:

二、LangChain相关概念

1、Runnable 接口

Runnable 接口是使用LangChain Components(组件)的基础。

概念说明:
Components(组件):⽤来帮助当我们在构建应⽤程序时,提供了⼀系列的核⼼构建块,例如语⾔模型、输出解析器、检索器、编译的 LangGraph 图等。
Runnable 定义了⼀个标准接⼝,允许 Runnable 组件:

  • Invoked(调用): 单个输入转换为输出。
  • Batched(批处理): 多个输入被有效地转换为输出。
  • Streamed(流式传输): 输出在生成时进行流式传输。
  • Inspected(检查): 可以访问有关 Runnable 的输入、输出和配置的原理图信
  • Composed(组合): 可以组合多个 Runnable,可以使用LCEL 协同工作以创建复杂的管道。

在快速上手中,我们定义的语言模型(model)、输出解析器(StrOutputParser)都是Runnable 接口的实例!他们都使⽤了 Invoked(调用)的能力

2、LangChain Expression Language

LangChain Expression Language(LCEL):采用声明性方法,从现有 Runnable 对象构建新的 Runnable 对象。
通过 LCEL 构建出的新的 Runnable 对象,被称为 RunnableSequence ,表示可运行序列
RunnableSequence 就是⼀种 链 (参考步骤6)。通过调试 步骤6 就能发现,chain 的类型就是 RunnableSequence 。如下所示:

重要的是, RunnableSequence 也是 Runnable 接口的实例 ,它实现了完整的 Runnable 接口, 因此它可以⽤与任何其他 Runnable 相同的姿势使用。

三、聊天模型核心能力

1、定义聊天模型

大语言模型 (LLM) 在各种与语言相关的任务中表现出色。现代 LLM 通常通过聊天模型接口访问,该接口将消息列表作为输入,并返回消息作为输出,二不是使用纯文本。
这⾥需要注意 LLM 与 LangChain 中 聊天模型 的关系:

  • 在 LangChain 的官方文档中,认为 LLM 大多数是纯文本补全模型。这些纯文本模型封装的 API 接受⼀个字符串提示作为输入,并输出⼀个字符串补全结果,OpenAI 的 GPT-5 就是作为 LLM 来实现的。
  • LangChain 中的聊天模型通常由 LLM 提供⽀持,但经过专门调整以用于对话。关键在于,它们不是接受单个字符串作为输入,二是接受聊天消息列表,并返回⼀条 AI 消息作为输出。

1.1、通过 API 定义聊天模型

1.1.1、方式1:ChatOpenAI

|--------------------------|----------------------------------------------|
| 参数名称 | 参数描述 |
| model | 要使⽤的 OpenAI 模型的名称 |
| temperature | 采样温度,温度值越高,AI 回答越离谱;温度越低,回答越保守靠谱。 |
| max_tokens | 要⽣成的最⼤令牌数 |
| timeout | 请求超时时间 |
| max_retries | 最⼤重试次数 |
| openai_api_key / api_key | OpenAI API 密钥。如果未传⼊,将从环境变量中读取 OPENAI_API_KEY |
| base_url | API 请求的基本 URL |
| 。。。。 | |

复制代码
model = ChatOpenAI(
    model='deepseek-v4-flash',
    base_url='https://api.deepseek.com',
    api_key=os.environ.get('DEEPSEEK_API_KEY')
)
1.1.2、invoke() 调用

方法定义

abstractmethod invoke(

input: Input,

config: RunnableConfig | None = None,

**kwargs: Any,

) → Output

请求参数:

input :输⼊⼀个 Runnable 实例

config (默认空):⽤于 Runnable 的配置。

返回值: 返回⼀个 Runnable 实例

|--------------|---------------------------------------------------------------|
| 参数名 | 参数描述 |
| configurable | 通过 .configurable_fields()在此 Runnable 或⼦ Runnable 上配置的属性的运⾏时值。 |
| run_id | 针对此调⽤运⾏的跟踪器的唯⼀标识符。如果未提供,将⽣成新的 UUID。 |
| run_name | 此调⽤的跟踪器运⾏的名称。默认为类的名称。 |
| metadata | 此次调用和任何子调用的元数据。键是字符串,值是 JSON。 类型:dict[str, Any] |

调用

复制代码
print(model.invoke("你是谁"))

调用结果:

1.1.3 ⽅式2:init_chat_model

上⾯的 ChatOpenAI ⽤于明确创建 OpenAI 聊天模型的实例。⽽而init_chat_model() 是⼀个工厂函数,它可以初始化多种⽀持的聊天模型,不仅仅是OpenAI 的聊天模型
init_chat_model() 函数定义

langchain.chat_models.base.init_chat_model(

model: str,

*,

model_provider: str | None = None,

configurable_fields: Literal[None] = None,

config_prefix: str | None = None,

**kwargs: Any,

) → BaseChatModel
init_chat_model() 常⽤参数说明

|---------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 参数名 | 参数描述 |
| model | 要使⽤的模型的名称 |
| model_provider | 模型提供⽅。⽀持的 model_provider 值和相应的集成包有: * openai -> langchain-openai * anthropic -> langchain-anthropic * google_genai -> langchain-google-genai * ollama -> langchain-ollama * deepseek -> langchain-deepseek 如果未指定,将尝试从模型推断 model_provider。 |
| configurable_fields | 设置哪些模型参数是可配置的。若配置为: * None: 没有可配置的字段。 * 'any' :所有字段都是可配置的,类似api_key 、 base_url 等可以在运⾏时更改。 * Union[List[str], Tuple[str, ...]]:指定的字段是可配置的。 |
| config_prefix | * 配置为非空字符串,则模型将在运行时通过查找 config["configurable"]["{config_prefix}_{param}"] 字段设置配置项 。 * 配置为空字符串,那么模型将可以通过 config["configurable"] [" {param}"] 字段设置配置项 。 |
| temperature | 采样温度,温度值越高,AI 回答越离谱;温度越低,回答越保守靠谱 |
| max_tokens | 要生成的最大令牌数 |
| timeout | 请求超时时间 |
| 。。。 | |

init_chat_model() 返回值说明:

函数返回⼀个与指定的 model_name 和 model_provider 相对应的 BaseChatModel (如ChatOpenAI , ChatAnthropic 等)。注意要是模型可配置,则返回⼀个聊天模型模拟器,该模拟器在传入配置后,于运行时才会初始化底层模型

1、基本用法

复制代码
deeoseek_model = init_chat_model(model='deepseek-v4-flash',
                                 model_provider='deepseek',
                                 base_url="https://api.deepseek.com"
                            )
print(deeoseek_model.invoke("你是谁"))

运行结果:

2、创建可配置的模型

复制代码
deepseek_model = init_chat_model(temperature=0)

result = deepseek_model.invoke(
    input="你是谁",
    config={
        "configurable":{
            "model":"deepseek-chat",
        }

    }

).content
print(result)

调用结果:

3、创建具有默认值的可配置模型

复制代码
deepseek_model = init_chat_model(
    model="deepseek-v4-flash",
    model_provider="deepseek",
    base_url="https://api.deepseek.com",
    max_tokens=1024,
    configurable_fields=("model",),
    config_prefix="first",
)

result = deepseek_model.invoke(
    input="你是谁",
    
)
print(result)


改后
result = deepseek_model.invoke(
    input="你是谁",
    config={
        "configurable":{
            "first_model":"deepseek-v4-pro"
        }
    }
)

改前

改后

1.2 通过本地部署的 LLM 定义聊天模型

首先在自己的电脑上需要有一个本地模型

调用代码

复制代码
from langchain_ollama import ChatOllama

model = ChatOllama(model="deepseek-r1:1.5b",base_url="http://localhost:11434")
print(model.invoke("你是谁"))

调用结果

相关推荐
Irissgwe2 小时前
LangChain之核心组件(文档加载器Document loaders)
人工智能·ai·langchain·llm·rag·langgraph·文档加载器
lbb 小魔仙3 小时前
LangChain + RAG 知识库系统搭建指南:从零构建企业级文档问答系统
python·langchain
dinl_vin3 小时前
LangChain 系列·(六):RAG 评估——你怎么知道它够好?
人工智能·langchain
深海鱼在掘金5 小时前
深入浅出 LangChain —— 第十二章:实战二 - 代码助手 Agent
人工智能·langchain·agent
深海鱼在掘金5 小时前
深入浅出 LangChain —— 第十三章:实战三 - 企业知识库问答
人工智能·langchain·agent
Byron__5 小时前
AI学习_05_LangChain使用
学习·langchain
草莓熊Lotso6 小时前
LangChain从入门到精通:环境搭建→核心能力→LCEL链式编程全实战
android·java·linux·服务器·langchain
Irissgwe18 小时前
LangChain之核心组件(输出解析器)
ai·langchain·llm·ai编程·输出解析器