【大模型】-向量数据库

文章目录

向量数据库

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)
相关推荐
CC大煊1 小时前
一个Javaer的AI转型笔记(1):入坑LangChain,我的第一个hello world
笔记·langchain
Mr.Daozhi4 小时前
RAG 进阶实战:跑通 Demo 后我连续翻了 6 次车,逐一修复才真正可用(含 Gradio Web 版)
前端·数据库·langchain·大模型·gradio·rag·科研工具
swipe6 小时前
混合检索 RAG 的工程化实践:不是多查几路,而是把召回、重排和上下文预算管好
后端·langchain·llm
啊哈哈哈哈哈啊哈哈7 小时前
LangChain 与 LlamaIndex 实现 RAG:代码知识点总结
langchain
lhxcc_fly9 小时前
2.LangChain--聊天模型之流式传输
ai·langchain·llm·流式传输
lhxcc_fly12 小时前
3.LangChain组件--消息
langchain·llm·messages
我材不敲代码12 小时前
Llamafactory的使用
langchain
喵叔哟12 小时前
Day 4:提示工程与输出解析
langchain
索西引擎13 小时前
【langchain 1.0】ChromaDB 原生 API 实战:为 LangChain 向量库打造管理工具集
python·ai·langchain
是一个Bug13 小时前
LangChain 入门完全指南:核心概念、学习路线与实战 Demo
学习·langchain