链 Chains
在简单应用中,单独使用LLM是可以的,但是更复杂的应用需要将LLM链接在一起 - 要么与其他LLM链接在一起,要么与其他组件链接在一起。
LangChain为这种“链接”应用提供了Chain接口。我们将链定义为一系列对组件的调用,可以包括其他链。基本接口很简单:
class Chain(BaseModel, ABC):
"""所有链都应该实现的基本接口。"""
memory: BaseMemory
callbacks: Callbacks
def __call__(
self,
inputs: Any,
return_only_outputs: bool = False,
callbacks: Callbacks = None,
) -> Dict[str, Any]:
...
将组件组合在一起形成链的思想简单而强大。它极大地简化了复杂应用的实现,并使应用更加模块化,从而更容易调试、维护和改进应用。
有关更多详细信息,请查看:
- How-to,了解不同链特性的演示
- Foundational,熟悉核心构建块链
- Document,学习如何将文档纳入链中
- Popular,常见用例的链
- Additional,查看一些更高级的链和集成,可以直接使用
为什么我们需要链?
链允许我们将多个组件组合在一起,创建一个单一、连贯的应用程序。例如,我们可以创建一个链,接收用户输入,使用PromptTemplate对其进行格式化,然后将格式化后的响应传递给LLM。我们可以通过将多个链组合在一起,或将链与其他组件组合,构建更复杂的链。
入门
使用LLMChain
LLMChain
是最基本的构建块链。它接收一个提示模板,将其与用户输入进行格式化,并返回LLM的响应。
要使用LLMChain
,首先创建一个提示模板。
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
llm = OpenAI(temperature=0.9)
prompt = PromptTemplate(
input_variables=["product"],
template="What is a good name for a company that makes {product}?",
)
现在,我们可以创建一个非常简单的链,它将接收用户输入,使用提示模板进行格式化,然后将其发送给LLM。
from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=prompt)
# 仅指定输入变量运行链。
print(chain.run("colorful socks"))
输出结果为:
Colorful Toes Co.
如果有多个变量,可以使用字典一次性输入它们。
prompt = PromptTemplate(
input_variables=["company", "product"],
template="What is a good name for {company} that makes {product}?",
)
chain = LLMChain(llm=llm, prompt=prompt)
print(chain.run({
'company': "ABC Startup",
'product': "colorful socks"
}))
输出结果为:
Socktopia Colourful Creations.
您还可以在LLMChain
中使用聊天模型:
from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import (
ChatPromptTemplate,
HumanMessagePromptTemplate,
)
human_message_prompt = HumanMessagePromptTemplate(
prompt=PromptTemplate(
template="What is a good name for a company that makes {product}?",
input_variables=["product"],
)
)
chat_prompt_template = ChatPromptTemplate.from_messages([human_message_prompt])
chat = ChatOpenAI(temperature=0.9)
chain = LLMChain(llm=chat, prompt=chat_prompt_template)
print(chain.run("colorful socks"))
输出结果为:
Rainbow Socks Co.