• 在LangChain中使用Milvus + openai使用


    Milvus(opens in a new tab) 是一个存储、索引和管理由深度神经网络和其他机器学习(ML)模型生成的大规模嵌入向量的数据库。

    1.文档分割

    from langchain.document_loaders import PyPDFLoader
    
    '''
    pdf
    '''
    loader = PyPDFLoader("D:\py\LangChaindao\操作系统原理.pdf")
    docs = loader.load()
    # 将文档拆分成更小的块
    text_splitter = CharacterTextSplitter(chunk_size=1024, chunk_overlap=0)
    docs = text_splitter.split_documents(docs)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    from langchain.document_loaders import WebBaseLoader
    '''
    网页1
    '''
    loader = WebBaseLoader([
        #"https://zhuanlan.zhihu.com/p/105945721",
        # "https://www.zhihu.com/question/382955637",
        "https://baike.baidu.com/item/%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f/192"
    ])
    docs = loader.load()
    # 将文档拆分成更小的块
    text_splitter = CharacterTextSplitter(chunk_size=1024, chunk_overlap=0)
    docs = text_splitter.split_documents(docs)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    2.使用嵌入 向量化存储+查找

    目标是从我们的长文本中选择相关的块,但是我们要提取哪些块?最流行的方法是基于比较向量嵌入来提取相似的文本。
    使用 OpenAIEmbeddings

    def fun(docs):
        # 设置一个嵌入模型,将文档块转换为向量嵌入。
        embeddings = OpenAIEmbeddings(engine="text-embedding-ada-002")
        # print(embeddings)
        # 设置用于保存矢量嵌入的矢量存储。这里我们使用Milvus作为向量存储。
        Milvus.from_documents(
            docs,
            embedding=embeddings,
            connection_args={"host": HOST, "port": PORT}
        )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3.问答 向量化查询与返回topK

    embeddings = OpenAIEmbeddings(engine="text-embedding-ada-002")
    vector_store = Milvus.from_documents(
            "",
            embedding=embeddings,
            connection_args={"host": HOST, "port": PORT}
        )
    query = "操作系统的发展历程?"
    docs = vector_store.similarity_search(query)
    print(docs)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    topK

    related_docs_with_score = vector_store.similarity_search_with_score(query,k=self.top_k)
    
    • 1

    在这里插入图片描述

    4 .相关文档 以提示词的方式给openai 然后结合回答

    chain = load_qa_with_sources_chain(AzureOpenAI(deployment_name=model, model_name="gpt-35-turbo", temperature=0),
                                       chain_type="map_reduce", return_intermediate_steps=True)
    query = "操作系统的发展历程?"
    # 包括intermediate_steps和output_text。前者指示搜索期间引用的文档,后者是问题的最终答案
    data = chain({"input_documents": docs, "question": query}, return_only_outputs=False)
    print(data)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    来源:
    1.[LangChain 🦜️🔗 中文网]https://www.langchain.com.cn/modules/indexes/vectorstores/examples/milvus
    2.[用 LangChain 和 Milvus 从零搭建 LLM 应用]https://zhuanlan.zhihu.com/p/644603736

  • 相关阅读:
    springboot毕设项目仓库管理系统872z5(java+VUE+Mybatis+Maven+Mysql)
    初步了解华为的MTL(市场到线索)流程的基本概念和来龙去脉
    三十三、【进阶】索引的分类
    Sentinel规则
    众昂矿业:新能源或成萤石最大应用领域
    安卓 tcp 客户端
    想制作gif图,把自己的操作输出到文章
    Spring框架中bean的生命周期
    25个Matplotlib图的Python代码,复制直接可用
    scala(五):面向对象-包、类型、继承和多态、抽象类、单列对象、特质
  • 原文地址:https://blog.csdn.net/qq_56352553/article/details/133611657