文件名 Langchain.md

Langchain

本文目录

正文

这里会介绍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 的“一键执行”,把输入交给这个组件,让它给你结果。 **