Nei*_*ski 14 python pydantic langchain large-language-model
我正在创建这样的对话:
llm = ChatOpenAI(temperature=0, openai_api_key=OPENAI_API_KEY, model_name=OPENAI_DEFAULT_MODEL)
conversation = ConversationChain(llm=llm, memory=ConversationBufferMemory())
Run Code Online (Sandbox Code Playgroud)
但我真正想要的是能够保存和加载它,ConversationBufferMemory()以便它在会话之间保持不变。似乎没有任何明显的教程,但我注意到“Pydantic”,所以我尝试这样做:
saved_dict = conversation.memory.chat_memory.dict()
cm = ChatMessageHistory(**saved_dict) # or cm = ChatMessageHistory.parse_obj(saved_dict)
Run Code Online (Sandbox Code Playgroud)
但这失败了:
ValidationError: 6 validation errors for ChatMessageHistory
messages -> 0
Can't instantiate abstract class BaseMessage with abstract method type (type=type_error)
Run Code Online (Sandbox Code Playgroud)
想法?我希望有任何类型的指南、存储库、参考资料等的链接。
为了避免过多地处理 LangChain/Pydantic 序列化问题,我决定只使用 Pickle 来完成整个事情,并且效果很好:
pickled_str = pickle.dumps(conversation.memory)
conversation2 = ConversationChain(llm=llm, memory=pickle.loads(pickled_str)
Run Code Online (Sandbox Code Playgroud)
我刚刚做了类似的事情,希望这会有所帮助。在高层次上:
ConversationBufferMemory传递给 Chain 初始化的内存llm = ChatOpenAI(temperature=0, model_name='gpt-3.5-turbo-0301')
original_chain = ConversationChain(
llm=llm,
verbose=True,
memory=ConversationBufferMemory()
)
original_chain.run('what do you know about Python in less than 10 words')
Run Code Online (Sandbox Code Playgroud)
List[langchain.schema.HumanMessage|AIMessage](不可序列化)的形式从内存中提取消息extracted_messages = original_chain.memory.chat_memory.messages
Run Code Online (Sandbox Code Playgroud)
ingest_to_db = messages_to_dict(extracted_messages)
Run Code Online (Sandbox Code Playgroud)
json.dumps和json.loads来说明retrieve_from_db = json.loads(json.dumps(ingest_to_db))
Run Code Online (Sandbox Code Playgroud)
List[langchain.schema.HumanMessage|AIMessage]retrieved_messages = messages_from_dict(retrieve_from_db)
Run Code Online (Sandbox Code Playgroud)
ChatMessageHistory从消息构造retrieved_chat_history = ChatMessageHistory(messages=retrieved_messages)
Run Code Online (Sandbox Code Playgroud)
ConversationBufferMemory自ChatMessageHistoryretrieved_memory = ConversationBufferMemory(chat_memory=retrieved_chat_history)
Run Code Online (Sandbox Code Playgroud)
reloaded_chain = ConversationChain(
llm=llm,
verbose=True,
memory=retrieved_memory
)
Run Code Online (Sandbox Code Playgroud)
您可以在此GitHub 链接中找到完整的代码片段