【LangChain】序列化(Serialization)--持久化到磁盘

这篇具有很好参考价值的文章主要介绍了【LangChain】序列化(Serialization)--持久化到磁盘。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

LangChain学习文档

  • Chains(链)
    • 【LangChain】不同的调用方式(Different call methods)
    • 【LangChain】自定义chain
    • 【LangChain】调试Chain(Debugging chains)
    • 【LangChain】从LangChainHub加载(Loading from LangChainHub)
    • 【LangChain】添加上下文记忆(Adding memory (state))
    • 【LangChain】序列化(Serialization)–持久化到磁盘

概述

本笔记本介绍了如何将Chain序列化到磁盘从磁盘序列化回来。我们使用的序列化格式是json或yaml。目前,只有部分Chain支持这种类型的序列化。随着时间的推移,我们将增加支持的Chain的数量。

内容

将链保存到磁盘(Saving a chain to disk)

首先,我们来看看如何将Chain保存到磁盘。这可以通过 .save 方法并指定带有 json 或 yaml 扩展名的文件路径来完成。

from langchain import PromptTemplate, OpenAI, LLMChain

template = """Question: {question}

Answer: Let's think step by step."""
prompt = PromptTemplate(template=template, input_variables=["question"])
llm_chain = LLMChain(prompt=prompt, llm=OpenAI(temperature=0), verbose=True)
# 关键点这里
llm_chain.save("llm_chain.json")

现在让我们看看这个保存的文件里面有什么

cat llm_chain.json

结果:

    {
        "memory": null,
        "verbose": true,
        "prompt": {
            "input_variables": [
                "question"
            ],
            "output_parser": null,
            "template": "Question: {question}\n\nAnswer: Let's think step by step.",
            "template_format": "f-string"
        },
        "llm": {
            "model_name": "text-davinci-003",
            "temperature": 0.0,
            "max_tokens": 256,
            "top_p": 1,
            "frequency_penalty": 0,
            "presence_penalty": 0,
            "n": 1,
            "best_of": 1,
            "request_timeout": null,
            "logit_bias": {},
            "_type": "openai"
        },
        "output_key": "text",
        "_type": "llm_chain"
    }

从磁盘中加载Chain(Loading a chain from disk)

我们可以使用 load_chain 方法从磁盘加载Chain

from langchain.chains import load_chain
chain = load_chain("llm_chain.json")
chain.run("whats 2 + 2")

结果:

    > Entering new LLMChain chain...
    Prompt after formatting:
    Question: whats 2 + 2
    
    Answer: Let's think step by step.
    
    > Finished chain.
    ' 2 + 2 = 4'

单独保存组件(Saving components separately)

在上面的例子中,我们可以看到promptllm配置信息与整体Chain保存在同一个json中。或者,我们可以将它们分开并单独保存。这通常有助于使保存的组件更加模块化。为此,我们只需指定 llm_pathPrompt_path

单独对Prompt组件进行保存

# 上面是:llm_chain.save("llm_chain.json")
llm_chain.prompt.save("prompt.json")

打印看结果:

cat prompt.json

    {
        "input_variables": [
            "question"
        ],
        "output_parser": null,
        "template": "Question: {question}\n\nAnswer: Let's think step by step.",
        "template_format": "f-string"
    }

单独对llm进行保存:

llm_chain.llm.save("llm.json")

查看结果:

cat llm.json
    {
        "model_name": "text-davinci-003",
        "temperature": 0.0,
        "max_tokens": 256,
        "top_p": 1,
        "frequency_penalty": 0,
        "presence_penalty": 0,
        "n": 1,
        "best_of": 1,
        "request_timeout": null,
        "logit_bias": {},
        "_type": "openai"
    }

这些独立序列化的组件,该如何组装呢?
就是指定相应组件的文件名

config = {
    "memory": None,
    "verbose": True,
    "prompt_path": "prompt.json",
    "llm_path": "llm.json",
    "output_key": "text",
    "_type": "llm_chain",
}
import json
# 将config编码写入到llm_chain_separate.json文件中
with open("llm_chain_separate.json", "w") as f:
    json.dump(config, f, indent=2)

查看效果:

cat llm_chain_separate.json
    {
      "memory": null,
      "verbose": true,
      "prompt_path": "prompt.json",
      "llm_path": "llm.json",
      "output_key": "text",
      "_type": "llm_chain"
    }

然后我们可以用同样的方式加载它

chain = load_chain("llm_chain_separate.json")

chain.run("whats 2 + 2")

结果:

    > Entering new LLMChain chain...
    Prompt after formatting:
    Question: whats 2 + 2
    
    Answer: Let's think step by step.
    
    > Finished chain.

    ' 2 + 2 = 4'

总结

本文讲述了,如何持久化、从磁盘加载、独立序列化组件、加载独立序列化组件的内容。

  1. 序列化:就是Chain对象调用save()方法。
  2. 从磁盘中加载:就是使用load_chain(),去读取文件,得到Chain对象。
  3. 独立组件序列化:llm_chain.prompt.save()llm_chain.llm.save()
  4. 加载独立序列化组件:
config = {
    "memory": None,
    "verbose": True,
    "prompt_path": "prompt.json",
    "llm_path": "llm.json",
    "output_key": "text",
    "_type": "llm_chain",
}
import json

with open("llm_chain_separate.json", "w") as f:
    json.dump(config, f, indent=2)

参考地址:

Serialization文章来源地址https://www.toymoban.com/news/detail-540793.html

到了这里,关于【LangChain】序列化(Serialization)--持久化到磁盘的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【序列化与反序列化】关于序列化与反序列化MessagePack的实践

    在进行序列化操作之前,我们还对系统进行压测,通过 jvisualvm 分析cpu,线程,垃圾回收情况等;运用火焰图 async-profiler 分析系统性能,找出程序中占用CPU资源时间最长的代码块。 代码放置GitHub:https://github.com/nateshao/leetcode/tree/main/source-code/src/main/java/com/nateshao/source/code/ser

    2024年02月11日
    浏览(56)
  • 【网络】序列化反序列化

    在前文《网络编程套接字》中,我们实现了服务器与客户端之间的字符串通信,这是非常简单的通信,在实际使用的过程中,网络需要传输的不仅仅是字符串,更多的是结构化的数据(类似于 class , struct 类似的数据)。 那么我们应该怎么发送这些结构化的数据呢? 如果我们

    2024年02月05日
    浏览(42)
  • 序列化,反序列化之实例

    介绍文章 __construct() 当一个对象创建时自动调用 __destruct() 当对象被销毁时自动调用 (php绝大多数情况下会自动调用销毁对象) __sleep() 使**用serialize()函数时触发 __wakeup 使用unserialse()**函数时会自动调用 __toString 当一个对象被当作一个字符串被调用 __call() 在对象上下文中调用不

    2024年02月14日
    浏览(45)
  • Qt 对象序列化/反序列化

    阅读本文大概需要 3 分钟 日常开发过程中,避免不了对象序列化和反序列化,如果你使用 Qt 进行开发,那么有一种方法实现起来非常简单和容易。 我们知道 Qt 的元对象系统非常强大,基于此属性我们可以实现对象的序列化和反序列化操作。 比如有一个学生类,包含以下几

    2024年02月13日
    浏览(41)
  • 协议,序列化,反序列化,Json

    协议究竟是什么呢?首先得知道主机之间的网络通信交互的是什么数据,像平时使用聊天APP聊天可以清楚,用户看到的不仅仅是聊天的文字,还能够看到用户的头像昵称等其他属性。也就可以证明网络通信不仅仅是交互字符串那么简单。事实上网络通信还可能会通过一个结构

    2024年02月13日
    浏览(39)
  • 【网络】协议定制+序列化/反序列化

    如果光看定义很难理解序列化的意义,那么我们可以从另一个角度来推导出什么是序列化, 那么究竟序列化的目的是什么? 其实序列化最终的目的是为了对象可以 跨平台存储,和进行网络传输 。而我们进行跨平台存储和网络传输的方式就是IO,而我们的IO支持的数据格式就是

    2024年02月08日
    浏览(41)
  • 【Linux】序列化与反序列化

    目录 前言 什么是应用层? 再谈\\\"协议\\\"  什么是序列化和反序列化 网络版计算器 整体流程实现 Sock.hpp的实现 TcpServer.hpp的实现 Protocol.hpp的实现 CalServer.cc的编写 CalClient.cc的编写 整体代码           本章是属于TCP/UDP四层模型中的第一层 应用层 相关的内容。主要介绍了序列

    2024年02月10日
    浏览(40)
  • Spring Boot 序列化、反序列化

    在软件开发中,序列化和反序列化是一种将对象转换为字节流以便存储或传输的机制。序列化将对象转换为字节流,而反序列化则将字节流转换为对象。序列化和反序列化在许多应用场景中都起着重要的作用,比如在网络通信中传输对象、将对象存储到数据库中、实现分布式

    2024年02月15日
    浏览(40)
  • jackson自定义序列化反序列化

    自定义序列化 序列化主要作用在返回数据的时候 以BigDecimal统一返回3位小数为例 自定义序列化处理类 继承jackson的 JsonSerializer 类,重写 serialize 方法 使用的时候,可以直接使用Jackson的 @JsonSerialize 注解 自定义反序列化 接收前端传入数据 继承 JsonDeserializer 类,重写 deserializ

    2024年02月13日
    浏览(44)
  • Java序列化和反序列化

    目录 一、序列化和反序列化 二、Java序列化演示 三、反序列化漏洞 1、含义 ​序列化就是内存中的对象写入到IO流中,保存的格式可以是二进制或者文本内容。反序列化就是IO流还原成对象。 2、用途 (1)传输网络对象 (2)保存Session 1、序列化 java.io.ObjectOutputStream代表对象

    2023年04月25日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包