langchain历史记录管理
langchain历史记录管理
输入的消息类型:
关于Message的基本介绍可用看这:langchain基本Messages
这里说说基本的用法(重在区别BaseMessage,HumanMessage,AIMessage)
如以下代码:
# 先写 InMemoryMessageHistory,对获取的消息进行处理并获取历史记录列表! class InMemoryMessageHistory(BaseChatMessageHistory, BaseModel): messages: List[BaseMessage] = Field(default_factory=list) # 添加并处理对话记录 def add_message(self, message: BaseMessage) -> None: self.messages.append(message) def clear(self) -> None: self.messages = []
这里为什么将总消息列表设置为元素均受
BaseMessage
类的列表呢?原因:
作为通用的消息基类:
BaseMessage
是一个基类,它定义了消息的基本结构和行为,是HumanMessage
和AIMessage
等具体消息类型的父类。使用BaseMessage
作为类型提示,表示messages
列表可以包含各种具体类型的消息对象,只要它们是BaseMessage
的子类。这样可以实现多态性,使得代码更加灵活和可扩展。比如,后续如果需要添加其他类型的消息,如系统消息SystemMessage
等,只要让新的消息类继承自BaseMessage
,就可以方便地将其添加到messages
列表中。统一的存储和处理:将不同类型的消息统一存储在以
BaseMessage
为类型的列表中,便于对消息进行统一的处理和操作。例如,可以遍历messages
列表,无论其中的消息是HumanMessage
还是AIMessage
,都可以通过BaseMessage
定义的公共接口来访问消息的属性和方法,如获取消息内容等。这样可以避免为不同类型的消息编写重复的处理代码,提高代码的复用性和可维护性。符合面向对象设计原则:遵循了面向对象编程中的里氏替换原则,即子类对象可以在不影响程序正确性的前提下,替换父类对象在程序中的位置。使用
BaseMessage
作为列表元素的类型,意味着在使用messages
列表的地方,可以透明地处理任何BaseMessage
子类的对象,而不需要针对具体的子类进行特殊的判断和处理,使得代码结构更加清晰,耦合度更低。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Dedsec的博客!