通过阿里云Milvus和LangChain快速构建LLM问答系统

本文介绍如何通过整合阿里云Milvus、阿里云DashScope Embedding模型与阿里云PAI(EAS)模型服务,构建一个由LLM(大型语言模型)驱动的问题解答应用,并着重演示了如何搭建基于这些技术的RAG对话系统。

前提条件

使用限制

  • Milvus实例和PAI(EAS)须在相同地域下。
  • 请确保您的运行环境中已安装Python 3.8或以上版本,以便顺利安装并使用DashScope。

方案架构

该方案架构如下图所示,主要包含以下几个处理过程:

  • 知识库预处理:您可以借助LangChain SDK对文本进行分割,作为Embedding模型的输入数据。
  • 知识库存储:选定的Embedding模型(DashScope)负责将输入文本转换为向量,并将这些向量存入阿里云Milvus的向量数据库中。
  • 向量相似性检索:Embedding模型处理用户的查询输入,并将其向量化。随后,利用阿里云Milvus的索引功能来识别出相应的Retrieved文档集。
  • RAG(Retrieval-Augmented Generation)对话验证:您使用LangChain SDK,并将相似性检索的结果作为上下文,将问题导入到LLM模型(本例中用的是阿里云PAI EAS),以产生最终的回答。此外,结果可以通过将问题直接查询LLM模型得到的答案进行核实。

image

操作流程

步骤一:部署对话模型推理服务

  1. 进入模型在线服务页面。

    1. 登录PAI控制台
    2. 在左侧导航栏单击工作空间列表,在工作空间列表页面中单击待操作的工作空间名称,进入对应工作空间内。
    3. 在工作空间页面的左侧导航栏选择模型部署>模型在线服务(EAS) ,进入模型在线服务(EAS) 页面。image
  2. PAI-EAS模型在线服务页面,单击部署服务

  3. 部署服务页面,选择大模型RAG对话系统

  4. 部署大模型RAG对话系统页面,配置以下关键参数,其余参数可使用默认配置,更多参数详情请参见大模型RAG对话系统

    ********
    参数描述
    基本信息服务名称您可以自定义。
    模型来源使用默认的开源公共模型
    资源配置模型类别通常选择通义千问7B。例如,Qwen1.5-7b。
    资源配置选择按需选择GPU资源配置。例如,ml.gu7i.c16m30.1-gu30。
    向量检索库设置版本类型选择Milvus
    数据库文件夹名称您在Milvus中自定义的Collection名称。
    访问地址Milvus实例的内网地址。您可以在Milvus实例的实例详情页面查看。
    代理端口Milvus实例的Proxy Port。您可以在Milvus实例的实例详情页面查看。
    账号配置为root。
    密码配置为创建Milvus实例时,您自定义的root用户的密码。
    Collection删除是否删除已存在的Collection。取值如下:- True:删除同名的Collection,再创建新的Collection。如果不存在同名Collection,则直接进行创建。
    • False:保留现有的同名Collection,新加入的数据将追加到该Collection中。 | |
      | 专有网络配置 | VPC | 创建Milvus实例选择时的VPC、交换机和安全组。您可以在Milvus实例的实例详情页面查看。 |
      | 交换机 | | |
      | 安全组名称 | | |
  5. 单击部署

    服务状态变为运行中时,表示服务部署成功。

  6. 获取VPC地址调用的服务访问地址和Token。

    1. 单击服务名称,进入服务详情页面。
    2. 基本信息区域,单击查看调用信息
    3. 调用信息对话框的VPC地址调用页签,获取服务访问地址和Token,并保存到本地。

步骤二:创建并执行Python文件

  1. (可选)在ECS控制台创建并启动一个开通公网的ECS实例,用于运行Python文件,详情请参见通过控制台使用ECS实例(快捷版)

    您也可以在本地机器执行Python文件,具体请根据您的实际情况做出合适的选择。

  2. 执行以下命令,安装相关依赖库。


    pip3 install pymilvus langchain dashscope beautifulsoup4
    
  3. 执行以下命令,创建milvusr-llm.py文件。


    vim milvusr-llm.py
    

    milvusr-llm.py文件内容如下所示。


    from langchain_community.document_loaders import WebBaseLoader
    from langchain.text_splitter import RecursiveCharacterTextSplitter
    from langchain.vectorstores.milvus import Milvus
    from langchain.schema.runnable import RunnablePassthrough
    from langchain.prompts import PromptTemplate
    from langchain_community.embeddings import DashScopeEmbeddings
    from langchain_community.llms.pai_eas_endpoint import PaiEasEndpoint
    
    # 设置Milvus Collection名称。
    COLLECTION_NAME = 'doc_qa_db'
    
    # 设置向量维度。
    DIMENSION = 768
    
    loader = WebBaseLoader([
        'https://milvus.io/docs/overview.md',
        'https://milvus.io/docs/release_notes.md',
        'https://milvus.io/docs/architecture_overview.md',
        'https://milvus.io/docs/four_layers.md',
        'https://milvus.io/docs/main_components.md',
        'https://milvus.io/docs/data_processing.md',
        'https://milvus.io/docs/bitset.md',
        'https://milvus.io/docs/boolean.md',
        'https://milvus.io/docs/consistency.md',
        'https://milvus.io/docs/coordinator_ha.md',
        'https://milvus.io/docs/replica.md',
        'https://milvus.io/docs/knowhere.md',
        'https://milvus.io/docs/schema.md',
        'https://milvus.io/docs/dynamic_schema.md',
        'https://milvus.io/docs/json_data_type.md',
        'https://milvus.io/docs/metric.md',
        'https://milvus.io/docs/partition_key.md',
        'https://milvus.io/docs/multi_tenancy.md',
        'https://milvus.io/docs/timestamp.md',
        'https://milvus.io/docs/users_and_roles.md',
        'https://milvus.io/docs/index.md',
        'https://milvus.io/docs/disk_index.md',
        'https://milvus.io/docs/scalar_index.md',
        'https://milvus.io/docs/performance_faq.md',
        'https://milvus.io/docs/product_faq.md',
        'https://milvus.io/docs/operational_faq.md',
        'https://milvus.io/docs/troubleshooting.md',
    ])
    
    docs = loader.load()
    
    text_splitter = RecursiveCharacterTextSplitter(chunk_size=1024, chunk_overlap=0)
    
    # 使用LangChain将输入文档安照chunk_size切分
    all_splits = text_splitter.split_documents(docs)
    
    # 设置embedding模型为DashScope(可以替换成自己模型)。
    
    embeddings = DashScopeEmbeddings(
        model="text-xxxx", dashscope_api_key="your_api_key"
    )
    
    # 创建connection,host为阿里云Milvus的访问域名。
    
    connection_args = {"host": "c-xxxx.milvus.aliyuncs.com", "port": "19530", "user": "your_user", "password": "your_password"}
    # 创建Collection
    vector_store = Milvus(
        embedding_function=embeddings,
        connection_args=connection_args,
        collection_name=COLLECTION_NAME,
        drop_old=True,
    ).from_documents(
        all_splits,
        embedding=embeddings,
        collection_name=COLLECTION_NAME,
        connection_args=connection_args,
    )
    
    # 利用Milvus向量数据库进行相似性检索。
    
    query = "What are the main components of Milvus?"
    docs = vector_store.similarity_search(query)
    print(len(docs))
    
    # 声明LLM 模型为PAI EAS(可以替换成自己模型)。
    
    llm = PaiEasEndpoint(
        eas_service_url="your_pai_eas_url",
        eas_service_token="your_token",
    )
    
    # 将上述相似性检索的结果作为retriever,提出问题输入到LLM之后,获取检索增强之后的回答。
    
    retriever = vector_store.as_retriever()
    
    template = """Use the following pieces of context to answer the question at the end.
    If you don't know the answer, just say that you don't know, don't try to make up an answer.
    Use three sentences maximum and keep the answer as concise as possible.
    Always say "thanks for asking!" at the end of the answer.
    {context}
    Question: {question}
    Helpful Answer:"""
    rag_prompt = PromptTemplate.from_template(template)
    
    rag_chain = (
        {"context": retriever, "question": RunnablePassthrough()}
        | rag_prompt
        | llm
    )
    
    print(rag_chain.invoke("Explain IVF_FLAT in Milvus."))
    

    以下参数请根据实际环境替换。

    参数说明
    参数说明
    COLLECTION_NAME设置Milvus Collection名称,您可以自定义。
    model模型服务灵积的模型名称。您可以在模型服务灵积控制台的总览页面查看。本文示例使用的设置Embedding模型为DashScope,您也可以替换成您实际使用的模型。
    dashscope_api_key模型服务灵积的密钥。您可以在模型服务灵积控制台的API-KEY管理页面查看。
    connection_args- "host":Milvus实例的公网地址。您可以在Milvus实例的实例详情页面查看。
    • "port":Milvus实例的Proxy Port。您可以在Milvus实例的实例详情页面查看。
    • "user":配置为创建Milvus实例时,您自定义的用户名。
    • "password":配置为创建Milvus实例时,您自定义用户的密码。 |
      | eas_service_url | 配置为步骤1中获取的服务访问地址。本文示例声明LLM模型为PAI(EAS),您也可以替换成您实际使用的模型。 |
      | eas_service_token | 配置为步骤1中获取的服务Token。 |
  4. 执行以下命令运行文件。


    python3 milvusr-llm.py
    

    返回如下类似信息。


    4
    IVF_FLAT is a type of index in Milvus that divides vector data into nlist cluster units and compares distances between the target input vector and the center of each cluster. It uses a smaller number of clusters than IVF_FLAT, which means it may have slightly higher query time but also requires less memory. The encoded data stored in each unit is consistent with the original data.
    

如何系统的去学习大模型LLM ?

作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料 包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来

所有资料 ⚡️ ,朋友们如果有需要全套 《LLM大模型入门+进阶学习资源包》,扫码获取~

👉CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

在这里插入图片描述

四、AI大模型商业化落地方案

img

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。
  • 内容
    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
      - L1.4.1 知识大模型
      - L1.4.2 生产大模型
      - L1.4.3 模型工程方法论
      - L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
  • 内容
    • L2.1 API接口
      - L2.1.1 OpenAI API接口
      - L2.1.2 Python接口接入
      - L2.1.3 BOT工具类框架
      - L2.1.4 代码示例
    • L2.2 Prompt框架
      - L2.2.1 什么是Prompt
      - L2.2.2 Prompt框架应用现状
      - L2.2.3 基于GPTAS的Prompt框架
      - L2.2.4 Prompt框架与Thought
      - L2.2.5 Prompt框架与提示词
    • L2.3 流水线工程
      - L2.3.1 流水线工程的概念
      - L2.3.2 流水线工程的优点
      - L2.3.3 流水线工程的应用
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
  • 内容
    • L3.1 Agent模型框架
      - L3.1.1 Agent模型框架的设计理念
      - L3.1.2 Agent模型框架的核心组件
      - L3.1.3 Agent模型框架的实现细节
    • L3.2 MetaGPT
      - L3.2.1 MetaGPT的基本概念
      - L3.2.2 MetaGPT的工作原理
      - L3.2.3 MetaGPT的应用场景
    • L3.3 ChatGLM
      - L3.3.1 ChatGLM的特点
      - L3.3.2 ChatGLM的开发环境
      - L3.3.3 ChatGLM的使用示例
    • L3.4 LLAMA
      - L3.4.1 LLAMA的特点
      - L3.4.2 LLAMA的开发环境
      - L3.4.3 LLAMA的使用示例
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
  • 内容
    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

学习计划:

  • 阶段1:1-2个月,建立AI大模型的基础知识体系。
  • 阶段2:2-3个月,专注于API应用开发能力的提升。
  • 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
  • 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的所有 ⚡️ 大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

全套 《LLM大模型入门+进阶学习资源包↓↓↓ 获取~

👉CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

  • 21
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值