使用 LangChain 构建应用
LangChain 是一个旨在简化大型语言模型(LLM)应用的开发框架。它支持将外部数据源和计算源连接到 LLM,从而构建功能丰富的应用程序。本文将重点介绍 LangChain 中最基础的组件之一——LLMChain,并逐步展示如何从简单的提示响应扩展到更复杂的链式调用。
LangChain 框架允许开发者将外部数据源和计算源连接到大型语言模型。本文介绍了如何使用 LangChain 快速入门,包括环境配置、模型初始化、提示模板构建以及链式调用。通过 ChatOpenAI 集成和 StrOutputParser,用户可以轻松创建从输入到字符串输出的完整流程。文章还涵盖了本地模型部署建议、API 密钥安全管理及流式响应处理等最佳实践,帮助开发者高效构建基于 LLM 的应用程序。

LangChain 是一个旨在简化大型语言模型(LLM)应用的开发框架。它支持将外部数据源和计算源连接到 LLM,从而构建功能丰富的应用程序。本文将重点介绍 LangChain 中最基础的组件之一——LLMChain,并逐步展示如何从简单的提示响应扩展到更复杂的链式调用。
在使用 LangChain 之前,需要确保 Python 环境已配置好。LangChain 支持通过 API 提供的模型(如 OpenAI)和本地开源模型(如 Ollama)。
首先,安装必要的依赖包。对于 OpenAI 集成,需要安装 langchain-openai 包:
pip install langchain-openai
同时,建议安装核心包以确保兼容性:
pip install langchain-core
访问 API 需要一个有效的密钥。您可以通过注册 OpenAI 账户获取该密钥。为了安全起见,建议将密钥设置为环境变量,而不是硬编码在代码中。
设置环境变量示例(Linux/Mac):
export OPENAI_API_KEY="sk-..."
Windows 用户可以使用 setx 或在系统属性中配置。
安装完成后,我们可以初始化模型。以下示例使用 OpenAI 的 Chat 模型。
如果已设置环境变量,可以直接实例化:
from langchain_openai import ChatOpenAI
llm = ChatOpenAI()
如果不希望设置环境变量,可以在启动类时直接通过命名参数传入密钥:
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(openai_api_key="sk-...")
注意:在生产环境中,请避免将密钥硬编码在代码中,建议使用 .env 文件和 python-dotenv 库来管理敏感信息。
一旦安装并初始化了 LLM,就可以尝试调用它。例如,询问关于历史人物的问题:
response = llm.invoke("介绍一下李白?")
print(response)
输出通常是一个 AIMessage 对象,包含内容字段:
AIMessage(content='李白(701 年-762 年),字太白,号青莲居士,唐朝时期伟大的浪漫主义诗人...')
虽然可以直接使用,但在大多数应用中,我们更倾向于处理字符串格式的数据。因此,我们需要引入输出解析器。
提示模板(Prompt Template)用于将原始用户输入转换为更适合 LLM 理解的格式。通过定义 System Message 和 User Message,可以控制模型的语气、角色和回答风格。
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
("system", "你是世界级的历史人物研究人员,擅长用一句话输出回答。"),
("user", "{input}")
])
这里使用了 {input} 作为占位符,将在运行时被实际的用户输入替换。
LangChain 提供了流畅的表达式语言(LCEL),允许使用管道操作符 | 将多个组件连接起来。这比传统的 RunnableWithMessageHistory 或旧版 Chain 更加简洁高效。
将提示模板与模型组合:
chain = prompt | llm
调用链:
result = chain.invoke({"input": "请介绍一下李白?"})
print(result.content)
输出将被限制为系统提示词要求的格式:
李白,唐朝浪漫主义诗人,被誉为'诗仙'。
为了将 AIMessage 对象转换为纯字符串,方便后续处理,我们可以添加 StrOutputParser:
from langchain_core.output_parsers import StrOutputParser
output_parser = StrOutputParser()
chain = prompt | llm | output_parser
再次调用:
response = chain.invoke({"input": "请介绍一下李白?"})
print(type(response)) # <class 'str'>
print(response)
现在返回的是直接的字符串,无需再访问 .content 属性。
在实际应用中,为了提升用户体验,通常希望看到模型生成的文字逐字显示,而不是等待整个响应完成。LangChain 支持流式输出。
for chunk in chain.stream({"input": "请介绍一下李白?"}):
print(chunk, end="", flush=True)
这将逐个打印生成的文本块,实现打字机效果。
除了使用云端 API,LangChain 也支持本地开源模型,如 Ollama。这依赖于硬件配置,适合对数据隐私有要求或预算有限的场景。
以 Ollama 为例,需先安装 Ollama 服务并拉取模型(如 llama3):
ollama pull llama3
然后在代码中初始化:
from langchain_community.chat_models import ChatOllama
llm_local = ChatOllama(model="llama3", temperature=0.7)
chain_local = prompt | llm_local | output_parser
这种方式无需网络请求即可运行,但速度取决于本地算力。
本文详细讲解了 LangChain 中 LLMChain 的基本使用方法。通过组合提示模板、模型和输出解析器,开发者可以快速构建基于大语言模型的应用原型。掌握了 LLMChain 后,后续可以进一步学习检索增强生成(RAG)、代理(Agent)以及多步链等高级功能,以应对更复杂的企业级需求。
在构建应用时,请始终关注安全性、稳定性和成本效益,根据实际业务场景选择合适的模型和架构方案。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online