赞
踩
【2024最全最细Langchain教程-4 】Langchain模型I/O之提示Prompt(二)-CSDN博客
之前我们提过,我们使用的聊天包装器输出的是一个AIMessage类型的消息体,而我们在组建chain链的时候,往往需要输出str或者其他格式的输出,因此这里会引入输出解析器的概念,它的作用把langchain的输出进行格式转化,我们来看代码,这里StrOutputParser就是我们引入的输出解析器,它把原来的AIMessage输出成为str :
- import langchain
- import os
-
- from langchain_openai import ChatOpenAI
- from langchain_core.prompts import ChatPromptTemplate
- from langchain_core.output_parsers import StrOutputParser
-
- api_key = os.getenv("OPENAI_API_KEY")
-
- llm = ChatOpenAI(
- openai_api_key=api_key,
- temperature=0.9,
- base_url = "https://apejhvxcd.cloud.sealos.io/v1"
- )
-
- prompt = ChatPromptTemplate.from_messages([
- ("system", "你是一个中国历史专家."),
- ("user", "{input}")
- ])
-
- output_parser = StrOutputParser()
-
- chain = prompt | llm | output_parser
-
- response = chain.invoke({"input":"简单介绍一下宋朝的历史"})
- print(response,type(response))
我们来看这个链调用的输出结果的类型,是一个str:
你可以对llm模型进行函数绑定和控制,这里我们给一个最简单的示例,在上面代码的基础上给llm模型加一个绑定和限制,如下图:
- llm2 = ChatOpenAI(
- openai_api_key=api_key,
- temperature=0.9,
- base_url = "https://apejhvxcd.cloud.sealos.io/v1"
- )
-
- prompt2 = ChatPromptTemplate.from_messages([
- ("system", "你是一个中国历史专家."),
- ("user", "{input}")
- ])
-
- output_parser = StrOutputParser()
-
- chain2 = prompt2 | llm2.bind(stop=["\n"]) | output_parser
-
- chain2.invoke({"input":"简单介绍一下宋朝的历史"})
这个绑定的意思是说,当模型的输出遇到换行符(“\n”)就停止不再输出了,加上这个之后我们可以看到同样的问题,模型返回的结果被处理截短了:
llm模型还可以绑定函数,以对模型进行更复杂的处理,这个我们后面在更复杂的案例里再介绍。
这两节课上,我们已经看到了一种langchain最推荐、也是最简单的组链方式,我们来看另外一种组链的方式,这种方式也可以实现,但是不太推荐,这是因为这种组链方式如果在复杂链和复合链的构造时,修改起来会比较麻烦,但是我们也需要知道有其他的组链方式:
- import langchain
- import os
-
- from langchain_openai import ChatOpenAI
- from langchain.chains import LLMChain
- from langchain.prompts import PromptTemplate
- from langchain_core.prompts import ChatPromptTemplate
- from langchain_core.output_parsers import StrOutputParser
-
- api_key = os.getenv("OPENAI_API_KEY")
-
- llm = ChatOpenAI(
- openai_api_key=api_key,
- temperature=0.9,
- base_url = "https://apejhvxcd.cloud.sealos.io/v1"
- )
-
- prompt = (
- ChatPromptTemplate.from_template("Tell me a joke about {topic}")
- + ", make it funny"
- + "\n\n and in {language}"
-
- # PromptTemplate.from_template("Tell me a joke about {topic}")
- # + ", make it funny"
- # + "\n\n and in {language}"
- )
-
- # print(prompt)
-
- output_parser = StrOutputParser()
-
- #这种chain的组装方式是老的方式,不太推荐,推荐用新的 | 组装chain
- chain = LLMChain(llm=llm, prompt=prompt, output_parser=output_parser)
-
- print(chain.invoke({"topic":"历史", "language":"chinese"}))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。