
使用这些基本 REST API 最佳实践构建出色的 API
Chains是什么?Chains 在 LangChain 框架中的核心概念是用于将多个组件及其他 Chains 组合成更复杂功能,通过模块化与复用提高开发效率、代码可读性及可维护性。
Chains能干什么?
Chains的灵活性使得我们可以根据具体需求将多个链组合在一起,或者将链与其他功能组件相结合,从而构建出更复杂、更强大的应用程序。
Legacy Chains 是一系列传统的工具链,用于处理和转换数据,执行特定的任务,并在早期的技术环境中提供关键的功能支持。
Chains的工作流程:通过定义链构造函数来初始化链,配置所需的组件和可能的其他链,以形成具有特定功能的执行流程。
Chains的工作流程
Chains的架构:Chains作为LangChain的核心组件,通过串联各个逻辑单元,实现了流程控制、数据传递和状态管理,使得复杂的业务逻辑能够高效、有序地执行。
LangChain Expression Language(LCEL)是一种声明式的方式,可以轻松地组合链。LCEL 从一开始就被设计为支持将原型投入生产,无需任何代码更改,从最简单的“提示+LLM”链到最复杂的链。
Chains的基本案例:prompt + model + output parser
在此链中,用户输入传递到提示模板,然后提示模板输出传递到模型,然后模型输出传递到输出解析器。
1. 提示(Prompt):你创建了一个 ChatPromptTemplate 对象,该对象使用给定的模板字符串,并根据提供的输入(在这种情况下是主题)生成完整的提示。当你调用 prompt.invoke({“topic”: “ice cream”}) 时,它会返回一个 ChatPromptValue 对象,该对象包含要传递给模型的完整提示。
prompt value = prompt,invoke({"topic": "ice cream"])
prompt value
ChatPromptValue(messages=[HumanMessage(content='tell me a short joke about ice crean')])
prompt value,to messages )
[HumanMessage(content='tell me a short joke about ice cream')]
prompt value.to string()
Human: tell me a short joke about ice cream'
ChatPromptTemplate
2. 模型(Model):PromptValue
作为输入传递给ChatModel
,该模型处理后输出一个BaseMessage
格式的回复。
message = model invoke(prompt value)
message
AIMessage(content-"why don't ice creams ever get invited to parties?\n\nBecause they al
ChatModel
如果我们的模型是一个大语言模型(LLM),它将输出一个字符串作为结果。
from langchain openai. llms import OpenAI
llm = OpenAI(model="gpt-3.5-turbo-instruct")
llm. invoke(prompt value)
\nnRobot: Why did the ice cream truck break down? Because it had a meltdown!'
大语言模型(LLM)
3. 输出解析器(Output Parser):最后,我们将模型输出传递给output_parser
,它是一个BaseOutputParser
,可以接受字符串或BaseMessage
作为输入。其中,StrOutputParser
专门将任何输入简单转换为字符串。
output parser.invoke(messagel
"why did the ice cream go to therapy? ininBecause it had too many toppings and couldn't
输出解析器(Output Parser)
RAG Search Example:在这个例子中,我们想要运行一个检索增强的生成链,以便在回答问题时添加一些上下文。
该流程通过创建一个包含上下文和问题的RunnableParallel对象,将其传递给提示组件以生成PromptValue,然后将该值输入到OpenAI的大型语言模型(LLM)中以生成ChatMessage,最后通过输出解析器将其转换为Python字符串并返回。
1. 创建RunnableParallel对象:首先,创建一个RunnableParallel
对象,它包含两个条目:一个是context
(由检索器获取的文档结果),另一个是question
(用户的原始问题)。为了传递问题,使用RunnablePassthrough
来复制这个条目。
2. 传递给提示组件:将上述步骤中创建的字典传递给提示组件。提示组件接收用户输入的问题和检索到的文档(作为上下文),然后构建一个提示并输出一个PromptValue
。
3. 模型组件评估:模型组件接收生成的提示,并将其传递给OpenAI的大型语言模型(LLM)进行评估。模型生成的输出是一个ChatMessage
对象。
4. 输出解析:最后,output_parser
组件接收一个ChatMessage
对象,并将其转换为Python字符串。这个字符串是从调用方法中返回的最终结果。
# Requires:
# pip install langchain docarray tiktoken
from langchain community.vectorstores import DocArrayInMemorySearchfromlangchain core.output parsers import StrOutputParser
langchain core.prompts import ChatPromptTemplatefrom
fromilangchain core,runnables import RunnableParallel, RunnablePassthrough
fromlangchain openaichat models import ChatOpenAIfrom langchain openai.embeddings import OpenAIEmbeddings
vectorstore = DocArrayInMemorySearch, from texts(
["harrison worked at kensho", "bears like to eat honey"].embedding 0penAIEmbeddings()
retriever = vectorstore.as retriever()
template = mAnswer the question based only on the following context;{context}
Question: {question》
prompt = ChatPromptTemplate.from template(template)model = ChatOpenAi()
output parser = StrOutputParser()
setup and retrieval = RunnableParallel(["context": retriever,"question": RunnablePassthrough()]
chain = setup and retrieval l prompt model output parser
chain.invoke("where did harrison work?")
本文章转载微信公众号@架构师带你玩转AI