LangChain之链的应用(下)

LangChain之链的应用

  • Chain链的应用
  • 配置
  • LLMChain:简单链
  • create_stuff_documents_chain:文档链
  • create_extraction_chain:提取信息链
  • LLMMathChain:数学链
  • create_sql_query_chain:SQL查询链
    • 连接数据库
    • 创建并使用链
  • Sequential Chain:顺序链
    • 创建多个链
    • 合并链
    • 测试顺序链
  • LLMRouterChain:路由链
    • 构建提示模板
    • 构建目标链
    • 构建路由链
    • 构建默认链
    • 构建多提示链
    • 测试路由链

Chain链的应用

LangChain根据功能、用途的不同,提供了大量的Chain链,以下是一些Chain链的使用示例。

配置

配置OpenAI的环境变量信息,指定URL、KEY

import osos.environ["OPENAI_BASE_URL"] = "https://xxxx.com/v1"
os.environ["OPENAI_API_KEY"] = "sk-BGFnOL9Q4c99B378B66cT3BlBKFJ28839b4813bc437B82c2"

LLMChain:简单链

LLMChain是最基础也是最常见的链。LLMChain结合了语言模型推理功能,并添加了PromptTemplate和Output Parser等功能,将模型输入输出整合在一个链中操作。它利用提示模板格式化输入,将格式化后的字符串传递给LLM模型,并返回LLM的输出。这样使得整个处理过程更加高效和便捷。

from langchain.chains.llm import LLMChain
from langchain_core.prompts import PromptTemplate
from langchain_openai import OpenAI# 原始字符串模板
template = "猪八戒吃{fruit}?"
# 创建模型实例
llm = OpenAI(temperature=0)
# 创建LLMChain
llm_chain = LLMChain(llm=llm,prompt=PromptTemplate.from_template(template))
# 调用LLMChain,返回结果
result = llm_chain.invoke({"fruit": "人参果"})
print(result)

create_stuff_documents_chain:文档链

create_stuff_documents_chain链将获取文档列表并将它们全部格式化为提示(文档列表),然后将该提示传递给LLM。

注意:

它会传递所有文档,因此需要确保它适合LLM的上下文窗口。

from langchain_openai import ChatOpenAI
from langchain_core.documents import Document
from langchain_core.prompts import ChatPromptTemplate
from langchain.chains.combine_documents import create_stuff_documents_chain# 创建提示模板
prompt = ChatPromptTemplate.from_messages([("system", """根据提供的上下文: {context} \n\n 回答问题: {input}""")]
)# 初始化大模型
llm = ChatOpenAI(model="gpt-3.5-turbo")# 构建链
chain = create_stuff_documents_chain(llm, prompt)# 定义文档内容
docs = [Document(page_content="杰西喜欢红色,但不喜欢黄色"),Document(page_content="贾马尔喜欢绿色,有一点喜欢红色"),Document(page_content="玛丽喜欢粉色和红色")
]# 执行链
res = chain.invoke({"input": "大家喜欢什么颜色?", "context": docs})
print(res)
杰西喜欢红色,贾马尔喜欢绿色和有一点红色,玛丽喜欢粉色和红色。

create_extraction_chain:提取信息链

create_extraction_chain是一个从文章、段落中提取信息的链。

使用OpenAI函数调用从文本中提取信息,定义一个模式,指定从LLM输出中提取的属性,然后使用create_extraction_chain和OpenAI函数调用来提取所需模式。

from langchain.chains import create_extraction_chain
from langchain_openai import ChatOpenAI# 模式
schema = {# 人的属性"properties": {"name": {"type": "string"},"height": {"type": "integer"},"hair_color": {"type": "string"},},# 允许模型只返回的属性"required": ["name", "height"],
}# 输入
inp = """亚历克斯身高 5 英尺。克劳迪娅比亚历克斯高 1 英尺,并且跳得比他更高。克劳迪娅是黑发女郎,亚历克斯是金发女郎。"""# 初始化大模型
llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo")
# 构建链
chain = create_extraction_chain(schema, llm)
# 执行
res = chain.invoke(inp)
print(res)

执行日志:

{'input': '亚历克斯身高 5 英尺。克劳迪娅比亚历克斯高 1 英尺,并且跳得比他更高。克劳迪娅是黑发女郎,亚历克斯是金发女郎。', 
'text': [
{'name': '亚历克斯', 'height': 5}, 
{'name': '克劳迪娅', 'height': 1, 'hair_color': '黑发'}
]}

LLMMathChain:数学链

LLMMathChain将用户问题转换为数学问题,然后将数学问题转换为可以使用 Python 的 numexpr 库执行的表达式。使用运行此代码的输出来回答问题

使用LLMMathChain,需要安装numexpr库:

pip install numexpr
from langchain_openai import OpenAI
from langchain.chains import LLMMathChain# 初始化大模型
llm = OpenAI()# 创建链
llm_math = LLMMathChain.from_llm(llm)# 执行链
res = llm_math.invoke("100 * 20 + 100的结果是多少?")
print(res)

执行日志:

{'question': '100 * 20 + 100的结果是多少?', 'answer': 'Answer: 2100'}

create_sql_query_chain:SQL查询链

create_sql_query_chain是创建生成SQL查询的链,用于将自然语言转换成数据库的SQL查询。

连接数据库

SQLDatabaseChain 可与 SQLAlchemy 支持的任何 SQL 方言一起使用,例如 MS SQL、MySQL、MariaDB、PostgreSQL、Oracle SQL、Databricks 和 SQLite。

这里使用MySQL数据库,需要安装pymysql

pip install pymysql
from langchain_community.utilities import SQLDatabase# 连接 sqlite 数据库
# db = SQLDatabase.from_uri("sqlite:///demo.db")# 连接 MySQL 数据库
db_user = "root"
db_password = "12345678"
db_host = "IP"
db_port = "3306"
db_name = "demo"
db = SQLDatabase.from_uri(f"mysql+pymysql://{db_user}:{db_password}@{db_host}:{db_port}/{db_name}")print("数据库方言:",db.dialect)
print("获取数据表:",db.get_usable_table_names())
# 执行查询
res = db.run("SELECT count(*) FROM tb_users;")
print("查询结果:",res)
数据库方言: mysql
获取数据表: ['tb_orders', 'tb_users']
查询结果: [(5,)]

创建并使用链

初始化语言模型并构建链

from langchain_openai import ChatOpenAI
# 初始化大模型
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)chain = create_sql_query_chain(llm=llm, db=db)response = chain.invoke({"question": "数据表tb_users中有多少用户?"})
print(response)

执行结果如下:

SELECT COUNT(`id`) AS total_users FROM `tb_users`;

Sequential Chain:顺序链

一条链的输出直接馈送到下一条链的链

创建多个链

创建多个LLMChain链

# 导入所需要的库
from langchain.chains.llm import LLMChain
from langchain_core.prompts import PromptTemplate# 初始化语言模型
from langchain_openai import OpenAI
llm = OpenAI()# 创建第一个LLMChain:生成小说人物的概述
template = """
你是一名小说文学家,请你根据小说名称与人物,为小说人物写一个100字左右的概述。
小说: {book}
人物: {name}
小说人物的概述:
"""
# 创建模板实例
prompt_template = PromptTemplate(input_variables=["book", "name"],template=template
)
# 使用LLMChain
description_chain = LLMChain(llm=llm,prompt=prompt_template,output_key="description"
)# 创建第二个LLMChain:根据小说人物的概述写出人物评论
template = """
你是一位文学评论家,请你根据小说人物的概述,写一篇100字左右的评论。
小说人物概述: {description}
小说人物的评论:
"""
prompt_template = PromptTemplate(input_variables=["description"],template=template
)
comments_chain = LLMChain(llm=llm,prompt=prompt_template,output_key="comments"
)# 创建第三个LLMChain:根据小说人物的概述和评论写一篇宣传广告
template = """
你是一名广告策划师,请根据小说人物的概述与评论写一篇宣传广告,字数50字左右。
小说人物概述: {description}
小说人物的评论: {comments}
宣传广告:
"""
prompt_template = PromptTemplate(input_variables=["description", "comments"],template=template
)
promotionalAd_chain = LLMChain(llm=llm,prompt=prompt_template,output_key="promotionalAd"
)

合并链

使用SequentialChain,将三个链合并,按顺序运行三个链

from langchain.chains.sequential import SequentialChainoverall_chain = SequentialChain(chains=[description_chain, comments_chain, promotionalAd_chain],input_variables=["book", "name"],output_variables=["description", "comments", "promotionalAd"],verbose=True
)

测试顺序链

运行链并打印结果

result = overall_chain.invoke({"book": "西游记","name": "猪八戒"
})
print(result)

在这里插入图片描述

LLMRouterChain:路由链

针对场景,可以构建不同的目标链。LangChain通过LLMRouterChain来自动引导大语言模型选择不同的模板,以应对不同类型的问题。

LLMRouterChain又称路由链,具备动态选择适用于特定输入的下一个链的能力。它能够根据用户提出的问题内容,自动确定最适合处理该问题的模板,并将问题发送至相应模板进行回答。如果问题不匹配任何预定义的处理模板,系统将将其发送至默认链进行处理。

构建提示模板

假设有2种场景:

1.询问小说人物角色信息2.询问小说人物角色性格特征

然后分别对应场景构建两个提示信息的模板

# 构建两个场景的模板
hobby_template = """
你是一名小说文学家,非常熟悉小说西游记,知晓小说人物的爱好信息。
问题: {input}
"""nature_template = """
你是一名小说文学家,非常熟悉小说西游记,知晓小说人物的性格特征。
问题: {input}
"""# 构建提示信息
prompt_list = [{"id": "hobby","description": "回答关于小说人物的爱好信息问题","template": hobby_template,},{"id": "nature","description": "回答关于小说人物的性格特征问题","template": nature_template,}
]

构建目标链

循环构建提示信息列表prompt_list,构建目标链,分别负责处理不同的场景问题。

from langchain.chains.llm import LLMChain
from langchain.prompts import PromptTemplate# 初始化语言模型
from langchain_openai import OpenAI
llm = OpenAI()chain_map = {}for template in prompt_list:prompt = PromptTemplate(template=template['template'],input_variables=["input"])print("目标链提示: ", prompt)chain = LLMChain(llm=llm,prompt=prompt,verbose=True)chain_map[template["id"]] = chain
目标链提示:  input_variables=['input'] template='\n你是一名小说文学家,非常熟悉小说西游记,知晓小说人物的爱好信息。\n问题: {input}\n'
目标链提示:  input_variables=['input'] template='\n你是一名小说文学家,非常熟悉小说西游记,知晓小说人物的性格特征。\n问题: {input}\n'

构建路由链

构建路由链,负责查看用户输入的问题,确定问题的类型。

from langchain.chains.router.llm_router import LLMRouterChain, RouterOutputParser
from langchain.chains.router.multi_prompt_prompt import MULTI_PROMPT_ROUTER_TEMPLATE as RounterTemplate# destinations = [f"{p['id']}: {p['description']}" for p in prompt_list]
destinations = []
for p in prompt_list:destination = f"{p['id']}: {p['description']}"destinations.append(destination)# 将列表中的元素以换行符分隔的形式组合成一个长字符串
router_template = RounterTemplate.format(destinations="\n".join(destinations))
print("路由链模板: ", router_template)router_prompt = PromptTemplate(template=router_template,input_variables=["input"],output_parser=RouterOutputParser(),
)
print("路由链提示: ", router_prompt)router_chain = LLMRouterChain.from_llm(llm,router_prompt,verbose=True
)

执行日志:

路由链模板:  Given a raw text input to a language model select the model prompt best suited for the input. You will be given the names of the available prompts and a description of what the prompt is best suited for. You may also revise the original input if you think that revising it will ultimately lead to a better response from the language model.<< FORMATTING >>
Return a markdown code snippet with a JSON object formatted to look like:
```json
{{"destination": string \ name of the prompt to use or "DEFAULT""next_inputs": string \ a potentially modified version of the original input
}}
``REMEMBER: "destination" MUST be one of the candidate prompt names specified below OR it can be "DEFAULT" if the input is not well suited for any of the candidate prompts.
REMEMBER: "next_inputs" can just be the original input if you don't think any modifications are needed.<< CANDIDATE PROMPTS >>
hobby: 回答关于小说人物的爱好信息问题
nature: 回答关于小说人物的性格特征问题<< INPUT >>
{input}<< OUTPUT (must include ```json at the start of the response) >>
<< OUTPUT (must end with ```) >>路由链提示:  input_variables=['input'] output_parser=RouterOutputParser() template='Given a raw text input to a language model select the model prompt best suited for the input. You will be given the names of the available prompts and a description of what the prompt is best suited for. You may also revise the original input if you think that revising it will ultimately lead to a better response from the language model.\n\n<< FORMATTING >>\nReturn a markdown code snippet with a JSON object formatted to look like:\n```json\n{{\n    "destination": string \\ name of the prompt to use or "DEFAULT"\n    "next_inputs": string \\ a potentially modified version of the original input\n}}\n```\n\nREMEMBER: "destination" MUST be one of the candidate prompt names specified below OR it can be "DEFAULT" if the input is not well suited for any of the candidate prompts.\nREMEMBER: "next_inputs" can just be the original input if you don\'t think any modifications are needed.\n\n<< CANDIDATE PROMPTS >>\nhobby: 回答关于小说人物的爱好信息问题\nnature: 回答关于小说人物的性格特征问题\n\n<< INPUT >>\n{input}\n\n<< OUTPUT (must include ```json at the start of the response) >>\n<< OUTPUT (must end with ```) >>\n'

构建默认链

如果路由链没有找到适合的链,就以默认链进行处理。

from langchain.chains.conversation.base import ConversationChaindefault_chain = ConversationChain(llm=llm,output_key="text",verbose=True
)

构建多提示链

MultiPromptChain类是一个多路选择链,它使用一个LLM路由器链在多个提示之间进行选择。这里使用MultiPromptChain类把多个链整合在一起,实现路由功能。

from langchain.chains.router import MultiPromptChainchain = MultiPromptChain(router_chain=router_chain, # 用于决定目标链和其输入的链destination_chains=chain_map, # 将名称映射到可以将输入路由到的候选链default_chain=default_chain, # 默认链,一个备选方案verbose=True # 输出时是否显示链的开始和结束日志
)

测试路由链

测试1

print(chain.invoke({"input": "猪八戒的性格是怎样的?"}))
``
```python
> Entering new MultiPromptChain chain...
> Entering new LLMRouterChain chain...
> Finished chain.
nature: {'input': '猪八戒'}> Entering new LLMChain chain...
Prompt after formatting:你是一名小说文学家,非常熟悉小说西游记,知晓小说人物的性格特征。
问题: 猪八戒> Finished chain.> Finished chain.
{'input': '猪八戒', 'text': '猪八戒是一个贪吃、懒惰、贪财的人物。他喜欢吃各种美食,尤其是猪肉,经常偷懒,爱睡觉,对于任务不太认真负责,也容易被诱惑,但是同时也有一颗善良的心,对待朋友和师父都很忠诚,有时候也会表现出勇敢和机智的一面。他的性格特点给西游记带来了很多欢乐和搞笑的情节。'}

测试2

print(chain.invoke({"input": "猪八戒喜欢什么?"}))
> Entering new MultiPromptChain chain...
> Entering new LLMRouterChain chain...
> Finished chain.
hobby: {'input': '猪八戒'}> Entering new LLMChain chain...
Prompt after formatting:你是一名小说文学家,非常熟悉小说西游记,知晓小说人物的爱好信息。
问题: 猪八戒> Finished chain.> Finished chain.
{'input': '猪八戒', 'text': '猪八戒是《西游记》中的主要角色之一,他是一头形貌丑陋、贪吃懒惰的猪妖,原名八戒,后被观音菩萨改名为猪八戒。他喜欢吃喝玩乐,贪图享受,经常偷懒逃避打坐修炼,但也有时候会表现出勇敢和善良的一面。他的武器是铁扇子,擅长变化法术。猪八戒最爱的就是吃,尤其是腊肉、酒和水果,经常被孙悟空和唐僧教训。他的性格幽默诙谐,经常说些搞笑的话,是《西游记》中最受欢迎的'}

测试3

print(chain.invoke({"input": "如何提升编程技能?"}))
> Entering new MultiPromptChain chain...
> Entering new LLMRouterChain chain...
> Finished chain.
None: {'input': '如何提升编程技能?'}> Entering new ConversationChain chain...
Prompt after formatting:
The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know.Current conversation:Human: 如何提升编程技能?
AI:> Finished chain.> Finished chain.
{'input': '如何提升编程技能?', 'history': '', 'text': ' 提升编程技能的最佳方法是不断练习和学习。首先,您可以通过阅读相关的编程书籍和教程来学习基础知识。然后,您可以尝试解决一些挑战性的编程问题,这样可以帮助您加强对编程语言的理解。除此之外,参与开源项目和与其他程序员交流也是提升编程技能的有效方式。另外,保持好奇心和学习新技术也是非常重要的。最重要的是,坚持不懈地练习和学习,您的编程技能一定会得到提升。'}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/18044.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

K210 数字识别 教程

一、烧写固件 连接k210开发板&#xff0c;点开烧录固件工具&#xff0c;选中固件&#xff0c;并下载 二、模型训练 网站&#xff1a;MaixHub 1、上传文件 2、开始标记数据 添加9个标签&#xff0c;命名为1~9&#xff0c;按键盘w开始标记&#xff0c;键盘D可以下一张图片&…

计算机网络(1

网络初识 目录 网络初识一. 网络分类1. 局域网LAN(Local Area Network):2. 广域网WAN(Wide Area Network): 二. 组建网络的基础设备1. 路由器2. 交换机 三. 标识符 协议 (protocol)一. 协议分层1. 分层的好处2. OSI七层分层3. TCP/IP五层模型(或四层) 模型(1. 物理层(可不算)(2…

Windows hook介绍与代码演示

Windows Hook 是一种机制&#xff0c;允许应用程序监视系统或处理特定事件。它可以拦截和更改消息&#xff0c;甚至可以插入到其他应用程序的消息处理机制中。Windows 提供了多种挂钩类型&#xff0c;例如键盘挂钩、鼠标挂钩、消息挂钩等。 hook代码实现 下面是一个使用 Wind…

OS复习笔记ch7-1

存储的基本管理需求 重定位 重定位(Relocation)&#xff1a;需要解决可执行文件中地址&#xff08;指令和数据&#xff09;和内存地址的对应。 一般有两种比较常见的重定位方式&#xff1a; 静态重定位(static relocation)&#xff1a;当程序被装入内存时&#xff0c;一次性…

【头歌】计算机网络DHCP服务器配置第四关配置路由器子接口答案

头歌计算机网络DHCP服务器配置第四关配置路由器子接口操作步骤 任务描述 本关任务&#xff1a;配置路由器的子接口。 操作要求 在第一关的拓扑图的基础上&#xff0c;配置路由器及 PC 机&#xff0c;具体要求如下&#xff1a; 1、打开路由器物理接口 F0/0 &#xff1b; 2、配置…

NSSCTF中的pop、babyupload、cve版本签到、奇妙的MD5、easy_html

目录 [SWPUCTF 2021 新生赛]pop [NISACTF 2022]babyupload ​编辑[GKCTF 2020]cve版签到 [SWP5UCTF 2022 新生赛]奇妙的MD5 [HNCTF 2022 Week1]easy_html 今日总结&#xff1a; [SWPUCTF 2021 新生赛]pop 1.代码审计 <?phperror_reporting(0); show_source("…

装机必备——360压缩安装教程

装机必备——360压缩安装教程 软件下载 软件名称&#xff1a;360压缩 软件语言&#xff1a;简体中文 软件大小&#xff1a;3.38M 系统要求&#xff1a;Windows7或更高&#xff0c; 32/64位操作系统 硬件要求&#xff1a;CPU2GHz &#xff0c;RAM4G或更高 下载通道①迅雷云盘丨…

DINO结构中的exponential moving average (ema)和stop-gradient (sg)

DINO思路介绍 在 DINO 中&#xff0c;教师和学生网络分别预测一个一维的嵌入。为了训练学生模型&#xff0c;我们需要选取一个损失函数&#xff0c;不断地让学生的输出向教师的输出靠近。softmax 结合交叉熵损失函数是一种常用的做法&#xff0c;来让学生模型的输出与教师模型的…

Docker安装Oracle11g数据库

操作系统&#xff1a;centOS9使用此方法检查是否安装Docker&#xff1a;docker --help&#xff0c;如果有帮助文件则证明安装成功使用此语句检查Docker是否正在运行&#xff1a;docker images&#xff0c;实际上是查看本地镜像如果发现未运行则开启Docker&#xff1a;systemctl…

MyCat2之安装与配置文件介绍

安装 1.新建文件夹tools mkdir tools&#xff0c;并进入tools 2.下载MaCat wget http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.21.zip wget http://dl.mycat.org.cn/2.0/1.21-release/mycat2-1.21-release-jar-with-dependencies.jar 3.解压zip u…

怎样打造一份个性化画册呢?我来教你

在这个数字化的时代&#xff0c;传统的照片已经不能满足我们对个性化回忆的需求。个性化画册&#xff0c;不仅能够承载我们的记忆&#xff0c;还能展现自我风格。今天&#xff0c;就让我来教你如何打造一份属于自己的个性化画册。 1.要制作电子杂志,首先需要选择一款适合自己的…

kafka3.6.1版本学习

kafka目录结构 bin linux系统下可执行脚本文件 bin/windows windows系统下可执行脚本文件 config 配置文件 libs 依赖类库 licenses 许可信息 site-docs 文档 logs 服务日志 启动ZooKeeper 进入Kafka解压缩文件夹的config目录&#xff0c;修改zookeeper.properties配置文件 #t…

【吊打面试官系列】Java高并发篇 - Java 死锁以及如何避免?

大家好&#xff0c;我是锋哥。今天分享关于 【Java 死锁以及如何避免&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; Java 死锁以及如何避免&#xff1f; Java 中的死锁是一种编程情况&#xff0c;其中两个或多个线程被永久阻塞&#xff0c;Java 死锁情况出现至…

【每日刷题】Day50

【每日刷题】Day50 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 654. 最大二叉树 - 力扣&#xff08;LeetCode&#xff09; 2. 119. 杨辉三角 II - 力扣&#xff08…

MATLAB system identification系统辨识app的使用

系统辨识 前言系统辨识第一步 选取时域数据到app第二步 分割数据第三步 设置传递函数的参数第四步 Estimate第五步 结束 前言 接上节&#xff1a;simulink-仿真以及PID参数整定 系统模型的辨识工作&#xff0c;在控制领域&#xff0c;一般用于开发控制器的先手工作。一般而言…

调整图片和表格尺寸的命令:resizebox

\resizebox 是 LaTeX 中的一个命令&#xff0c;用于调整插入的内容&#xff08;如图像、表格、文本等&#xff09;的大小。它的语法如下&#xff1a; \resizebox{<width>}{<height>}{<content>}其中&#xff1a; <width> 和 <height> 分别表示…

IDEA提示Untrusted Server‘s certificate

如果你用的是Intellij系列IDE&#xff08;GoLand, PHPStorm, WebStorm, IDEA&#xff09;&#xff0c;突然弹出个提示『Untrusted Servers certificate 』 莫慌&#xff0c;这是因为你用了破解版的 IDE&#xff0c;破解过程中有个hosts绑定的操作&#xff1a; 0.0.0.0 account.…

代数拓扑学

啊&#xff0c;哈喽&#xff0c;小伙伴们大家好。我是#张亿&#xff0c;今天呐&#xff0c;学的是代数拓扑学 代数拓扑学是拓扑学中主要依赖 [1]代数工具来解决问题的一个分支。同调与同伦的理论是代数拓扑学的两大支柱&#xff08;见同调论&#xff0c;同伦论&#xff09;。 …

K8s集群调度续章

目录 一、污点&#xff08;Taint&#xff09; 1、污点&#xff08;Taint&#xff09; 2、污点组成格式 3、当前taint effect支持如下三个选项&#xff1a; 4、查看node节点上的污点 5、设置污点 6、清除污点 7、示例一 查看pod状态&#xff0c;模拟驱逐node02上的pod …

消费增值的真面目!绿色积分的合理运用!

各位朋友&#xff0c;大家好&#xff01;我是吴军&#xff0c;来自一家备受瞩目的软件开发企业&#xff0c;担任产品经理一职。今天&#xff0c;我非常荣幸能有机会与大家分享一种在市场上备受瞩目的新型商业模式——消费增值模式。 随着环保和可持续发展理念日益深入人心&…