本系列所有源代码可以通过以下链接下载:
GitHub - brianxiadong/llm-langchain-project: llm-langchain-project
路过的朋友可以支持一下,帮忙点下star和对我的关注。
1. 引言
在当前的人工智能发展浪潮中,语言模型(LLMs)已经成为许多应用的核心。随着大模型的广泛应用,开发者需要一个高效且灵活的框架来帮助他们构建、管理和扩展这些复杂的模型。Langchain就是一个为开发者提供这样功能的框架,它将语言模型和其他工具无缝集成,使开发者能够更轻松地处理大模型应用的复杂性。
本文旨在为对大模型应用开发感兴趣的开发者提供一个Langchain的基础教程。从安装到基本概念的介绍,再到实际的应用示例,本文将帮助读者从零开始掌握Langchain的使用,进而快速构建基于大语言模型的应用。
2. Langchain概述
Langchain是一个开源的Python框架,旨在简化与语言模型交互和集成的工作。无论是处理文本、构建复杂的多步骤应用,还是将模型与外部工具、数据库集成,Langchain都提供了强大的支持。
Langchain的核心功能
Langchain的核心功能包括:
-
多步骤链式操作:支持将多个操作组合在一起,形成一个完整的工作流。
-
与多种API和工具的集成:支持与多个API(如OpenAI、Hugging Face)及工具(如数据库、消息队列)无缝集成。
-
动态文档加载与处理:能够从多种数据源加载文档,并使用语言模型对其进行处理。
-
记忆功能:允许模型在多轮交互中保持上下文,提供更智能的对话体验。
Langchain支持的关键组件
Langchain的关键组件包括:
-
链(Chains):将多个任务串联在一起形成工作流,支持多种类型的链。
-
工具(Tools):与外部系统的交互工具,可以是数据库查询、API调用等。
-
模型(Models):用于处理文本生成、问答等任务的基础组件。
-
文档加载器(Document Loaders):用于将外部文档加载到系统中进行处理的组件。
-
记忆(Memory):在多轮对话或任务中保持上下文的能力。
Langchain的优势及使用场景
Langchain的优势包括:
-
灵活性:Langchain可以通过插件的方式扩展,支持多种第三方工具和API。
-
简化开发流程:Langchain提供了简洁的API,使得开发者能够快速构建并调试大语言模型应用。
-
强大的集成能力:能够与多种数据源、API和外部工具集成,适用于各种场景。
典型的使用场景包括:
-
智能问答系统:结合多个信息源进行上下文相关的问答。
-
文档解析与处理:从文档中提取关键信息,支持多步操作。
-
对话系统:结合记忆功能,构建多轮对话应用。
与其他框架的比较
与一些其他大模型框架(如Spring AI)相比,Langchain更侧重于灵活的链式操作和多步骤任务的处理。Spring AI通常侧重于企业级集成和大规模部署,而Langchain则更适合快速原型开发和与多个外部工具的集成。
3. Langchain的生态
Langchain生态系统包含多个层次和组件,旨在为开发者提供强大的工具集以便在自然语言处理(NLP)和大模型应用中构建复杂的应用程序。根据您提供的图示,可以归纳出以下几个主要部分:
1. LangGraph Platform
这是Langchain生态系统的商业化平台,专注于部署方面。它可能包含一些高级功能或提供额外的服务支持,帮助企业级应用进行部署与集成。这个部分是面向商业客户的,可能包括诸如大规模部署、集成服务以及云端支持等。
2. Integrations
在这个层级,Langchain提供了与不同外部服务、工具和平台的集成能力。它支持多种API、外部模型以及其他技术栈的对接,让开发者能够轻松地将Langchain集成到现有的系统中。
3. LangChain
LangChain是Langchain的核心组件,主要涉及架构设计和实现。它是一个开源的框架(OSS),帮助开发者构建和管理复杂的链式任务、工具和模型。它支持各种链(Chains)的定义、工具(Tools)的集成和模型的调用,广泛应用于快速原型开发以及自动化多步骤任务中。
4. LangGraph
LangGraph是另一个重要的开源模块,可能涉及图形化和复杂关系管理的部分。它与LangChain共同作用,可能用于处理数据流、连接节点,或是处理复杂的关系图等功能。这个部分有助于开发者通过图形化手段简化复杂任务的构建与管理。
5. LangSmith
LangSmith是一个专注于Langchain生态内的一系列商业化服务的工具集,包括:
-
Debugging: 旨在帮助开发者调试和优化模型与链的执行。
-
Playground: 提供交互式的界面和环境供开发者快速测试和调试代码。
-
Prompt Management: 用于管理和优化提示(prompts),帮助开发者在不同的任务和模型之间保持一致性。
-
Annotation: 支持数据的标注和处理,是构建NLP任务时的重要功能。
-
Testing: 提供工具来测试和验证模型和任务链的准确性和效率。
-
Monitoring: 提供监控功能,以跟踪模型和应用的运行状态,确保高效和稳定的性能。
总结来说,Langchain的生态系统包含了部署、集成、架构、图形化关系管理等多个方面的组件,既支持开源开发,又提供商业化服务。这些工具帮助开发者从多个层面构建、调试和优化NLP和大模型应用。
4. 安装与设置
环境要求
在安装Langchain之前,确保你的环境符合以下要求:
-
Python 3.8及以上版本。
-
已安装依赖库:
pip
。
安装步骤
1. 安装Langchain:
使用pip安装Langchain:
pip install langchain
2. 根据使用的模型和工具,可能需要安装额外的依赖。例如,若使用OpenAI API或者ollama,可以安装:
pip install openai
pip install ollama
5. Langchain的基础应用
使用Langchain + Ollama Deepseek构建一个基础的问答系统
在这个示例中,我们将使用Langchain结合Ollama Deepseek模型,创建一个简单的问答系统。我们通过Deepseek模型来理解用户提问并给出合适的回答。
先创建一个requirements.txt文件,方便后续在别的环境快速安装依赖,内容如下:
streamlit
langchain
langchain-community
- streamlit用于前端展示大模型应用对话系统
- langchain用于完成大模型基础框架搭建
- langchain-community用户对接ollama调用大模型
接下来编写代码:
import streamlit as st # 导入Streamlit库,用于创建Web应用界面
from langchain_community.llms import Ollama # 从langchain_community.llms模块导入Ollama类,用于与Ollama大模型交互
import os # 导入os模块,用于与操作系统交互,如此处用于设置环境变量
# 设置Ollama服务地址
os.environ["OLLAMA_HOST"] = "http://127.0.0.1:11434" # 设置环境变量OLLAMA_HOST,指定Ollama服务的API端点
# 初始化Ollama LLM
# 请确保你已经在Ollama中下载了一个模型,例如 llama2
# 你可以通过 `ollama list` 查看可用的模型
# 如果没有模型,可以通过 `ollama pull llama2` (或其他模型名) 下载
try: # 尝试执行以下代码块
llm = Ollama(model="deepseek-r1:1.5b") # 初始化Ollama类,指定使用的模型名称(例如"deepseek-r1:1.5b")。用户可以根据自己Ollama中已有的模型进行修改。
except Exception as e: # 如果在try代码块中发生任何异常
st.error(f"初始化Ollama LLM失败,请确保Ollama服务正在运行,并且指定模型已下载。错误:{e}") # 在Streamlit界面上显示错误信息,提示用户检查Ollama服务和模型
st.stop() # 停止Streamlit应用的执行
st.title("基于 Ollama 和 Langchain 的问答系统") # 设置Streamlit应用的标题
# 用户输入
user_question = st.text_input("请输入你的问题:") # 在Streamlit界面上创建一个文本输入框,让用户输入问题,并将输入内容存储在user_question变量中
if user_question: # 判断用户是否输入了问题 (即user_question是否不为空)
with st.spinner("大模型正在思考中..."): # 在Streamlit界面上显示一个加载提示,告知用户模型正在处理
try: # 尝试执行以下代码块
response = llm.invoke(user_question) # 调用Ollama LLM的invoke方法,将用户的问题传递给模型,并获取模型的回答
st.write("回答:") # 在Streamlit界面上显示"回答:"文本
st.markdown(response) # 使用markdown格式在Streamlit界面上显示模型的回答内容
except Exception as e: # 如果在try代码块中发生任何异常 (例如调用LLM时出错)
st.error(f"调用Ollama LLM时出错:{e}") # 在Streamlit界面上显示错误信息
我已经给每一行都加上了注释,相信代码不难理解。主要流程就是
1. 创建ollama对象,指定模型的名称。
2. Streamlit设置参数,主要是标题和用户提示。
3. 等待用户输入,调用Langchain中的llm.invoke方法,调用大模型回答问题。
4. 拿到大模型的回答结果,传递给Streamlit进行展示。
效果演示:
先通过ollama serve启动大模型服务。
接下来使用如下命令,会提示你输入邮箱,直接回车跳过即可。访问http://localhost:8501/即可打开页面。
streamlit run app.py
6. 总结
在本文中,我们介绍了Langchain框架的基础知识、核心功能以及如何将其与Ollama Deepseek模型结合,构建一个简单的问答系统。Langchain作为一个灵活且强大的框架,为开发者提供了处理大语言模型的工具和组件,使得多步骤任务和模型集成变得更加简便。
通过本文的学习,相信读者能够理解Langchain框架的基本概念,并能够运用它构建出适用于各种场景的大模型应用。希望大家能在实际开发中,充分发挥Langchain的优势,构建出更强大、灵活的语言模型应用。