4、LangChain框架入门:LangChain是什么、LangChain核心组件、LangChain安装与配置、LangChain与Ollama的集成方式

好,咱们进入正题。这一章我们来聊聊LangChain。说实话,我第一次接触LangChain的时候,心里想的是:「这不就是个套壳工具吗?」后来在项目中踩了几个坑,才明白它真正的价值在哪。

LangChain是什么

简单来说,LangChain是一个用于构建大语言模型应用的框架。它帮你把「调用模型」这件事,从写死代码变成搭积木。

我个人的理解是:LangChain = 模型调用 + 流程编排 + 工具集成。你想想看,如果只是调个API,那用requests库就够了。但当你需要做多轮对话、文档问答、调用外部工具、管理记忆……这些场景下,LangChain的价值就出来了。

核心定位:LangChain不是模型,也不是API。它是连接模型与应用的「胶水层」。

我在项目中遇到过这样一个场景:客户要求做一个能查数据库、能读PDF、还能联网搜索的智能助手。如果从头写,光是管理这些工具的调用逻辑就够头疼的。用LangChain,我只需要定义好工具列表,然后让Agent自动选择调用哪个——嗯,省了不少事。

LangChain核心组件

LangChain的组件不少,但核心的就这几个。我按使用频率给你排个序:

组件 作用 我的评价
Models 封装各种LLM的调用接口 最基础,几乎每个项目都用
Prompts 管理提示词模板 看似简单,但坑最多
Chains 将多个步骤串联成流水线 核心中的核心
Agents 让模型自主决定调用什么工具 高级玩法,效果惊艳
Memory 管理对话历史 做聊天机器人必备
Document Loaders 加载各种格式的文档 RAG应用的基础

咱们重点说几个:

Models(模型封装)

LangChain支持几十种模型,从OpenAI到本地部署的Ollama,都统一了调用接口。说白了,你换模型只需要改一行配置,代码不用动。我刚开始用的时候觉得这没什么,直到有一次客户要求从GPT-4换成国产模型……嗯,真香。

Chains(链)

Chain是LangChain的灵魂。它把「输入→处理→输出」这个流程串起来。比如一个简单的问答链:接收问题 → 格式化提示词 → 调用模型 → 返回答案。你可以自定义每一步的逻辑。

Agents(智能体)

Agent比Chain更灵活。它让模型自己决定「下一步该做什么」。比如用户问「今天天气怎么样」,Agent会判断需要调用天气查询工具,然后执行并返回结果。我曾经用Agent做了一个自动写周报的工具,它能自己查代码仓库的提交记录、汇总工作内容、生成Markdown格式的周报——虽然偶尔会跑偏,但大部分时候靠谱。

LangChain安装与配置

安装LangChain非常简单。我建议用pip直接装:

pip install langchain

如果你要用Ollama集成,还需要装对应的包:

pip install langchain-community

小提示:我习惯用虚拟环境来装,避免依赖冲突。尤其是LangChain更新频繁,不同版本之间API可能有变化。

配置方面,LangChain本身不需要什么配置文件。但如果你要用Ollama,需要确保Ollama服务已经启动。默认情况下,Ollama运行在 http://localhost:11434

验证安装是否成功,可以跑个简单的测试:

from langchain_community.llms import Ollama

llm = Ollama(model="llama3")
response = llm.invoke("你好,世界!")
print(response)

如果能看到模型返回的内容,说明环境没问题。

注意:第一次运行会下载模型,根据模型大小可能需要几分钟到几十分钟。我曾经在客户现场演示时忘了提前下载模型,结果等了半小时……场面一度很尴尬。

LangChain与Ollama的集成方式

集成方式其实就两种:直接调用和通过ChatModel接口。我分别说一下。

方式一:直接使用Ollama LLM

这是最直接的方式,适合简单的文本生成任务:

from langchain_community.llms import Ollama

llm = Ollama(
    model="llama3",
    base_url="http://localhost:11434",
    temperature=0.7
)

result = llm.invoke("用一句话解释什么是LangChain")
print(result)

方式二:使用ChatOllama(推荐)

如果你需要对话能力,建议用ChatOllama。它支持消息列表,更适合多轮对话:

from langchain_community.chat_models import ChatOllama
from langchain.schema import HumanMessage, SystemMessage

chat = ChatOllama(model="llama3")

messages = [
    SystemMessage(content="你是一个AI助手,请用中文回答。"),
    HumanMessage(content="LangChain和Ollama是什么关系?")
]

response = chat.invoke(messages)
print(response.content)

我个人更推荐第二种方式。为什么?因为ChatOllama返回的是标准化的消息对象,方便后续接入Chain和Agent。我在项目中用ChatOllama配合Memory组件,做出来的聊天机器人效果很不错。

集成后的典型流程

咱们画个图,看看整个调用链路长什么样:

用户输入 LangChain应用 Ollama服务 模型 返回结果 Prompt模板 Chain/Agent Memory LangChain内部组件协同工作

从图上可以看得很清楚:用户输入先到LangChain应用,经过Prompt模板、Chain/Agent、Memory等组件处理后,再发给Ollama服务,最终调用本地模型。返回结果再原路返回。

关键点:LangChain在这里扮演的是「调度中心」的角色。它不负责模型推理,只负责流程编排和数据流转。

避坑指南

最后分享几个我踩过的坑:

  • 模型名称要写对:Ollama里的模型名和LangChain里要完全一致,大小写敏感。我曾经把"llama3"写成"Llama3",结果报错半天。
  • base_url别漏了端口:默认是11434,如果你改了Ollama的配置,记得同步修改。
  • 版本兼容性:LangChain 0.1.x和0.2.x的API有变化。我建议锁定版本,别追新。
  • 内存管理:本地跑大模型很吃内存。如果模型加载失败,先看看是不是内存不够了。

好了,这一章的内容就到这。LangChain的入门其实不难,关键是理解它的设计思路——把复杂流程拆成可组合的组件。下一章我们会深入Chain的用法,到时候再聊。


公众号:蓝海资料掘金营,微信deep3321