LangChain之各个输出解析器的使用

Model I/O

在LangChain中,Model I/O被称为:模型的输入与输出,其有输入提示(Format)调用模型(Predict)输出解析(Parse)等三部分组成。

makefile
复制代码
1.提示模板: LangChain的模板允许动态选择输入,根据实际需求调整输入内容,适用于各种特定任务和应用。2.语言模型: LangChain 提供通用接口调用不同类型的语言模型,提升了灵活性和使用便利性。3.输出解析: 利用 LangChain 的输出解析功能,精准提取模型输出中所需信息,避免处理冗余数据,同时将非结构化文本转换为可处理的结构化数据,提高信息处理效率。

在这里插入图片描述

输出解析器

概述

在LangChain的Model I/O中,输出解析器是其组成之一,这里也主要申明记录输出解析(Parse)的使用。

输出解析器负责获取 LLM 的输出并将其转换为更合适的格式。借助LangChain的输出解析器重构程序,使模型能够生成结构化回应,并可以直接解析这些回应

结构

输出解析器是专用于处理和构建语言模型响应的类。一个基本输出解析器类通常需要实现两个核心方法:

python
复制代码
get_format_instructions:返回指导如何格式化语言模型输出的字符串,指导如何构建和组织回答。parse:接受一个字符串(语言模型输出),将其解析为特定的数据结构或格式。parse_with_prompt:可选方法,接受一个字符串(语言模型输出)和一个提示(生成输出的提示),将其解析为特定数据结构。

OutputParser输出解析器结构如下:

python
复制代码
class OutputParser:def __init__(self):passdef get_format_instructions(self):# 返回一个字符串,指导如何格式化模型的输出passdef parse(self, model_output):# 解析模型的输出,转换为某种数据结构或格式passdef parse_with_prompt(self, model_output, prompt):# 基于原始提示解析模型的输出,转换为某种数据结构或格式pass

类型​

LangChain有许多不同类型的输出解析器

名称类名描述
CSV解析器)CommaSeparatedListOutputParser模型的输出以逗号分隔,以列表形式返回输出
日期时间解析器DatetimeOutputParser可用于将 LLM 输出解析为日期时间格式
枚举解析器EnumOutputParser用于处理预定义的一组值,确保模型的输出在这些预定义值之中
JSON解析器JsonOutputParser确保输出符合特定JSON对象格式。利用Pydantic库,解析器能验证数据并构建复杂数据模型,以确保输出符合预期数据模型。
OpenAI函数中的解析器JsonOutputFunctionsParser PydanticOutputFunctionsParser JsonKeyOutputFunctionsParser PydanticAttrOutputFunctionsParser使用OpenAI函数调用来结构化其输出。只能与支持函数调用的模型一起使用
OpenAI工具中的解析JsonOutputToolsParser JsonOutputKeyToolsParser PydanticToolsParser从 OpenAI 的函数调用 API 响应中提取工具调用。只能用于支持函数调用的模型
自动修复解析器OutputFixingParser输出解析器包装了另一个输出解析器,如果第一个解析器失败,它会调用另一个LLM来修复任何错误。
Pandas DataFrame解析器PandasDataFrameOutputParser允许用户指定任意的Pandas DataFrame,并查询LLMs以获取以格式化字典形式提取数据的数据
Pydantic解析器PydanticOutputParser允许指定任意的Pydantic模型并查询LLM以获得符合该架构的输出。
重试解析器OutputFixingParser在模型的初次输出不符合预期时,尝试修复或重新生成新的输出
结构化输出解析器StructuredOutputParser用于处理复杂的、结构化的输出。当应用需要模型生成具有特定结构的复杂回答时,可使用结构化输出解析器来实现
XML解析器XMLOutputParser允许以流行的XML格式从LLM获取结果
YAML解析器YamlOutputParser器允许指定任意的模式,并查询兼容该模式的LLMs输出,使用YAML格式化响应。

各个输出解析器的基本使用

设置环境变量

python
复制代码
import os
os.environ["OPENAI_BASE_URL"] = "https://xxx.com/v1"
os.environ["OPENAI_API_KEY"] = "sk-fDqouTlU62yjkBhF46284543Dc8f42438a9529Df74B4Ce65"

CSV解析器

使用一个简单的方法来解析逗号分隔值的列表。

python
复制代码
from langchain_core.prompts import PromptTemplate
from langchain_openai import OpenAI# 初始化语言模型
model = OpenAI(model_name="gpt-3.5-turbo-instruct", temperature=0.0)# 创建解析器
from langchain.output_parsers import CommaSeparatedListOutputParseroutput_parser = CommaSeparatedListOutputParser()# 提示模板
template = "Generate a list of 5 {text}.\n\n{format_instructions}"
# 根据提示模板创建LangChain提示模板
chat_prompt = PromptTemplate.from_template(template)
# 提示模板与输出解析器传递输出
chat_prompt = chat_prompt.partial(format_instructions=output_parser.get_format_instructions())
# 将提示和模型合并以进行调用
chain = chat_prompt | model | output_parser
res = chain.invoke({"text": "colors"})
print(res)
python
复制代码
['red', 'blue', 'green', 'yellow', 'purple']

日期时间解析器

用于处理日期和时间相关的输出,确保模型的输出是正确的日期或时间格式

bash
复制代码
from langchain.output_parsers import DatetimeOutputParser
from langchain.prompts import PromptTemplate
from langchain_openai import OpenAI# 定义模板格式
template = """
回答用户的问题:{question}{format_instructions}
"""# 使用日期时间解析器
output_parser = DatetimeOutputParser()
prompt = PromptTemplate.from_template(template,partial_variables={"format_instructions": output_parser.get_format_instructions()},
)# 链式调用
chain = prompt | OpenAI() | output_parser
# 执行
output = chain.invoke({"question": "比特币是什么时候成立的?"})
# 打印输出
print(output) # 2009-01-03 18:15:05

枚举解析器

1.创建枚举类型的输出解析器,首先定义Colors枚举类,然后创建EnumOutputParser实例,传入Colors枚举类。

2.在提示模板中使用person和instructions占位符,instructions获取EnumOutputParser输出的枚举值的格式说明。

3.构建聊天处理链,从提示模板开始,依次连接ChatOpenAI模块和刚创建的parser。最后调用了链的 invoke 方法

bash
复制代码
from langchain.output_parsers.enum import EnumOutputParser  # 导入枚举类型的输出解析器
from langchain_core.prompts import PromptTemplate  # 导入提示模板
from langchain_openai import ChatOpenAI  # 导入与OpenAI的聊天模块
from enum import Enum  # 导入枚举类型# 定义一个枚举类Colors,包含三个颜色选项
class Colors(Enum):RED = "红色"GREEN = "绿色"BLUE = "蓝色"# 创建一个 EnumOutputParser 实例,传入 Colors 枚举类
parser = EnumOutputParser(enum=Colors)# 创建一个提示模板,包含一个名为 person 的占位符和一个名为 instructions 的占位符
prompt = PromptTemplate.from_template("""这个人的眼睛是什么颜色的?> 人物: {person}指示: {instructions}"""
).partial(instructions=parser.get_format_instructions())  # 使用 parser 获取枚举值格式的说明# 构建聊天处理链,以 prompt 开始,连接 ChatOpenAI,最后连接 parser
chain = prompt | ChatOpenAI() | parser# 调用链的 invoke 方法,并传入一个字典,包含 person 变量
res = chain.invoke({"person": "Frank Sinatra"})
print(res)

OpenAI函数

有以下几种输出解析器:

javascript
复制代码
JsonOutputFunctionsParser:以 JSON 形式返回函数调用的参数PydanticOutputFunctionsParser:将函数调用的参数作为 Pydantic 模型返回JsonKeyOutputFunctionsParser:以 JSON 形式返回函数调用中特定键的值PydanticAttrOutputFunctionsParser:以 Pydantic 模型的形式返回函数调用中特定键的值
bash
复制代码from langchain_core.utils.function_calling import convert_pydantic_to_openai_function # 导入用于将Pydantic模型转换为OpenAI函数的函数
from langchain_core.prompts import ChatPromptTemplate  # 导入聊天提示模板
from langchain_core.pydantic_v1 import BaseModel, Field, validator  # 导入Pydantic的相关模块
from langchain_openai import ChatOpenAI  # 导入与OpenAI的聊天模块
from langchain.output_parsers.openai_functions import JsonOutputFunctionsParser  # 导入OpenAI函数的输出解析器# 定义一个名为 Joke 的 Pydantic 模型,表示一个笑话包括 setup(问题)和 punchline(答案)两个字段
class Joke(BaseModel):setup: str = Field(description="设置笑话的问题")punchline: str = Field(description="解决笑话的答案")# 将 Joke 转换为 OpenAI 函数,并存储在 openai_functions 列表中
openai_functions = [convert_pydantic_to_openai_function(Joke)]# 创建一个 ChatOpenAI 实例 model,设定 temperature 参数为 0
model = ChatOpenAI(temperature=0)# 创建一个聊天提示模板 prompt,包含一个系统信息 "你是一个乐于助人的助手" 和一个用户输入的占位符
prompt = ChatPromptTemplate.from_messages([("system", "你是一个乐于助人的助手"), ("user", "{input}")]
)# 创建一个 JsonOutputFunctionsParser 解析器实例 parser
parser = JsonOutputFunctionsParser()# 构建聊天处理链,以 prompt 开始,连接 model,最后连接 parser
chain = prompt | model.bind(functions=openai_functions) | parser# 调用链的 invoke 方法,向其传入一个包含用户输入的字典,并将结果保存在 res 中
res = chain.invoke({"input": "给我讲个笑话"})
print(res)
bash
复制代码
{'setup': '为什么鱼不喜欢唱歌?', 'punchline': '因为它们会唱歌会泡沫!'}

自动修复解析器

python
复制代码
# 导入必要的类和模块
import osfrom langchain.output_parsers import PydanticOutputParser
from langchain.prompts import PromptTemplate
from langchain_core.pydantic_v1 import BaseModel, Field, validatorfrom langchain_openai import OpenAI
# 初始化语言模型
model = OpenAI(model_name="gpt-3.5-turbo-instruct", temperature=0.0)# 定义笑话数据的结构
class Joke(BaseModel):setup: str = Field(description="用于建立笑话的问题部分")punchline: str = Field(description="回答笑话的部分")# 使用 Pydantic 轻松添加自定义验证逻辑@validator("setup")def question_ends_with_question_mark(cls, field):if field[-1] != "?":raise ValueError("问题格式不正确!")return field# 设置解析器并将指令注入到提示模板中
parser = PydanticOutputParser(pydantic_object=Joke)prompt = PromptTemplate(template="回答用户的查询。\n{format_instructions}\n{query}\n",input_variables=["query"],partial_variables={"format_instructions": parser.get_format_instructions()},
)# 将提示和模型合并以进行调用
prompt_and_model = prompt | model
output = prompt_and_model.invoke({"query": "给我讲个笑话."})
print(output)# 使用解析器从输出中提取结构化数据
setup, punchline = parser.invoke(output)
print(f"问题: {setup}  回答: {punchline}""")
python
复制代码
{"setup": "为什么程序员总是喜欢用黑色的键盘?", "punchline": "因为黑色的键盘看起来像是在编程的黑暗中寻找光明。"}
问题: ('setup', '为什么程序员总是喜欢用黑色的键盘?')  回答: ('punchline', '因为黑色的键盘看起来像是在编程的黑暗中寻找光明。')

Pydantic解析器

Pydantic是一个Python库,它旨在简化数据验证和解析的过程。它提供了一种简单而强大的方式来定义数据模型,并使用这些模型来验证数据的有效性并进行解析。Pydantic通过在数据类中定义属性的类型和验证规则,使得数据模型的创建和验证变得非常容易。这个库还支持自动生成文档、序列化和反序列化等功能,使得数据处理变得更加高效和可靠。Pydantic通常用于构建Web应用程序、API服务以及数据处理任务中。

python
复制代码
# 创建模型实例
from langchain_openai import OpenAImodel = OpenAI(model_name='gpt-3.5-turbo-instruct')# 定义接收的数据格式
from pydantic import BaseModel, Fieldclass TextInfo(BaseModel):text: str = Field(description="文本信息")object: str = Field(description="对象是谁")description: str = Field(description="人物描述")# 创建输出解析器
from langchain.output_parsers import PydanticOutputParseroutput_parser = PydanticOutputParser(pydantic_object=TextInfo)# 获取输出格式指示
format_instructions = output_parser.get_format_instructions()
# 打印提示
print("输出格式:", format_instructions)# 创建提示模板
from langchain_core.prompts import PromptTemplateprompt_template = """您是一位专业的文案写手。对于信息 {text} 进行简短生动描述 {format_instructions}"""# 根据模板创建提示,同时在提示中加入输出解析器的说明
prompt = PromptTemplate.from_template(prompt_template, partial_variables={"format_instructions": format_instructions})
# 根据提示准备模型的输入
input = prompt.format(text='猪八戒吃人参果')
# 打印提示
print("提示:", input)# 获取模型的输出
output = model.invoke(input)# 解析模型的输出
parsed_output = output_parser.parse(output)
# 将Pydantic格式转换为字典
parsed_output_dict = parsed_output.dict()
# 打印字典
print("输出的数据:", parsed_output_dict)
python
复制代码
输出的数据: {'text': '猪八戒吃人参果', 'object': '信息', 'description': '猪八戒是一位贪吃的妖怪,他偶然得到了一粒人参果,听说可以长生不老,于是欢天喜地地吃了下去。但是没想到果真如此,他的身体也变得越来越大,最后连猴子大王都不是他的对手了。'}

自动修复解析器

python
复制代码
# 导入所需要的库和模块
from langchain.output_parsers import PydanticOutputParser
from pydantic import BaseModel, Field# 使用Pydantic创建一个数据格式
class TextInfo(BaseModel):text: str = Field(description="文本信息")object: str = Field(description="对象是谁")description: str = Field(description="人物描述")# 定义一个格式不正确的输出:Python期望属性名称被双引号包围,但在给定的JSON字符串中是单引号。
misformatted = "{'text': '猪八戒吃人参果', ‘object':'猪八戒','description':'猪八戒是一位贪吃的妖怪,他偶然得到了一粒人参果,听说可以长生不老,于是欢天喜地地吃了下去。'}"# 创建一个用于解析输出的Pydantic解析器
parser = PydanticOutputParser(pydantic_object=TextInfo)# 使用Pydantic解析器解析不正确的输出,出现异常提示:json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
# parser.parse(misformatted)# 从langchain库导入所需的模块
from langchain_openai import ChatOpenAI
from langchain.output_parsers import OutputFixingParser# 使用OutputFixingParser创建一个新的解析器,该解析器能够纠正格式不正确的输出
new_parser = OutputFixingParser.from_llm(parser=parser, llm=ChatOpenAI())# 使用新的解析器解析不正确的输出
result = new_parser.parse(misformatted)
print(result)

重试解析器

有时候可以通过查看输出修复解析错误,但并非所有情况下都适用。举例来说,当输出格式不正确且部分完整时,LangChain的重试解析器利用大型模型的推理能力,根据原始提示来找回相关信息,帮助解析数据。

python
复制代码
# 定义一个模板字符串,这个模板将用于生成提问
template = """根据用户问题,提供操作和操作输入,说明应采取的步骤.
{format_instructions}
问题: {query}
响应:
"""# 定义一个Pydantic数据格式
from pydantic import BaseModel, Field
# 使用Pydantic格式Action来初始化一个输出解析器
from langchain.output_parsers import PydanticOutputParserclass Action(BaseModel):action: str = Field(description="要采取的操作")action_input: str = Field(description="操作的输入")parser = PydanticOutputParser(pydantic_object=Action)# 定义一个提示模板,它将用于向模型提问
from langchain.prompts import PromptTemplateprompt = PromptTemplate(template="回答用户查询.\n{format_instructions}\n{query}\n",input_variables=["query"],partial_variables={"format_instructions": parser.get_format_instructions()},
)
prompt_value = prompt.format_prompt(query="猪八戒是谁?")# 定义一个错误格式的字符串:提供action字段,没有提供action_input字段,与Action数据格式的预期不符,解析会失败
bad_response = '{"action": "search"}'
# parser.parse(bad_response) # 直接解析会引发一个错误# 用OutputFixingParser修复此错误
from langchain.output_parsers import OutputFixingParser
from langchain_openai import ChatOpenAIfix_parser = OutputFixingParser.from_llm(parser=parser, llm=ChatOpenAI())
parse_result = fix_parser.parse(bad_response)
# 原始bad_response没有action_input字段。OutputFixingParser填补缺失,为action_input字段提供值keyword。
print('OutputFixingParser的parse结果:', parse_result)# 使用 RetryOutputParser,它传入提示(以及原始输出)以再次尝试以获得更好的响应。
from langchain.output_parsers import RetryWithErrorOutputParser
from langchain_openai import OpenAIretry_parser = RetryWithErrorOutputParser.from_llm(parser=parser, llm=OpenAI(temperature=0)
)
parse_result = retry_parser.parse_with_prompt(bad_response, prompt_value)
# 根据传入的原始提示,还原了action_input字段的内容
print('RetryWithErrorOutputParser的parse结果:', parse_result)
python
复制代码
OutputFixingParser的parse结果: action='search' action_input='keyword'
RetryWithErrorOutputParser的parse结果: action='search' action_input='猪八戒'

结构化输出解析器

python
复制代码
# 通过LangChain调用模型
from langchain_core.prompts import PromptTemplate# 创建提示模板
template = "您是一位专业的文案写手。\n对于信息 {text} 进行简短描述.{format_instructions}"from langchain_openai import OpenAI# 创建模型实例
model = OpenAI()# 导入结构化输出解析器和ResponseSchema
from langchain.output_parsers import ResponseSchema, StructuredOutputParser# 定义要接收的响应模式
response_schemas = [ResponseSchema(name="info", description="信息"),ResponseSchema(name="description", description="扩展描述")
]
# 创建输出解析器
output_parser = StructuredOutputParser.from_response_schemas(response_schemas)
# 获取格式指示
format_instructions = output_parser.get_format_instructions()
# 根据模板创建提示,同时在提示中加入输出解析器的说明
prompt = PromptTemplate.from_template(template,partial_variables={"format_instructions": format_instructions})# 根据提示准备模型的输入
inputData = prompt.format(text="猪八戒吃人参果")
# 获取模型的输出
output = model.invoke(inputData)
# 解析模型的输出
parsed_output = output_parser.parse(output)
print(parsed_output)
python
复制代码
{'info': '猪八戒吃人参果', 'description': '猪八戒是西游记中的一个角色,他是一只妖怪,但是也具有人类的智慧。人参果是一种神奇的植物,具有强大的功效,可以让人长生不老。猪八戒作为一个贪吃的妖怪,自然会对人参果产生强烈的兴趣,但是他的贪嘴往往会给他带来麻烦。这个信息可以用来描述猪八戒的特点,以及人参果的重要性。'}

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

在这里插入图片描述

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取==🆓

在这里插入图片描述

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

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

相关文章

从业务经营到企业战略,构建制药企业数字化应用新能力

我国医药的消费正处在一个高速增长的阶段,人口增长、老龄化加剧、经济总体增长、人均消费增长、农村收入提高,这五大因素是医药市场蓬勃发展的动力。在这五大因素的驱动下,我国的医药市场需求将会在未来相当长的时间内保持高速增长。从多个环…

(三)登录和注册(handle_auto.go)

登录和注册(handle_auto.go) 文章目录 登录和注册(handle_auto.go)一、所需要的结构体信息二、注册三、登录四、退出 一、所需要的结构体信息 type UserAuth struct{}type LoginReq struct {Username string json:"username" binding:"required"Password …

错误代码126:加载xinput1_3.dll失败如何解决?8个解决方法分享

xinput1_3.dll是Windows操作系统中一个非常关键的动态链接库(Dynamic Link Library, DLL)文件,它是微软DirectX软件开发包的组成部分,专门用于支持游戏控制器和其它输入设备在游戏及多媒体应用程序中的交互。下面是对xinput1_3.dl…

封装 H.264 视频为 FLV 格式然后推流

封装 H.264 视频为 FLV 格式并通过 RTMP 推流 flyfish 协议 RTMP (Real-Time Messaging Protocol) RTSP (Real Time Streaming Protocol) SRT (Secure Reliable Transport) WebRTC RTMP(Real Time Messaging Protocol)是一种用于实时音视频流传输的协…

qt安装历史版本5.15.2

0 背景 因为需要,所以需要安装qt5的最后一个版本qt5.15.2,但是下载qt安装器后,发现没有想要的版本。后面才发现,可以筛选历史版本进行安装。 1 解决 1,打开qt安装程序,勾选Archive后,点击筛选…

Python实现自动化的服务器部署和配置管理库之pyinfra使用详解

概要 在现代软件开发中,自动化部署和配置管理变得越来越重要。Python pyinfra库是一个强大的工具,可以帮助开发者实现自动化的服务器部署和配置管理。本文将介绍pyinfra库的安装、特性、基本功能、高级功能、实际应用场景以及总结。 安装 首先,来看一下如何安装pyinfra库。…

服务器被CC攻击怎么办

遇到CC攻击时,可采取以下措施:限制IP访问频率、启用防DDoS服务、配置Web应用防火墙、增加服务器带宽、使用负载均衡分散请求压力。 处理服务器遭遇CC攻击的方法如下: 1. 确认攻击 你需要确认服务器是否真的遭受了CC攻击,这可以…

书生浦语训练营第三节笔记和作业-茴香豆 搭建你的Rag智能助理

书生 浦语 茴香豆项目是一个基于大型语言模型(LLM)的群聊知识助手,由上海人工智能实验室的书生浦语团队开发。这个项目利用了RAG(Retrieval-Augmented Generation)技术,通过检索与用户输入相关的信息&#…

P6技巧-关于汇总项目Summarize的使用

前言 不知你在使用P6项目时是否察觉到这么一个有趣的现象,但打开一个项目(展开详细任务)时,在项目页签下可以看到该项目能反馈此时项目的总体进展,完成时间等内容;而当项目关闭时,其前1s所展示…

Linux快速部署大语言模型LLaMa3,Web可视化j交互(Ollama+Open Web UI)

本文在个人博客同步发布,前往阅读 1 介绍 本文将介绍使用开源工具Ollama(60.6k⭐)部署LLaMa大模型,以及使用Open WebUI搭建前端Web交互界面的方法。 我们先来过一遍几个相关的概念,对这块比较熟悉的朋友可跳过。 1.1 大规模语言模型 大规…

Eclipse内存分析器 Java内存分析工具MAT(Memory Analyzer Tool)的介绍与使用

1.visualvm实时监测 2.Memory Analyzer Tool打开 3.工具的使用可以参考 Java内存分析工具MAT(Memory Analyzer Tool)的介绍与使用 ------------------------ 1.我远程发现是其中一个客户端A请求服务器页面响应,一直得不到响应,然后客户端A一直请求&am…

Ansible 自动化运维

一、介绍 1、定义: ansible是自动化运维工具,基于Python开发,具有批量系统配置、批量程序部署、批量运行命令等功能。 ansible是基于 paramiko(框架) 开发的,并且基于模块化工作,本身没有批量…

报表控件Stimulsoft在JavaScript报告工具中的事件:查看器事件(上)

Stimulsoft Ultimate (原Stimulsoft Reports.Ultimate)是用于创建报表和仪表板的通用工具集。该产品包括用于WinForms、ASP.NET、.NET Core、JavaScript、WPF、PHP、Java和其他环境的完整工具集。无需比较产品功能,Stimulsoft Ultimate包含了…

[华为OD]给定一个 N*M 矩阵,请先找出 M 个该矩阵中每列元素的最大值 100

题目: 给定一个 N*M 矩阵,请先找出 M 个该矩阵中每列元素的最大值,然后输出这 M 个值中的 最小值 补充说明: N 和 M 的取值范围均为:[0, 100] 示例 1 输入: [[1,2],[3,4]] 输出: 3 说…

力扣-有效的数独

请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图) 注…

(三十一)第 5 章 数组和广义表(稀疏矩阵的三元组行逻辑链接的顺序存储表示实现)

1. 背景说明 2. 示例代码 1)errorRecord.h // 记录错误宏定义头文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 从文件路径中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? strrch…

AI 工具合集

以下工具来源于互联网&#xff0c;可能会失效&#xff0c;请参考使用 网红工具 名称链接说明GPT-4https://chat.openai.com/ 需要梯子&#xff0c;需要付费。功能最强大的聊天机 器人。 文心一言https://yiyan.baidu.com/welcome 国内版 GPT&#xff0c;需要申请账号。回答问…

最好用的电脑监控软件,电脑监控软件怎么监控员工

电脑监控软件是一种专为跟踪和记录计算机使用情况而设计的应用程序&#xff0c;主要用于提升企业内部的信息安全、提高工作效率及监管员工行为。这些软件通常通过以下几种方式实现监控功能&#xff1a; 实时屏幕监控&#xff1a; 软件能够实时显示被监控电脑的屏幕画面&#x…

数据分析:扩增子分析(qiime2平台全流程分析)

Amplicon sequencing analysis pipeline through qiime2 platform qiime2是扩增子数据分析的最佳平台之一&#xff0c;其提供了大量从原始data到统计分析的插件&#xff0c;尤其是它的可重复分析且可扩展插件的理念使得其成为扩增子分析首选的平台。 Platform qiime2是扩增子…

Airmail 5 for Mac:高效电子邮件管理软件

Airmail 5 for Mac作为一款功能强大的电子邮件客户端软件&#xff0c;为Mac用户带来了全新的邮件管理体验。其高效、直观的操作界面&#xff0c;使得用户可以轻松管理各类邮件&#xff0c;提升工作效率。 Airmail 5 for Mac v5.7.4中文激活版 首先&#xff0c;Airmail 5支持多个…