专属编程笔记

news2025/1/17 23:21:57

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 可能是一个自定义的类,用于表示聊天记忆或对话历史。
    @abstractmethod
    def 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 PromptTemplate
 
prompt = 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 OpenAI
 
llm = 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 ConversationBufferMemory
 
conversation = 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 ConversationBufferMemory
 

memory = 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.coloradmin.cn/o/1790644.html

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

相关文章

深度学习 --- stanford cs231 编程作业(assignment1,Q2: SVM分类器)

stanford cs231 编程作业之SVM分类器 写在最前面: 深度学习,或者是广义上的任何学习,都是“行千里路”胜过“读万卷书”的学识。这两天光是学了斯坦福cs231n的一些基础理论,越往后学越觉得没什么。但听的云里雾里的地方也越来越多…

pycharm专业版安装保姆级教程

一、官网下载 PyCharm下载地址:http://www.jetbrains.com/pycharm/download/#sectionwindows 选择专业版点击下载 二、进入安装向导 下载完成后,点击.exe文件 点击是 点击下一步 可修改安装目录为自己想安装的位置 或者不修改也可 点击下一步 选择所…

[数据概念]数据要素和智能算力市场关系解析

昨天的AI圈里最炸裂的莫过于OpenAI GPT4o的发布了。 根据官网的介绍,GPT-4o是面向未来人机交互范式的全新大模型,具有文本、语音、图像三种模态的理解力。 而且加量不加价 国内报道也是铺天盖地的“炸裂”。 反倒是外媒,报道倒是没有那么夸张…

亮数据——全球网络数据一站式平台

在我们日常的项目开发和研究中,数据获取总是一个让人既爱又恨的话题。找到一个既高效又安全的工具,简直就像是在茫茫沙漠中找到绿洲。近期,我测评了,数十家数据获取工具,最后锁定了,亮数据,本篇…

网络安全等级保护相关标准及发展

目录 等保标准 等保定级 发展 等保标准 2016年11月发布的《网络安全法》第二十一条提出“国家实行网络安全等级保护制度”。 等级保护标准体系: (1)安全等级类标准 主要包括GB/T 22240-2008《信息安全技术 信息系统安全保护等级保护定…

从Series到DataFrame:Python数据操作的转换技巧

在数据分析和处理的过程中,我们经常需要在Pandas库中对Series和DataFrame进行操作。本文将介绍如何将Series转换为DataFrame,以及如何提取DataFrame中的某一列。首先,我们将通过使用to_frame()函数将Series转换为DataFrame。然后,…

Linux系统编程(七)网络编程TCP、UDP

本文目录 一、基础知识点1. IP地址2. 端口3. 域名4. 网络协议类型5. IP协议类型6. 字节序7. socket套接字 二、TCP 常用API1. socket套接字描述符2. bind套接字绑定3. listen设置最大排队数4. accept接收客户端请求5. connect连接服务端6. read读取数据7. write发送数据 三、UD…

网页音频提取在线工具有哪些 网页音频提取在线工具下载

别再到处去借会员账号啦。教你一招,无视版权和地区限制,直接下载网页中的音频文件。没有复杂的操作步骤,也不用学习任何代码。只要是网页中播放的音频文件,都可以把它下载到本地保存。 一、网页音频提取在线工具有哪些 市面上的…

碳化硅MOSFET短路保护方法

碳化硅MOSFET短路保护方法 1.概述2.IGBT和碳化硅MOSFET器件特性3.短路保护方法比较4.总结 1.概述 碳化硅 (SiC) MOSFET 已成为硅 (Si) IGBT 的潜在替代产品,适用于光伏逆变器、车载和非车载电池充电器、牵引逆变器等各种应用。与 Si IGBT 相比,SiC MOSFE…

东芝机械人电池低报警解除与机器人多旋转数据清零

今天启动一台设备,触摸屏一直显示机器人报警(翻译过后为电池电量低),更换电池后关机重启后也不能消除,所以打开示教器,下面就来说说怎么解决此项问题(可以参考官方发的手册,已手册为…

家政预约小程序13我的订单

目录 1 我的订单页面布局2 全部订单页面3 完善订单状态4 查询订单信息总结 现在我们已经完成了家政预约小程序主体功能的开发,包含服务的查看,在线预约已经登录等功能。预约之后就需要家政公司的客服进行派单,由服务人员进行上门服务。在小程…

ARM微控制器系列

Cortex-M core发展时间线 Cortex-M core发展定位 Cortex-M核心通常作为专用的微控制器芯片使用,但也“隐藏”在SoC芯片中,用作电源管理控制器、I/O控制器、系统控制器、触摸屏控制器、智能电池控制器和传感器控制器。 与Cortex-A核心的主要区别在于&…

HTML静态网页成品作业(HTML+CSS)—— 节日端午节介绍网页(5个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有5个页面。 二、作品演示 三、代…

从 URL 中获取数据并创建列表解析

当我们从 URL 中获取数据时,可能你通常会使用 Python 的 requests 库来发送 HTTP 请求,并使用 json() 方法来解析 JSON 数据。下面是一个简单的示例,演示如何从 URL 获取数据并创建一个列表解析,希望可以帮助大家。 1、问题背景 …

嵌入式学习——4——C++中的动态内存分配和回收(堆区)

1、内存的分配与回收 C语言中使用的是malloc和free函数进行动态内存分配和回收的。 C中依然可以使用上述的两个函数来完成动态内存分配和回收的。 C也给用户提供了两个关键字new、delete来完成动态内存分配和回收的 单个分配、回收 //在堆区申请了int类型的大小空间&#xff0c…

四川汇聚荣聚荣科技有限公司综合实力怎么样?

在科技日新月异的今天,企业的综合实力成为衡量其市场竞争力的重要指标。四川汇聚荣聚荣科技有限公司作为一家在行业内具有一定影响力的企业,其综合实力如何,自然成为外界关注的焦点。以下将从多个维度深入分析该公司的实力。 一、公司概况与核…

ChatGPT制作一个简单的客服机器人

包含功能: MVP(最简可行产品)版本的客服机器人应该聚焦于核心功能,以快速上线和测试用户反馈为目标。以下是一个简化的版本: 自动问答(FAQ)功能: 支持回答常见问题,例如…

一键分割视频并生成M3U8格式:高效管理视频内容,畅享流畅播放新体验

视频内容已成为我们日常生活和工作中的重要组成部分。无论是个人分享生活点滴,还是企业宣传产品与服务,视频都以其直观、生动的形式,吸引着我们的眼球。然而,随着视频内容的不断增多,如何高效、便捷地管理这些视频&…

虚幻引擎5 Gameplay框架(四)

Gameplay重要类及重要功能使用方法(三) 虚幻的委托机制 虚幻委托之间的区别序列化就是是否可以在蓝图中执行 多播与单播的创建 制作功能:使用多播与单播将血条与血量进行实时更新首先新建一个单播与一个多播委托 实例化这两个委托的标签…

6.5 作业

设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1&#xff0c;设计这两个类的构造函数、析构函数。 #include <iostream>using namespace std; class Stu { privat…