前言:
在LangChain框架中,“链”占据着核心地位。它允许我们将众多任务模块串联起来,构建出富有弹性的任务流。借助这种链式结构,我们能够处理复杂的逻辑,并实现任务的自动化。在实际场景里,链式操作极大地优化了大模型的调用管理。它不仅支持单步任务的执行,还能让多步任务相互协作、整合,进而应对更为复杂多变的业务挑战。
准备工作:
确保你的 Python 版本为 3.8 或更高
pip install langchain
conda install -c conda-forge langchain
pip install langchain-core
pip install langchain-community
pip install langchain-experimental
pip install langgraph
pip install "langserve[all]"
pip install langchain-cli
pip install langsmith
pip install langchain-openai
在进入目录下:
cd langchain/libs/langchain
pip install -e .
具体步骤如下:
-
安装 LangChain 及其相关依赖。
-
在
.env
文件或环境变量中配置 API Key。如果使用的是自定义或其他私有大模型,还需要进行相应的 SDK 设置。 -
(可选)如果需要使用
ConversationTokenBufferMemory
等功能,需要额外安装transformers
库和torch
库,以支持 token 计数。
只要能够成功运行以下代码并获取大模型返回的结果,就可以认为环境已经配置完成
1:基础用法
LLMChain 是 LangChain 提供的一个用于构建逻辑链的模块,它结合了大语言模型(LLM)和提示模板(Prompt Template),从而实现对模型交互逻辑的封装。通过 LLMChain,开发者可以:
-
定义清晰的提示模板,确保每次与模型的交互具有明确的目标。
-
通过链式调用,构建更复杂的逻辑,例如多轮对话或任务分解。
具体来说,LLMChain 是开发者与 LLM 交互媒介。
LLMChain 的三大核心组成部分:
要有效运用 LLMChain,需重点把握以下三个关键要素:
1. LLM(大型语言模型):这是执行任务的核心模型,例如 OpenAI 的 GPT 或阿里云的 ChatTongyi。
2. Prompt Template(提示模板):用于定义与模型交互时的语言提示,包括问题的格式、上下文信息等。
3. LLMChain(逻辑链):将上述两个要素整合在一起,提供一个便捷的调用接口。
以下是一个完整的代码示例对话的编码逻辑:
首先,我们需要导入必要的模块并通过环境变量设置 API 密钥,这一步是为了与 ChatTongyi 模型建立连接。通过 os.environ["DASHSCOPE_API_KEY"]
,我们将密钥信息传递给系统,确保模型可以正常运行。
下一步是设置模型。在代码示例中,`ChatTongyi()` 函数用于生成一个大型语言模型的实例。这个函数的作用是加载模型,并将其配置为可以进行后续的操作和使用。
然后,我们通过 ChatPromptTemplate.from_template("{question}")
创建了一个提示模板。在模板中,{question}
是一个占位符,用于动态填充用户输入的问题。这种模板化的设计,让与模型的交互变得更加灵活。
最后,通过 invoke
方法,我们向对话链传递了用户的问题,即 input_question
,模型根据提示模板生成回答。通过 print(response["text"])
,我们可以直观地看到模型的输出结果。
调用完成后,我们就可以在终端里看到大模型模版响应反馈。
2:添加记忆模块
但是假如单纯只是这样将大模型和提示词结合起来并不能展示出langchian的价值,这是因为我们在通义千问官方平台的调用其实也已经能够做到这一点了,因此其实我们还可以往这个链里面加多一些特别的东西,比如说上节课学习的记忆模块!
为了将记忆模块引入,我们需要对代码进行一些调整。首先,提示词模板需要新增一个变量 {memory}
来承接记忆信息,langchian就会自然而然的把这个记忆部分的内容加入进去了!大家可以通过下面的案例进行尝试:
我们从结果中可以得知,模型记住了我的名字!假如我们不希望打印中间的过程内容,我们可以把前面的verbose=False即可。
3:多变量提示词模版
那除了传入单一问题变量 {current_question}
外,我们还可以尝试加入其他变量。例如,如果希望大模型根据指定的语气 {tone}
回复,我们需要对提示词模板进行调整:
另外在调用 .invoke()
方法时,我们需要以字典的格式传入多个变量,但是我们会发现程序无法正常运行,出现的报错信息为:
以下是调整后的实现代码
以下全部实例代码:
总结:
`LLMChain` 提供了更大的灵活性和扩展能力。其主要优势在于对模型调用逻辑的精细控制和模块化架构。通过集成提示模板(Prompt Template)、记忆模块(Memory)以及多参数输入等功能,`LLMChain` 能够适应更复杂的应用场景,例如多轮对话、多任务的链式执行和动态上下文的传递等。而 `ConversationChain` 则更适合快速搭建基础对话功能,其应用范围限于简单的输入输出逻辑。
使用 `LLMChain`,开发者可以便捷地构建结构化的交互流程,将模型的功能与特定应用场景的需求紧密结合。特别是在需要定制化输出、多模块整合(例如记忆模块、数据库访问、API 调用等)的情况下,`LLMChain` 的作用尤为关键。因此,`LLMChain` 是一个更为通用且易于扩展的工具,非常适合在复杂项目中实现精细的逻辑处理和任务管理。