专属编程笔记

Utils目录作用

在软件开发中,Utils(或 Utilities)目录通常用于存放一些通用的、不特定于任何模块的工具类或辅助函数。这些工具类或函数为整个应用程序或多个模块提供便利的功能支持,使得代码更加模块化、易于维护和重用。Utils目录可能包含以下类型的文件或类:

  1. 辅助类(Helper Classes):提供通用方法,如日期时间处理、字符串操作、文件处理等。
  2. 自定义异常(Custom Exceptions):用于定义项目中特定的异常处理。
  3. 配置管理(Configuration Management):处理应用程序设置和配置加载。
  4. 日志记录(Logging):提供日志记录和管理功能。
  5. 数据校验(Data Validation):包含用于校验数据有效性的工具。
  6. 加密解密(Encryption/Decryption):提供加密和解密服务的工具。
  7. 网络通信(Networking):包含处理网络请求和响应的实用工具。
  8. 数据库操作(Database Operations):提供数据库连接、查询构建等工具。
  9. 缓存处理(Caching):实现缓存机制的工具,用于提高应用性能。
  10. 第三方库封装(Wrapper for Third-party Libraries):为第三方库提供统一的接口或封装复杂操作。

Utils目录的设计目的在于避免代码重复,并确保在整个项目中以一致的方式处理共通任务。这样做可以提高开发效率,降低维护成本,并确保代码的整洁性和可读性。

if __name__ == "__main__":作用

这里的__name__是Python的一个内置变量,它代表了当前模块的名称。当模块被直接运行时,__name__的值会被设置为"__main__"。如果模块被导入到另一个模块中,__name__的值就会被设置为该模块的名称。

if __name__ == "__main__":的作用是,当这个模块被直接运行时,位于该判断语句下的代码(通常是main()函数)会被执行。如果这个模块被导入到另一个模块中,main()函数则不会被执行。

这样做的好处是,你可以将模块中的功能代码和执行代码分离,使得这个模块既可以作为独立的脚本运行,也可以作为一个功能模块被其他脚本导入和使用

def main():print("This is the main function.")def helper_function():print("This is a helper function.")if __name__ == "__main__":main()

在这个例子中,如果这个脚本被直接运行,它会打印出"This is the main function."。如果这个脚本被导入到另一个脚本中,helper_function()可以被调用,但main()不会自动执行。

细节用法

def _format_long_term_memory(task_description: str, memory: BaseChatMemory) -> str:return memory.load_memory_variables({"prompt": task_description})["history"]

返回类型注解(Return Type Annotation)

  • -> str 表示函数的返回值应该是一个字符串类型。

类型注解(Type Annotations)

  • task_description: str 表示参数 task_description 应该是一个字符串类型
  • memory: BaseChatMemory 表示参数 memory 应该是一个 BaseChatMemory 类型的实例。BaseChat
  • Memory 可能是一个自定义的类,用于表示聊天记忆或对话历史。
    @abstractmethoddef load_memory_variables(self, inputs: Dict[str, Any]) -> Dict[str, Any]:"""Return key-value pairs given the text input to the chain."""

抽象方法(Abstract Method)

  • @abstractmethod 是一个装饰器,它用于标记一个方法为抽象方法。这意味着这个方法在抽象类中不需要实现具体的功能,但它要求任何继承了这个抽象类的具体子类都必须实现这个方法。

参数和类型注解(Parameters and Type Annotations)

  • self 是一个特殊的参数,它代表类实例本身。在 Python 的类方法中,self 用來访问属于类的属性和方法。
  • inputs: Dict[str, Any] 表示参数 inputs 应该是一个字典,其中键是字符串类型,值可以是任何类型(Any)。

返回类型注解(Return Type Annotation)

  • -> Dict[str, Any] 表示方法的返回值应该是一个字典,其中键是字符串类型,值可以是任何类型(Any)。
  • 它提供了方法的简要描述。文档字符串通常用于解释方法或函数的用途、参数和返回值。

文档字符串(Docstring):

"""Return key-value pairs given the text input to the chain.""" 是一个文档字符串,它提供了方法的简要描述。文档字符串通常用于解释方法或函数的用途、参数和返回值。

langchain

定义提示模板

需要培养一种,问题挖空的能力,比如需要构建一个分析词语词性的提示词

 你是一名语言学家,请你分析{XXX词}的词性。

from langchain.prompts import PromptTemplateprompt = PromptTemplate(input_variables=["product"],template="What is a good name for a company that makes {product}?",
)print(prompt.format(product="colorful socks"))
What is a good name for a company that makes colorful socks?

链: 在多步骤的工作流中组合 LLM 和提示

最核心的链类型是 LLMChain,它由 PromptTemplate 和 LLM 组成。

扩展前面的示例,我们可以构造一个LLMChain.

它接受用户输入,使用 PromptTemplate 对其进行格式化,然后将格式化后的响应传递给LLM

from langchain.prompts import PromptTemplate
from langchain.llms import OpenAIllm = OpenAI(temperature=0.9)
prompt = PromptTemplate(input_variables=["product"],template="What is a good name for a company that makes {product}?",
)from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=prompt)chain.run("colorful socks")
# -> '\n\nSocktastic!'

我们可以通过将多个链组合在一起,或者通过将链与其他组件组合在一起,来构建更复杂的链

调用链的不同方式

返回结果格式(输入,输出)

默认情况下,_ _ call _ _ 返回输入和输出键值。通过将 return _ only _ output 设置为True,可以将其配置为只返回输出键值。

向链中添加内存

Chain 支持将 BaseMemory 对象作为其内存参数,允许 Chain 对象跨多个调用持久存储数据。换句话说,它使 Chain 成为一个有状态对象。

from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemoryconversation = ConversationChain(llm=chat,memory=ConversationBufferMemory()
)conversation.run("Answer briefly. What are the first 3 colors of a rainbow?")
# -> The first three colors of a rainbow are red, orange, and yellow.
conversation.run("And the next 4?")
# -> The next four colors of a rainbow are green, blue, indigo, and violet.#'The next four colors of a rainbow are green, blue, indigo, and violet.'

聊天记录

缓冲记忆
现在我们展示如何在链中使用这个简单的概念。我们首先展示 ConversationBufferMemory,它只是 ChatMessageHistory 的一个包装器,用于提取变量中的消息。我们可以首先提取它作为一个字符串。from langchain.memory import ConversationBufferMemorymemory = ConversationBufferMemory()
memory.chat_memory.add_user_message("hi!")
memory.chat_memory.add_ai_message("whats up?")memory.load_memory_variables({}){'history': 'Human: hi!\nAI: whats up?'}我们还可以获取作为消息列表的历史记录memory = ConversationBufferMemory(return_messages=True)
memory.chat_memory.add_user_message("hi!")
memory.chat_memory.add_ai_message("whats up?")memory.load_memory_variables({}){'history': [HumanMessage(content='hi!', additional_kwargs={}),AIMessage(content='whats up?', additional_kwargs={})]}

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

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

相关文章

函数重载和模板的区别与联系

函数重载和模板的区别与联系 函数重载(overloaded):定义函数名相同而形参列表(个数,类别)不同的多个函数,这些函数被称为重载函数,重载函数通常执行的操作非常类似,如打印不同的输入对象。调用…

在嵌入式系统中,如何实现日志的实时监控和分析?

在嵌入式系统中,实时监控和分析日志对于快速定位问题、优化性能和保证系统的稳定性至关重要。本文将介绍如何在嵌入式系统中实现日志的实时监控和分析,包括日志的收集、传输、存储和分析。 一、日志收集 日志收集是实时监控和分析的第一步。在嵌入式系…

Echarts 柱状图中每个柱状图如何自定义展示内容

文章目录 需求分析需求 分析 要自定义柱状图中每个柱子的展示内容,您可以通过设置 label 的 formatter 属性来实现。formatter 是一个回调函数,可以用来自定义 label 的显示内容。以下是一个示例代码,演示了如何实现这一点: <!DOCTYPE html> <html lang="e…

【quarks系列】基于Dockerfile构建native镜像

目录 Dockerfile构建代码测试 Dockerfile FROM quay.io/quarkus/ubi-quarkus-native-image:22.3-java11 AS buildWORKDIR /workspace COPY . .RUN ./mvnw -DskipTeststrue clean package -Dnative -U# Stage 2: Create the minimal runtime image FROM registry.access.redhat…

AWS的EC2之间ping不通,服务之间不通,怎么办

AWS启动的两个EC2实例&#xff0c;互相访问不了 修改安全组规则&#xff0c;添加ICMP 流量的入站规则 参考&#xff1a;AWS的EC2之间ping不通,服务之间不通,怎么办_aws ec2同一个区域的服务器-CSDN博客

Linux之关机重启

服务器除了通过界面 进行关机&#xff0c;重启操作&#xff0c;还可以通过命令的方式实现 shutdown [-t seconds] [-rkhncfF] time [message] 常用选项 参数功能-t seconds设定在几秒钟之后进行关机程序-k并不会真的关机&#xff0c;只是将警告讯息传送给所有使用者-r关机后重…

RabbitMQ支持的消息模型

RabbitMQ基础RabbitMQ支持的消息模型 一、第一种模型(直连) 我们将用Java编写两个程序&#xff0c;发送单个消息的生成者和接收消息并打印出来的消费者。 在下图&#xff0c;“P”是生成者&#xff0c;“C”消费者。中间框是一个队列RabbitMQ保留的消息缓冲区 。 首先构建一个…

思维,1209G1 - Into Blocks (easy version)

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 Problem - 1209G1 - Codeforces 二、解题报告 1、思路分析 考虑&#xff1a; 最终状态为若干段相同数字&#xff0c;且任意两段数字不同 每个数字出现的最左下标和最右下标构成一个区间 连锁反应—…

前端角色负责人岗

定位&#xff1a; 有效搭建、领导、优化一个自驱力强的前端团队&#xff0c;通过制度和工具把控质量和提高团队的生产力。 素质要求&#xff1a; 资深的技术专家且在流程规范、技术上自成体系&#xff1b;团队基础建设和持续集成方面需要有丰富的经验&#xff1b;具备组织管…

算法金 | 10 大必知的自动化机器学习库(Python)

大侠幸会&#xff0c;在下全网同名[算法金] 0 基础转 AI 上岸&#xff0c;多个算法赛 Top [日更万日&#xff0c;让更多人享受智能乐趣] 一、入门级自动化机器学习库 1.1 Auto-Sklearn 简介&#xff1a; Auto-Sklearn 是一个自动机器学习库&#xff0c;基于 Python 的 scikit…

【网络编程开发】4.socket套接字及TCP的实现框架 5.TCP多进程并发

4.socket套接字及TCP的实现框架 Socket套接字 Socket套接字是网络编程中用于实现不同计算机之间通信的一个基本构建块。 在现代计算机网络中&#xff0c;Socket套接字扮演着至关重要的角色。它们为应用程序提供了一种方式&#xff0c;通过这种方式&#xff0c;程序能够通过网…

2024年城市建设与环境管理国际会议(ICUCEM 2024)

2024 International Conference on Urban Construction and Environmental Management 【1】大会信息 大会地点&#xff1a;中国成都 投稿邮箱&#xff1a;icucemsub-paper.com 【2】会议简介 2024年城市建设与环境管理国际会议是一个专注于探讨城市建设与环境管理前沿议题…

深度学习中域泛化的简要概述

深度学习中域泛化的简要概述 域泛化&#xff08;Domain Generalization&#xff09;是一种机器学习方法&#xff0c;旨在使训练模型能够在未见过的目标域&#xff08;Target Domain&#xff09;上表现良好。与域适应不同&#xff0c;域泛化在训练过程中并没有接触目标域的数据…

信号放大与放大器基础知识(学习笔记三)

1. 什么是放大器的建立时间&#xff1f; 建立时间是从输入信号变化开始到输出稳定在新值的时间间隔。 2. 放大器的耦合方式有哪些&#xff0c;各有什么优缺点&#xff1f; 直接耦合: 直接耦合是将前一级的输出端直接连接到后一级的输入端。 直接耦合方式的缺点&#xff1a;采…

EasyRecovery2024终极破解指南来袭!

在数字化时代&#xff0c;数据成为了每个人、每家公司最宝贵的资产之一。无论是个人的照片、文档&#xff0c;还是公司的机密信息&#xff0c;一旦丢失&#xff0c;后果不堪设想。因此&#xff0c;数据恢复工具如EasyRecovery2024应运而生&#xff0c;成为了保护数据安全的利器…

kubeedge v1.17.0部署教程

文章目录 前言一、安装k8s平台二、部署kubeedge1.部署MetalLB(可选)2.cloud3.edge4. 部署nginx到edge端 总结参考 前言 本文主要介绍kubeedge v1.17.0的安装过程 主要环境如下表 应用版本centos7.0k8s1.28.2kubeedge1.17.0docker24.0.8centos7.0 一、安装k8s平台 本文主要参…

八股文-Vue篇(持续更新)

八股文-Vue篇 一、Vue21. 关于生命周期1.1 生命周期有哪些&#xff1f;发送请求在created还是mounted&#xff1f;1.2 为什么发送请求不在beforeCreate里&#xff1f;beforeCreate和created有什么区别&#xff1f;1.3 在created中如何获取dom?1.4 一旦进入到组件会执行哪些生命…

Doris Connector 结合 Flink CDC 实现 MySQL 分库分表

1. 概述 在实际业务系统中为了解决单表数据量大带来的各种问题&#xff0c;我们通常采用分库分表的方式对库表进行拆分&#xff0c;以达到提高系统的吞吐量。 但是这样给后面数据分析带来了麻烦&#xff0c;这个时候我们通常试将业务数据库的分库分表同步到数据仓库时&#x…

英伟达Docker 安装与GPu镜像拉取

获取nvidia_docker压缩包nvidia_docker.tgz将压缩包上传至服务器指定目录解压nvidia_docker.tgz压缩包 tar -zxvf 压缩包执行rpm安装命令&#xff1a; #查看指定rpm包安装情况 rpm -qa | grep libstdc #查看指定rpm包下的依赖包的版本情况 strings /lib64/libstdc |grep GLI…

【代码随想录】【算法训练营】【第25天】 [216]组合总和III [17] 电话号码的字母组合

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 25&#xff0c;周六&#xff0c;坚持有点困难~ 题目详情 [216] 组合总和III 题目描述 216 组合总和III 解题思路 前提&#xff1a;组合子集问题 思路&#xff1a;回溯算法&#xff0c;剪枝…