【大模型】-向量数据库

文章目录

向量数据库

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)
相关推荐
o_insist6 分钟前
LangChain1.0 实现 PDF 文档向量检索全流程
人工智能·python·langchain
猫头虎2 小时前
Claude Code 2026 年1月9日迎来大更新:Agent 能力增强(2.1.0 详解 + 升级指南)
ide·人工智能·macos·langchain·编辑器·aigc·ai编程
学Linux的语莫2 小时前
Rag操作-Ragas评估
langchain·rag
学历真的很重要18 小时前
LangChain V1.0 Context Engineering(上下文工程)详细指南
人工智能·后端·学习·语言模型·面试·职场和发展·langchain
工藤学编程19 小时前
零基础学AI大模型之LangChain智能体执行引擎AgentExecutor
人工智能·langchain
Smoothzjc1 天前
别再只把AI当聊天机器人了!揭秘大模型进化的终极形态,看完颠覆你的认知!
后端·langchain·ai编程
SCBAiotAigc1 天前
langchain1.x学习笔记(三):langchain之init_chat_model的新用法
人工智能·python·langchain·langgraph·deepagents
工藤学编程1 天前
零基础学AI大模型之LangChain智能体之initialize_agent开发实战
人工智能·langchain
ohyeah2 天前
打造 AI 驱动的 Git 提交规范助手:基于 React + Express + Ollama+langchain 的全栈实践
langchain·全栈·ollama
XiaoYu20022 天前
第11章 LangChain
前端·javascript·langchain