【2024最全最细Langchain教程-5 】Langchain模型I/O之输出解析器

【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"}))

项目git地址:https://github.com/jerry1900/jupyter

项目视频地址:【2024最全最细】langchain之输出解析器_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值