1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
| from langchain.memory import VectorStoreRetrieverMemory from langchain.vectorstores import Chroma from langchain.embeddings import OpenAIEmbeddings from langchain.chains import ConversationChain from langchain_deepseek import ChatDeepSeek from dotenv import load_dotenv import os
load_dotenv()
llm = ChatDeepSeek(model="deepseek-chat") embeddings = OpenAIEmbeddings()
vectorstore = Chroma( embedding_function=embeddings, persist_directory="./vector_db" )
memory = VectorStoreRetrieverMemory( retriever=vectorstore.as_retriever( search_kwargs={"k": 3} ), memory_key="chat_history", return_docs=True )
print("=== 向量存储记忆示例 ===")
historical_conversations = [ "用户: 我叫张三,来自北京\n助手: 你好张三,北京是个很棒的城市!", "用户: 我今年30岁,是一名软件工程师\n助手: 30岁的软件工程师,经验丰富啊。", "用户: 我喜欢打篮球和旅游\n助手: 运动加旅游是很好的生活方式。", "用户: 我养了一只叫Tom的猫\n助手: Tom一定很可爱!", "用户: 最近在学习Python编程\n助手: Python是很好的入门语言。", "用户: 想转行做数据科学家\n助手: 数据科学家需要统计学和编程技能。", "用户: 我经常去健身房锻炼\n助手: 健身对身体和心理健康都很重要。", "用户: 去年去了日本旅行\n助手: 日本的文化和风景都很迷人。", "用户: 我的妻子是医生\n助手: 医生是很崇高的职业。", "用户: 我们计划明年要孩子\n助手: 家庭计划很重要,祝你们幸福。", ]
print("添加历史对话到向量库...") for conv in historical_conversations: memory.save_context( {"input": conv.split("\n")[0].replace("用户: ", "")}, {"output": conv.split("\n")[1].replace("助手: ", "")} )
print("\n测试语义检索:") test_queries = [ "关于我的个人信息", "我的兴趣爱好", "我的家庭情况", "我的职业发展", ]
for query in test_queries: print(f"\n查询: {query}") docs = memory.retriever.invoke(query) for i, doc in enumerate(docs, 1): print(f" 相关记忆 {i}: {doc.page_content[:80]}...")
相关记忆 1: input: 我喜欢打篮球和旅游 output: 运动加旅游是很好的生活方式。... 相关记忆 2: input: 我经常去健身房锻炼 output: 健身对身体和心理健康都很重要。... 相关记忆 3: input: 我的妻子是医生 output: 医生是很崇高的职业。...
查询: 我的兴趣爱好 相关记忆 1: input: 我养了一只叫Tom的猫 output: Tom一定很可爱!... 相关记忆 2: input: 我的妻子是医生 output: 医生是很崇高的职业。... 相关记忆 3: input: 我喜欢打篮球和旅游 output: 运动加旅游是很好的生活方式。...
查询: 我的家庭情况 相关记忆 1: input: 我们计划明年要孩子 output: 家庭计划很重要,祝你们幸福。... 相关记忆 2: input: 我的妻子是医生 output: 医生是很崇高的职业。... 相关记忆 3: input: 我喜欢打篮球和旅游 output: 运动加旅游是很好的生活方式。...
查询: 我的职业发展 相关记忆 1: input: 我养了一只叫Tom的猫 output: Tom一定很可爱!... 相关记忆 2: input: 我的妻子是医生 output: 医生是很崇高的职业。... 相关记忆 3: input: 我喜欢打篮球和旅游 output: 运动加旅游是很好的生活方式。...
|