LangChain中的output parsers

这篇具有很好参考价值的文章主要介绍了LangChain中的output parsers。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        生成语言模型由于生成不可控,所以生成的自然语言是非结构话的文本。而prompt的出现使得用户可以将期望的输出文本格式进行约束和规范。LangChain中的output parsers模块可以使模型输出的期望的结构化文本,使用的正是prompt操作。

        LangChain中的output parsers一共有七个,分别是List parser、Datetime parser、Enum parser、Pydantic (JSON) parser、Structured output parser、Retry parser、Auto-fixing parser。前四种parser用于常见的格式输出转换,Structured output parser用于多字段输出时使用,最后的两种是对于格式转换失败之后的修复措施。

List parser

        想要实现一个输出转换器,只要实现两个必要方法和一个可选方法。两个必要方法分别是一个格式说明方法和一个格式解析方法。方法的作用顾名思义,格式说明就是prompt,告诉模型想要的文本格式,一般为字符串形式;格式解析方法就是将模型输出的字符串解析为最终的输出格式。一个可选方法:Parse with prompt,将模型输出和prompt一起输入给模型以修复得到想要输出结构,该方法通常用于重试修复retry parser。

       以list parser为例:

        格式说明的prompt如下,也是比较经典的规范说明+例子的形式给出。

output_parser = CommaSeparatedListOutputParser()

format_instructions = output_parser.get_format_instructions()

print(format_instructions)

>>>Your response should be a list of comma separated values, eg: `foo, bar, baz`

        格式解析方法则更加简单,如下。

def parse(self, text: str) -> List[str]:
    """Parse the output of an LLM call."""
    return text.strip().split(", ")

Structured output parser 

        Structured output parser 可以实现返回多个字段格式,不同于Pydantic (JSON) parser使用诗句结构描述注入指令,该方法是通过纯文本描述字段注入指令完成解析。

        示例方法如下,通过字段描述注入到prompt中生成格式说明,最终模型输出的应该是一个标准的json格式。

from langchain.output_parsers import StructuredOutputParser, ResponseSchema
response_schemas = [
    ResponseSchema(name="answer", description="answer to the user's question"),
    ResponseSchema(name="source", description="source used to answer the user's question, should be a website.")
]

output_parser = StructuredOutputParser.from_response_schemas(response_schemas)
format_instructions = output_parser.get_format_instructions()
print(format_instructions)

>>>The output should be a markdown code snippet formatted in the following schema, including the leading and trailing "```json" and "```":

```json
{
	"answer": string  // answer to the user's question
	"source": string  // source used to answer the user's question, should be a website.
}
```

        而它的parser方法就是将json转化成markdown格式输出。

Auto-fixing parser

        上面的结构解析方法是比较理想状态下的结果,所以LangChain也提供了修复的parser,结构解析失败后会调用另一个LLM模型进行修复。

         下面是重试修复调用的LLM模型的prompt。其中instructions为当前使用parser的prompt,可以通过parser.get_format_instructions()方法得到,completion为第一次调用模型时的输出(即解析失败的输出),error为当前解析报错信息。

NAIVE_FIX = """Instructions:
--------------
{instructions}
--------------
Completion:
--------------
{completion}
--------------

Above, the Completion did not satisfy the constraints given in the Instructions.
Error:
--------------
{error}
--------------

Please try again. Please only respond with an answer that satisfies the constraints laid out in the Instructions:"""

Retry parser

        auto-fixing parser修复的情况是模型输出的结果格式有问题,但是如果模型输出的问题不止是格式,在内容上也有出入的时候,就需要用到Retry parser了。retry parser使用parse_with_prompt进行格式修复重试。其中有两个类RetryOutputParser和RetryWithErrorOutputParser,两者的区别是除了LLM模型的输出文本和parser以外,后者的输入需要传入错误描述参数。

RetryOutputParser的prompt:

"""Prompt:
{prompt}
Completion:
{completion}

Above, the Completion did not satisfy the constraints given in the Prompt.
Please try again:"""

RetryWithErrorOutputParser的prompt: 

 """Prompt:
{prompt}
Completion:
{completion}

Above, the Completion did not satisfy the constraints given in the Prompt.
Details: {error}
Please try again:"""

总结:     

        Langchain的强大之处在于抽象的各种模块,集成的工具api以及设计好的prompt。parser就是通过设计的各种prompt将生成模型的输出变得可控,生成人类或者程序能更好理解的结构化数据。文章来源地址https://www.toymoban.com/news/detail-594151.html

到了这里,关于LangChain中的output parsers的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • langchain ChatGPT AI私有知识库

    原理就是把文档变为向量数据库,然后搜索向量数据库,把相似的数据和问题作为prompt, 输入到大模型,再利用GPT强大的自然语言处理、推理和分析等方面的能力将答案返回给用户 langchain是一个强大的框架,旨在帮助开发人员使用语言模型构建端到端的应用程序。它提供了

    2024年02月11日
    浏览(43)
  • ChatGPT | 使用自己Prompt替换LangChain默认Prompt

    某些场景会要求ChatGPT重复处理同一个操作,要么在问题里面加入Prompt,要么用自己Prompt替换LangChain默认Prompt。 直接看看前后对比结果 LangChain默认的Prompt template=\\\"Use the following pieces of context to answer the users question. nIf you don\\\'t know the answer, just say that you don\\\'t know, don\\\'t try to make up

    2024年02月16日
    浏览(45)
  • 使用langchain+chatGPT搭建自有知识库问答机器人

            自去年年底OpenAI发布ChatGPT以来,大型语言模型在人工智能领域掀起了一股热潮。随后,各家公司纷纷推出自己的大型语言模型,如百度的文心一言、讯飞的星火大模型等。在这个过程中,文本转图片和文本转视频等相关领域也备受关注。然而,很显然,这只是一时的

    2024年02月13日
    浏览(50)
  • 吴恩达ChatGPT《LangChain Chat with Your Data》笔记

    课程地址:https://learn.deeplearning.ai/langchain-chat-with-your-data/lesson/1/introduction 像ChatGPT这样的LLM可以回答很多类型的问题,但是如果仅仅依靠LLM,它只知道训练过的内容,而不知道其他内容,比如个人数据,互联网实时信息等。如果个人用户可以利用LLM与自己的文档进行对话,并

    2024年02月16日
    浏览(44)
  • 吴恩达ChatGPT《LangChain for LLM Application Development》笔记

    基于 LangChain 的 LLM 应用开发 现在,使用 Prompt 可以快速开发一个应用程序,但是一个应用程序可能需要多次写Prompt,并对 LLM 的输出结果进行解析。因此,需要编写很多胶水代码。 Harrison Chase 创建的 LangChain 框架可以简化开发流程。其包含两个包,Python和JavaScript。LangChain 提

    2024年02月12日
    浏览(36)
  • 【ChatGPT】在20分钟内使用 LangChain + Ray构建自托管问答服务

    This is part 3 of a blog series. In this blog, we’ll show you how to build an LLM question and answering service. In future parts, we will optimize the code and measure performance: cost, latency and throughput. 这是博客系列的第 3 部分。在本博客中,我们将向您展示如何构建LLM问答服务。在以后的部分中,我们将优化代码

    2024年02月03日
    浏览(57)
  • 基于Langchain+向量数据库+ChatGPT构建企业级知识库

    ▼最近直播超级多, 预约 保你有收获 近期直播: 《 基于 LLM 大模型的向量数据库企业级应用实践 》  1 — LangChain 是什么? 众所周知 OpenAI 的 API 无法联网的,所以如果只使用自己的功能实现联网搜索并给出回答、总结 PDF 文档、基于某个 Youtube 视频进行问答等等的功能肯定

    2024年02月06日
    浏览(61)
  • 手搓GPT系列之 - chatgpt + langchain 实现一个书本解读机器人

    ChatGPT已经威名远播,关于如何使用大模型来构建应用还处于十分前期的探索阶段。各种基于大模型的应用技术也层出不穷。本文将给大家介绍一款基于大模型的应用框架:langchain。langchain集成了做一个基于大模型应用所需的一切。熟悉java web应用的同学们应该十分熟悉spring

    2024年02月05日
    浏览(46)
  • 【AI大模型应用开发】【LangChain系列】9. 实用技巧:大模型的流式输出在 OpenAI 和 LangChain 中的使用

    大家好,我是同学小张,日常分享AI知识和实战案例 欢迎 点赞 + 关注 👏, 持续学习 , 持续干货输出 。 +v: jasper_8017 一起交流💬,一起进步💪。 微信公众号也可搜【同学小张】 🙏 本站文章一览: 当大模型的返回文字非常多时,返回完整的结果会耗费比较长的时间。如果

    2024年04月09日
    浏览(55)
  • NLP(六十五)LangChain中的重连(retry)机制

      关于LangChain入门,读者可参考文章NLP(五十六)LangChain入门 。   本文将会介绍LangChain中的重连机制,并尝试给出定制化重连方案。   本文以LangChain中的对话功能( ChatOpenAI )为例。 LangChain中的重连机制   查看LangChain中对话功能( ChatOpenAI )的重连机制(retry),

    2024年02月13日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包