Skip to main content

Weaviate Hybrid Search

Weaviate是一个开源的向量数据库。

混合搜索是一种将多个搜索算法结合起来以提高搜索结果准确性和相关性的技术。它利用了基于关键字的搜索算法和向量搜索技术的最佳特点。

Weaviate中的混合搜索使用稀疏向量和密集向量来表示搜索查询和文档的含义和上下文。

本笔记本展示了如何将Weaviate混合搜索用作LangChain检索器。

设置检索器:

#!pip install weaviate-client
import weaviate
import os

WEAVIATE_URL = os.getenv("WEAVIATE_URL")
auth_client_secret = (weaviate.AuthApiKey(api_key=os.getenv("WEAVIATE_API_KEY")),)
client = weaviate.Client(
url=WEAVIATE_URL,
additional_headers={
"X-Openai-Api-Key": os.getenv("OPENAI_API_KEY"),
},
)

# client.schema.delete_all()
from langchain.retrievers.weaviate_hybrid_search import WeaviateHybridSearchRetriever
from langchain.schema import Document
    
retriever = WeaviateHybridSearchRetriever(
client=client,
index_name="LangChain",
text_key="text",
attributes=[],
create_schema_if_missing=True,
)

添加一些数据:

docs = [
Document(
metadata={
"title": "拥抱未来:AI揭秘",
"author": "Rebecca Simmons博士",
},
page_content="对人工智能从起源到未来前景的全面分析。Simmons博士涵盖了AI的伦理考虑、潜力和威胁。",
),
Document(
metadata={
"title": "共生:人类与AI的和谐",
"author": "Jonathan K. Sterling教授",
},
page_content="Sterling教授探讨了人类和人工智能之间和谐共存的潜力。该书讨论了如何将AI融入社会,使其对社会有益且不具有破坏性。",
),
Document(
metadata={"title": "AI:伦理困境", "author": "Rebecca Simmons博士"},
page_content="在她的第二本书中,Simmons博士更深入地探讨了围绕AI开发和部署的伦理考虑。这是对开发人员、政策制定者和整个社会面临的困境的一次启发性考察。",
),
Document(
metadata={
"title": "有意识的结构:寻找AI的感知能力",
"author": "Samuel Cortez博士",
},
page_content="Cortez博士带领读者探索了AI意识这一有争议的话题。该书提供了支持和反对真正的AI感知能力的有力论据。",
),
Document(
metadata={
"title": "隐形例程:日常生活中的隐藏AI",
"author": "Jonathan K. Sterling教授",
},
page_content="在他的《共生》续集中,Sterling教授研究了AI在我们日常生活中微妙、不为人注意的存在和影响。它揭示了AI如何成为我们日常例程中的一部分,通常在我们没有明确意识到的情况下。",
),
]
retriever.add_documents(docs)
    ['3a27b0a5-8dbb-4fee-9eba-8b6bc2c252be',
'eeb9fd9b-a3ac-4d60-a55b-a63a25d3b907',
'7ebbdae7-1061-445f-a046-1989f2343d8f',
'c2ab315b-3cab-467f-b23a-b26ed186318d',
'b83765f2-e5d2-471f-8c02-c3350ade4c4f']

进行混合搜索:

retriever.get_relevant_documents("AI的伦理影响")
    [Document(page_content='在她的第二本书中,Simmons博士更深入地探讨了围绕AI开发和部署的伦理考虑。这是对开发人员、政策制定者和整个社会面临的困境的一次启发性考察。', metadata={}),
Document(page_content='对人工智能从起源到未来前景的全面分析。Simmons博士涵盖了AI的伦理考虑、潜力和威胁。', metadata={}),
Document(page_content="在他的《共生》续集中,Sterling教授研究了AI在我们日常生活中微妙、不为人注意的存在和影响。它揭示了AI如何成为我们日常例程中的一部分,通常在我们没有明确意识到的情况下。", metadata={}),
Document(page_content='Sterling教授探讨了人类和人工智能之间和谐共存的潜力。该书讨论了如何将AI融入社会,使其对社会有益且不具有破坏性。', metadata={})]

使用where过滤器进行混合搜索:

retriever.get_relevant_documents(
"AI在社会中的融合",
where_filter={
"path": ["author"],
"operator": "Equal",
"valueString": "Jonathan K. Sterling教授",
},
)
    [Document(page_content='Sterling教授探讨了人类和人工智能之间和谐共存的潜力。该书讨论了如何将AI融入社会,使其对社会有益且不具有破坏性。', metadata={}),
Document(page_content="在他的《共生》续集中,Sterling教授研究了AI在我们日常生活中微妙、不为人注意的存在和影响。它揭示了AI如何成为我们日常例程中的一部分,通常在我们没有明确意识到的情况下。", metadata={})]

使用分数进行混合搜索:

retriever.get_relevant_documents(
"AI在社会中的融合",
score=True,
)
    [Document(page_content='Sterling教授探讨了人类和人工智能之间和谐共存的潜力。该书讨论了如何将AI融入社会,使其对社会有益且不具有破坏性。', metadata={'_additional': {'explainScore': '(bm25)\n(hybrid) Document eeb9fd9b-a3ac-4d60-a55b-a63a25d3b907 contributed 0.00819672131147541 to the score\n(hybrid) Document eeb9fd9b-a3ac-4d60-a55b-a63a25d3b907 contributed 0.00819672131147541 to the score', 'score': '0.016393442'}}),
Document(page_content="在他的《共生》续集中,Sterling教授研究了AI在我们日常生活中微妙、不为人注意的存在和影响。它揭示了AI如何成为我们日常例程中的一部分,通常在我们没有明确意识到的情况下。", metadata={'_additional': {'explainScore': '(bm25)\n(hybrid) Document b83765f2-e5d2-471f-8c02-c3350ade4c4f contributed 0.0078125 to the score\n(hybrid) Document b83765f2-e5d2-471f-8c02-c3350ade4c4f contributed 0.008064516129032258 to the score', 'score': '0.015877016'}}),
Document(page_content='在她的第二本书中,Simmons博士更深入地探讨了围绕AI开发和部署的伦理考虑。这是对开发人员、政策制定者和整个社会面临的困境的一次启发性考察。', metadata={'_additional': {'explainScore': '(bm25)\n(hybrid) Document 7ebbdae7-1061-445f-a046-1989f2343d8f contributed 0.008064516129032258 to the score\n(hybrid) Document 7ebbdae7-1061-445f-a046-1989f2343d8f contributed 0.0078125 to the score', 'score': '0.015877016'}}),
Document(page_content='对人工智能从起源到未来前景的全面分析。Simmons博士涵盖了AI的伦理考虑、潜力和威胁。', metadata={'_additional': {'explainScore': '(vector) [-0.0071824766 -0.0006682752 0.001723625 -0.01897258 -0.0045127636 0.0024410256 -0.020503938 0.013768672 0.009520169 -0.037972264]... \n(hybrid) Document 3a27b0a5-8dbb-4fee-9eba-8b6bc2c252be contributed 0.007936507936507936 to the score', 'score': '0.007936508'}})]