正文
这里会介绍Langchain的基础用法(初学者)。
Langchain基础用法
管道符 “ | “
Langchain中对很多LLM开发过程中的函数进行了定义,例如:
prompt可以通过ChatPromptTemplate定义
model可以通过ChatOpenAI定义
retriever 可以通过 **ParentDocumentRetriever ** 定义等等。
| ** | 用于连接不同的函数,按顺序多层流水线执行。但需要保证 **每一层仍然必须保证前一层输出是下一层可接受的类型。 |
示例:
chain = RunnableMap({ “context”: lambda x: retriever.get_relevant_documents(x[“question”]), “question”: lambda x: x[“question”] }) | prompt | model | StrOutputParser()
**流程: **
RunnableMap(…) # 输出 dict {“context”: …, “question”: …}
↓
prompt # 需要 dict 输入
↓
model # 需要 string 输入
↓
StrOutputParser() # 需要 string 输入
invoke
在LangchainV0.1之前,不同函数传参方式不一样,例如:
llm.predict(prompt)retriever.get_relevant_documents(query)chain.run(input)
为了方便记忆,在V0.1之后,引入了 Runnable(可运行对象) Interface , 统一了所有组件(LLM、Chain、Retriever、Prompt、OutputParser 等)的调用方式,全部采用 xxx.invoke()方式传参。
**示例1: LLM 调用 **
llm = ChatOpenAI(model=”gpt-3.5-turbo”, temperature=0)
result = llm.invoke(“写一首关于恐龙的短诗”)
**示例2: Prompt + LLM **
prompt = ChatPromptTemplate.from_template(“请用一句话回答:{question}”)
llm = ChatOpenAI(model=”gpt-3.5-turbo”)
| chain = prompt | llm |
result = chain.invoke({“question”: “恐龙为什么灭绝?”})
示例3:retriever
docs = retriever.invoke(“恐龙灭绝的原因”)
for d in docs:
print(d.page_content[:100])
示例4:Runnable
chain = RunnableMap({
"question": lambda x: x["question"],
"docs": lambda x: retriever.invoke(x["question"]),
})
result = chain.invoke({“question”: “恐龙的天敌是什么?”})
总结:**invoke**** 就是 LangChain 的“一键执行”,把输入交给这个组件,让它给你结果。 **