【大模型】-向量数据库

文章目录

向量数据库

1.embedings使用

python 复制代码
# 先安装必要的库(如果你还没安装的话)
# !pip install langchain-openai openai

from langchain_openai import OpenAIEmbeddings
import os

# 设置你的 OpenAI API 密钥(建议使用环境变量)
os.environ["OPENAI_API_KEY"] = "你的-api-key-放在这里"

# 初始化嵌入模型
embeddings_model = OpenAIEmbeddings()

# 嵌入多段文本
embeddings = embeddings_model.embed_documents([
    "嗨!",
    "哦,你好!",
    "你叫什么名字?",
    "我的朋友们叫我World",
    "Hello World! "
])

# 打印结果:文本数量和第一段文本的向量维度
print(len(embeddings), len(embeddings[0]))

#输出结果

len(embeddings):表示你传入的文本数量(这里是 5)。

len(embeddings[0]):表示第一段文本"嗨!"对应的嵌入向量维度,对于 OpenAI 的 text-embedding-ada-002 模型来说,通常是 1536 维。

如果你想嵌入单个文本(而不是列表),可以使用 embed_query 方法:

python 复制代码
single_embedding = embeddings_model.embed_query("你好!")
print(len(single_embedding))  # 也会是 1536

2. 相似度检索

python 复制代码
import numpy as np
from langchain_community.embeddings import DashScopeEmbeddings
from numpy.linalg import norm

# 模拟一个嵌入生成函数(实际应用中应该使用真实的嵌入模型)
# def get_embedding(text):
#     """
#     模拟生成文本的嵌入向量。
#     实际使用时,应该替换为真实的嵌入模型(如OpenAI, Sentence-BERT等)。
#     """
#     # 这里为了演示,生成一个随机的1536维向量(模拟OpenAI的嵌入维度)
#     np.random.seed(hash(text) % 10000)  # 让相同文本产生相同向量
#     return np.random.randn(1536)

def get_embedding(text):
    """
   使用 LangChain 封装的 DashScopeEmbeddings
   """
    # 初始化通义嵌入模型
    embeddings = DashScopeEmbeddings(
        model="text-embedding-v3",
        dashscope_api_key="sk-秘钥"
    )

    embedding_vector = embeddings.embed_query(text)
    return embedding_vector

def cosine_similarity(vec1, vec2):
    """
    计算两个向量之间的余弦相似度。
    """
    # 将列表转换为numpy数组
    vec1 = np.array(vec1)
    vec2 = np.array(vec2)

    # 计算余弦相似度
    dot_product = np.dot(vec1, vec2)
    norm_product = norm(vec1) * norm(vec2)

    if norm_product == 0:
        return 0
    return dot_product / norm_product

def search_documents(query, documents):
    """
    在文档集合中搜索与查询最相似的文档。

    参数:
        query: 查询字符串
        documents: 文档列表

    返回:
        (最相似的文档, 相似度得分)
    """
    # 调用 get_embedding 函数生成查询字符串的嵌入向量 query_embedding。
    query_embedding = get_embedding(query)

    # 对每个文档调用 get_embedding 函数生成文档的嵌入向量,存储在 document_embeddings 列表中。
    document_embeddings = [get_embedding(doc) for doc in documents]

    # 计算查询嵌入向量与每个文档嵌入向量之间的余弦相似度,存储在 similarities 列表中
    similarities = [cosine_similarity(query_embedding, doc_embedding)
                    for doc_embedding in document_embeddings]

    # 找到相似度最高的文档的索引 most_similar_index。
    most_similar_index = similarities.index(max(similarities))

    # 返回相似度最高的文档和相似度得分。
    return documents[most_similar_index], max(similarities)

# 测试文本搜索功能
if __name__ == "__main__":
    documents = [
        "OpenAI的ChatGPT是一个强大的语言模型。",
        "天空是蓝色的,阳光灿烂。",
        "人工智能正在改变世界。",
        "Python是一种流行的编程语言。"
    ]

    query = "人工智能"

    # 执行搜索
    result, score = search_documents(query, documents)

    print(f"查询: '{query}'")
    print(f"最相似的文档: '{result}'")
    print(f"相似度得分: {score:.4f}")

    # 显示所有文档的相似度
    print("\n所有文档相似度:")
    query_embedding = get_embedding(query)
    for i, doc in enumerate(documents):
        doc_embedding = get_embedding(doc)
        similarity = cosine_similarity(query_embedding, doc_embedding)
        print(f"文档 {i+1}: {doc} (相似度: {similarity:.4f})")
        
#输出
查询: '人工智能'
最相似的文档: '人工智能正在改变世界。'
相似度得分: 0.7738

所有文档相似度:
文档 1: OpenAI的ChatGPT是一个强大的语言模型。 (相似度: 0.5928)
文档 2: 天空是蓝色的,阳光灿烂。 (相似度: 0.4756)
文档 3: 人工智能正在改变世界。 (相似度: 0.7738)
文档 4: Python是一种流行的编程语言。 (相似度: 0.5269)
相关推荐
Dontla11 小时前
黑马大模型RAG与Agent智能体实战教程LangChain提示词——6、提示词工程(提示词优化、few-shot、金融文本信息抽取案例、金融文本匹配案例)
redis·金融·langchain
JaydenAI11 小时前
[LangChain之链]LangChain的Chain——由Runnable构建的管道
python·langchain
草帽lufei11 小时前
LangChain 框架核心向量存储
langchain
猫头虎11 小时前
如何使用Docker部署OpenClaw汉化中文版?
运维·人工智能·docker·容器·langchain·开源·aigc
qq_54702617913 小时前
LangChain 1.0 核心概念
运维·服务器·langchain
uXrvbWJGleS13 小时前
三相两电平整流器Simulink仿真探究
langchain
猫头虎13 小时前
手动部署开源OpenClaw汉化中文版过程中常见问题排查手册
人工智能·langchain·开源·github·aigc·agi·openclaw
程序员ken14 小时前
深入理解大语言模型(8) 使用 LangChain 开发应用程序之上下文记忆
人工智能·python·语言模型·langchain
一切尽在,你来1 天前
第二章 预告内容
人工智能·langchain·ai编程
一切尽在,你来1 天前
1.1 AI大模型应用开发和Langchain的关系
人工智能·langchain