LangChain 快速入门:构建您的第一个 LLM 应用
本指南将引导您完成使用 LangChain 构建一个基础 LLM 应用的全过程,从核心组件的交互到最终的应用部署。通过这个实例,您将了解 LangChain 的基本工作流程和关键概念,为后续更深入的学习奠定基础。我们将构建一个简单的翻译应用。
1. 核心概念概览
在开始构建之前,了解 LangChain 中的一些基本组件和工具非常重要:
- 聊天模型 (Chat Model): 与底层大型语言模型(如 GPT、Claude 等)进行交互的接口。提示词模板 (Prompt Template): 用于根据用户输入或其他动态信息,结构化地生成发送给语言模型的指令(提示)。输出解析器 (Output Parser): 用于处理和转换语言模型返回的原始响应,提取所需信息或将其格式化为特定结构。LangChain 表达式语言 (LCEL): 一种声明式的方式,允许将不同的 LangChain 组件(如提示模板、模型、解析器)像管道一样串联起来,构建复杂的处理链。LangSmith: 一个用于调试、追踪和监控 LangChain 应用运行过程的平台,有助于理解链内部的每一步。LangServe: 一个用于将使用 LCEL 构建的 LangChain 应用快速部署为 REST API 服务的库。
2. 环境设置
- Jupyter Notebook(可选): 推荐使用 Jupyter Notebooks 进行交互式学习和开发,便于逐步执行和观察结果。(安装说明请参考 这里)安装 LangChain:
pip install langchain
更多安装细节请参见 LangChain 安装指南。设置 LangSmith (可选但推荐):LangSmith 对于理解应用内部流程非常有帮助。3. 使用语言模型
首先,学习如何单独与语言模型交互。
- 安装模型提供商库 (以 OpenAI/TogetherAI 为例):
pip install -qU langchain-openai
选择和初始化模型: LangChain 支持多种模型。这里以配置 TogetherAI 访问 Mixtral 为例(需要 TogetherAI API 密钥)。import getpassimport osfrom langchain_openai import ChatOpenAI os.environ["TOGETHER_API_KEY"] = "YOUR_TOGETHER_API_KEY" model = ChatOpenAI( base_url="https://api.together.xyz/v1", api_key=os.environ["TOGETHER_API_KEY"], model="mistralai/Mixtral-8x7B-Instruct-v0.1", )
调用模型: ChatModel
实例提供了一个标准的 .invoke
方法。输入通常是包含不同角色消息的列表。from langchain_core.messages import HumanMessage, SystemMessagemessages = [ SystemMessage(content="将以下内容从英语翻译成意大利语"), HumanMessage(content="hi!"), ]response = model.invoke(messages)print(response)
模型返回一个 AIMessage
对象,包含响应文本和其他元数据:AIMessage(content='ciao!', response_metadata={...}, id='...')
4. 使用输出解析器
语言模型的原始输出(AIMessage
)可能包含我们不需要的额外信息。输出解析器帮助我们提取核心内容。
- 导入
StrOutputParser
: 这是一个简单的解析器,仅提取消息中的字符串内容。from langchain_core.output_parsers import StrOutputParserparser = StrOutputParser()
单独使用解析器:result = model.invoke(messages) parsed_result = parser.invoke(result) print(parsed_result)
输出:'ciao!'
使用 LCEL 链接模型和解析器: LCEL 的 |
操作符可以将组件连接起来。数据流从左到右传递。chain = model | parserparsed_output = chain.invoke(messages)print(parsed_output)
输出:'ciao!'
5. 使用提示词模板
通常,我们不直接硬编码发送给模型的消息,而是根据用户输入动态生成。提示词模板就是为此设计的。
- 导入
ChatPromptTemplate
:from langchain_core.prompts import ChatPromptTemplate
定义模板: 创建一个包含占位符的模板结构。system_template = "将以下内容翻译成 {language}:"prompt_template = ChatPromptTemplate.from_messages([ ("system", system_template), ("user", "{text}") ])
{language}
和 {text}
是变量,将在运行时填充。使用模板生成提示: 调用 .invoke
并传入包含变量值的字典。prompt_value = prompt_template.invoke({"language": "意大利语", "text": "你好"})print(prompt_value) print(prompt_value.to_messages())
输出:ChatPromptValue(messages=[SystemMessage(content='将以下内容翻译成 意大利语:'), HumanMessage(content='你好')])[SystemMessage(content='将以下内容翻译成 意大利语:'), HumanMessage(content='你好')]
6. 使用 LCEL 连接所有组件
现在,将前面介绍的提示词模板、模型和输出解析器使用 LCEL 组合成一个完整的处理流程。
chain = prompt_template | model | parserfinal_result = chain.invoke({"language": "意大利语", "text": "你好"})print(final_result)
输出:
'ciao'
这个 chain
对象封装了从接收输入(语言和文本)到生成最终翻译结果(字符串)的整个逻辑。如果在第 2 步设置了 LangSmith,可以在 LangSmith 界面清晰地看到这个链中每一步的输入和输出。
7. 使用 LangServe 提供服务 (部署)
最后一步是将我们构建的 LangChain 应用部署为一个可供其他服务或用户访问的 API。
- 安装 LangServe:
pip install "langserve[all]"
创建 serve.py
文件: 这个 Python 文件包含了运行 API 服务器所需的所有代码。from fastapi import FastAPIfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_core.output_parsers import StrOutputParserfrom langchain_openai import ChatOpenAIfrom langserve import add_routesimport osimport uvicornsystem_template = "将以下内容翻译成 {language}:"prompt_template = ChatPromptTemplate.from_messages([ ('system', system_template), ('user', '{text}')])model = ChatOpenAI()parser = StrOutputParser()chain = prompt_template | model | parserapp = FastAPI( title="LangChain 服务器", version="1.0", description="一个简单的使用 LangChain Runnable 接口的 API 服务器",)add_routes( app, chain, path="/translate", )if __name__ == "__main__": uvicorn.run(app, host="localhost", port=8000)
运行服务器:在终端中执行:python serve.py
访问 API:服务器启动后:通过以上步骤,您已经体验了使用 LangChain 构建、组合和部署一个简单 LLM 应用的基本流程。这为您探索 LangChain 更丰富的功能(如 RAG、Agents 等)打下了基础。