Langchain学习笔记(六):Langchain框架介绍与环境搭建

:本文是Langchain框架的学习笔记;不是教程!不是教程!内容可能有所疏漏,欢迎交流指正。后续将持续更新学习笔记,分享我的学习心得和实践经验。

1. Langchain的产生背景与解决的问题

Langchain是一个为大语言模型(LLM)应用开发而设计的框架,它诞生于2022年底,正是大语言模型迅速发展的时期。其产生背景主要有以下几个方面:

1.1 大模型应用开发的复杂性

随着GPT-3、GPT-4等大语言模型的出现,开发者面临着如何有效利用这些模型构建实际应用的挑战。直接调用API虽然简单,但构建复杂应用时会遇到诸多问题:

  • 提示词工程复杂且难以管理

  • 上下文窗口限制导致长文本处理困难

  • 缺乏与外部工具和数据源的连接机制

  • 应用逻辑复杂时代码难以维护


1.2 知识时效性与专有数据问题

大语言模型存在训练数据截止日期的限制,无法获取最新信息。同时,模型也不包含企业或个人的专有数据。这导致了两个核心问题:

  • 模型回答可能包含过时信息

  • 无法直接回答关于专有数据的问题


1.3 大模型能力增强的需求

虽然大语言模型功能强大,但在特定场景下仍有局限性:

  • 复杂推理能力有限

  • 无法直接访问外部工具和API

  • 长期记忆和上下文管理困难

  • 结构化输出不稳定

Langchain正是为解决这些问题而诞生的,它提供了一套完整的工具和框架,帮助开发者更高效地构建基于大语言模型的应用。



2. Langchain的核心优势与设计理念

Langchain的设计理念是提供一个模块化、灵活且可扩展的框架,使开发者能够轻松构建复杂的LLM应用。其核心优势体现在以下几个方面:

2.1 模块化设计

Langchain采用高度模块化的设计,将LLM应用开发拆分为多个独立组件:

  • Models:统一的模型接口,支持各种LLM提供商

  • Prompts:提示模板管理系统

  • Chains:将多个组件连接成处理流程

  • Memory:管理对话历史和上下文

  • Retrievers:实现高效的文档检索

  • Agents:自主决策和工具使用的智能体系统

这种模块化设计使开发者可以根据需求选择和组合不同组件,而不必从头构建整个系统。


2.2 抽象与标准化

Langchain为各种LLM操作提供了统一的抽象层:

  • 统一的模型接口,屏蔽不同提供商API的差异

  • 标准化的文档处理流程

  • 一致的向量存储接口

  • 通用的工具注册和调用机制

这种抽象使得开发者可以轻松切换底层实现,而不必修改应用逻辑。


2.3 可组合性

Langchain的一大设计理念是"可组合性"(Composability),即各组件可以灵活组合形成复杂系统:

  • 简单组件可以组合成复杂链

  • 不同链可以相互嵌套

  • 记忆系统可以与各种链集成

  • 检索器可以插入到不同处理流程中

这种可组合性大大提高了开发效率和代码复用率。


2.4 开源与社区驱动

作为开源项目,Langchain具有强大的社区支持:

  • 活跃的开发者社区不断贡献新功能

  • 丰富的集成支持各种外部服务和工具

  • 完善的文档和示例加速学习曲线

  • 持续更新以适应LLM技术的快速发展


3. 环境配置与依赖安装

要开始使用Langchain进行开发,首先需要配置适当的Python环境并安装必要的依赖。

需要安装ollama本地服务并下载大模型。

3.1 Python版本要求

Langchain支持Python 3.8.1及以上版本,推荐使用Python 3.9或3.10以获得最佳兼容性。

本文使用Python3.11.5版本。


3.2 虚拟环境设置

建议使用虚拟环境来隔离项目依赖:

# 使用venv创建虚拟环境
python -m venv langchain-env

# 激活虚拟环境
# Windows
langchain-env\Scripts\activate
# macOS/Linux
source langchain-env/bin/activate

3.3 安装依赖包

pip install langchain langchain_core langchain_community langchain_ollama

# 其他依赖包按需下载

3.4 Ollama安装部署大模型

Ollama是一个轻量级工具,支持在WindowsLinuxMacOS上本地运行大语言模型。它允许用户非常方便地运行和使用各种大语言模型,比如Qwen模型等。用户只需一行命令就可以下载或启动大模型。

打开官网,选择对应系统下载,下载后直接选择双击(默认安装C盘,可自行搜索如何换盘安装ollama)

Langchain学习笔记(六):Langchain框架介绍与环境搭建_第1张图片


安装完成之后,打开一个cmd命令窗口,输入“ollama”命令,如果显示ollama相关的信息就证明安装已经成功了!
ollama

Ollama常用命令

ollama serve 		# 启动ollama 
ollama create 		# 从模型文件创建模型 
ollama show 		# 显示模型信息 
ollama run 			# 运行模型,如果模型不存在则自动下载模型 
ollama pull 		# 下载模型,但不运行 
ollama push 		# 将模型推送到注册仓库 
ollama list 		# 列出已下载模型 
ollama ps 			# 列出正在运行的模型 
ollama cp 			# 复制模型 
ollama rm 			# 删除模型

ChatBox连接本地模型

由于命令行操作窗口使用大模型不方便,可以选择客户端来连接本地模型,可以实现窗口聊天
Langchain学习笔记(六):Langchain框架介绍与环境搭建_第2张图片



4. Langchain vs 其他框架对比

市场上存在多种LLM应用开发框架,了解它们的异同有助于选择最适合的工具。

4.1 Langchain vs LlamaIndex

LlamaIndex(前身为GPT Index)专注于数据索引和检索:

相似点

  • 都支持RAG(检索增强生成)应用

  • 都提供文档处理和向量存储集成

  • 都支持多种LLM提供商

差异点

  • LlamaIndex更专注于数据索引和查询优化

  • Langchain提供更全面的应用开发框架(Agents、Memory等)

  • LlamaIndex的查询引擎更丰富

  • Langchain的工具集成和Agent系统更强大


4.2 Langchain vs Haystack

Haystack是一个专注于问答系统和搜索的框架:

相似点

  • 都支持模块化组件设计

  • 都提供文档处理和检索功能

  • 都支持多种模型集成

差异点

  • Haystack更专注于搜索和问答系统

  • Langchain覆盖更广泛的LLM应用场景

  • Haystack的Pipeline概念类似于Langchain的Chain

  • Langchain的Agent系统更为先进


4.3 Langchain vs AutoGPT/BabyAGI

AutoGPT和BabyAGI是自主Agent系统:

相似点

  • 都涉及AI自主决策和任务执行

  • 都利用LLM进行推理和规划

差异点

  • AutoGPT/BabyAGI是完整的自主系统,而Langchain是开发框架

  • Langchain提供构建类似系统的工具和组件

  • Langchain更灵活,可用于构建各种应用


4.4 选择建议

  • 选择Langchain:如果需要构建全面的LLM应用,需要灵活性和可扩展性

  • 选择LlamaIndex:如果主要关注数据索引和高效检索

  • 选择Haystack:如果专注于构建搜索和问答系统

  • 使用组合:实际上,这些框架可以结合使用,Langchain可以集成LlamaIndex作为检索器



5. 版本选择与兼容性考虑

Langchain发展迅速,版本选择和兼容性是重要考量因素。

5.1 版本发布周期

Langchain更新非常频繁,几乎每周都有新版本发布:

  • 主要版本(Major):引入重大架构变更,可能不向后兼容

  • 次要版本(Minor):添加新功能,保持向后兼容

  • 补丁版本(Patch):修复bug,不添加新功能


5.2 Langchain、Langchain-core和Langchain-community

Langchain框架在其发展过程中进行了架构重组,将原本单一的包拆分为多个专注不同功能的包:

  1. Langchain-core (核心包)
    langchain-core是整个框架的基础,包含最基本的抽象和接口:
  • 核心抽象:定义了框架的基本概念和接口,如LLM、Prompt、Chain等
  • 基础组件:提供了最基本的组件实现
  • 运行时:包含运行链和Agent的核心逻辑
  • 轻量级:依赖最少,体积小
    这个包是其他所有Langchain包的基础,定义了统一的接口标准,确保不同组件之间可以无缝协作。
  1. Langchain-community (社区包)
    langchain-community包含了大量的第三方集成和实现:
  • 模型集成:各种LLM提供商的集成(OpenAI、Anthropic、本地模型等)
  • 向量存储:各种向量数据库的集成(Chroma、FAISS、Pinecone等)
  • 文档加载器:支持各种文件格式的加载器
  • 工具集成:各种外部API和服务的集成
  • 检索器实现:不同检索策略的实现
    这个包主要关注与外部系统和服务的集成,由社区贡献和维护,包含了丰富的第三方组件。
  1. Langchain (主包)
    langchain是主包,包含了构建LLM应用的高级组件和功能:
  • 链的实现:各种预定义的链(QA链、摘要链等)
  • Agent实现:不同类型的Agent和工具
  • 高级功能:如RAG系统、评估框架等
  • 应用模板:常见应用场景的模板和示例

主包依赖于core和community包,提供了更高级别的抽象和功能,适合直接构建应用。

langchain-core (基础抽象和接口)
       ↑
       |
langchain-community (第三方集成)
       ↑
       |
   langchain (高级功能和应用)

5.3 版本选择策略

根据项目需求选择合适的版本策略:

  • 生产环境:锁定特定版本,确保稳定性

  • 开发环境:使用最新版本,获取新功能

  • 长期维护项目:定期更新,但进行充分测试


5.4 依赖兼容性

注意Langchain与其他库的兼容性:

  • OpenAI API版本变更可能影响Langchain

  • 向量数据库客户端版本需要匹配

  • Python版本兼容性(建议Python 3.9或3.10)



6. 实际应用:搭建Ollama+Langchain开发环境并实现

下面我将实际搭建一个基于Ollama和Langchain的开发环境,并实现一个简单的问答应用。

6.1 Ollama简介

Ollama是一个轻量级工具,用于在本地运行各种开源大语言模型,如Llama 2、Mistral等。它的优势在于:

  • 简化本地模型的运行和管理

  • 提供API接口,便于与Langchain集成

  • 支持多种开源模型

  • 资源占用相对较低

ollama与langchain

Ollama是一个应用工具,可以在本地部署和运行大模型,并提供标准化的API接口

LangChain 是一个开发框架,用于构建基于大语言模型的应用,LangChain 可以连接任何模型(无论是通过 Ollama 运行的本地模型 还是通过 API 访问的云端模型)


6.2 创建基本问答应用

from langchain.llms import Ollama
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain

# 初始化Ollama LLM
llm = Ollama(model="llama2")

# 创建提示模板
template = """
请回答以下问题,尽可能详细和准确:

问题: {question}

回答:
"""
prompt = PromptTemplate(template=template, input_variables=["question"])

# 创建LLM链
chain = LLMChain(llm=llm, prompt=prompt)

# 运行链
question = "什么是Langchain框架,它有什么主要功能?"
response = chain.run(question)

print(response)

6.3 创建简单的聊天机器人

from langchain.llms import Ollama
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationChain

# 初始化Ollama LLM
llm = Ollama(model="llama2")

# 创建对话记忆
memory = ConversationBufferMemory()

# 创建对话链
conversation = ConversationChain(
    llm=llm,
    memory=memory,
    verbose=True
)

# 对话循环
print("聊天机器人已启动,输入'退出'结束对话")
while True:
    user_input = input("你: ")
    if user_input.lower() == "退出":
        break
    
    response = conversation.predict(input=user_input)
    print(f"机器人: {response}")

6.4 构建文档问答系统(RAG)

import os
from langchain.llms import Ollama
from langchain.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings import OllamaEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA

# 初始化Ollama LLM和嵌入模型
llm = Ollama(model="llama2")
embeddings = OllamaEmbeddings(model="llama2")

# 加载文档
loader = TextLoader("data/document.txt")
documents = loader.load()

# 分割文档
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)

# 创建向量存储
vectorstore = Chroma.from_documents(texts, embeddings)

# 创建检索QA链
qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=vectorstore.as_retriever()
)

# 提问
query = "文档中提到了哪些主要概念?"
result = qa_chain.run(query)
print(result)



7. Langchain的工作流程与核心概念

为了更好地理解Langchain,我们需要掌握其核心工作流程和概念。

7.1 Langchain的基本工作流程

Langchain的典型工作流程包括:

  1. 初始化模型:配置和初始化LLM或ChatModel

  2. 创建提示模板:设计和格式化提示词

  3. 构建处理链:将模型、提示和其他组件连接成链

  4. 执行链:处理输入并生成输出

  5. 解析结果:处理和格式化输出结果


7.2 核心概念解析

模型(Models)

Langchain支持两类主要模型:

  • LLM:接收文本输入,返回文本输出

  • ChatModel:基于消息列表交互,支持角色区分

from langchain.llms import OpenAI
from langchain.chat_models import ChatOpenAI

# LLM示例
llm = OpenAI(temperature=0.7)
result = llm.predict("讲一个笑话")

# ChatModel示例
chat_model = ChatOpenAI()
from langchain.schema import HumanMessage
result = chat_model.predict_messages([HumanMessage(content="讲一个笑话")])

提示(Prompts)

提示是与模型交互的关键:

  • PromptTemplate:文本模板,支持变量插入

  • ChatPromptTemplate:聊天模板,支持多角色消息

from langchain.prompts import PromptTemplate, ChatPromptTemplate
from langchain.prompts.chat import HumanMessagePromptTemplate

# 文本提示模板
prompt = PromptTemplate(
    input_variables=["topic"],
    template="给我讲一个关于{topic}的故事"
)

# 聊天提示模板
chat_prompt = ChatPromptTemplate.from_messages([
    HumanMessagePromptTemplate.from_template("给我讲一个关于{topic}的故事")
])

链(Chains)

链是Langchain的核心概念,用于组合多个组件:

  • LLMChain:最基本的链,连接提示和模型

  • SequentialChain:按顺序执行多个链

  • RouterChain:根据输入选择不同的链

from langchain.chains import LLMChain

# 基本LLM链
chain = LLMChain(llm=llm, prompt=prompt)
result = chain.run(topic="太空探索")

记忆(Memory)

记忆组件用于管理对话历史:

  • ConversationBufferMemory:存储完整对话历史

  • ConversationSummaryMemory:存储对话摘要,节省上下文空间

from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationChain

# 带记忆的对话链
memory = ConversationBufferMemory()
conversation = ConversationChain(
    llm=llm,
    memory=memory
)

你可能感兴趣的:(LangChain,langchain,学习,笔记)