首页 文章 精选 留言 我的

精选列表

搜索[问答社区],共10000篇文章
优秀的个人博客,低调大师

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

背景介绍 阿里云向量检索 Milvus 版是一款云上全托管服务,确保了与开源Milvus的100%兼容性,并支持无缝迁移。在开源版本的基础上增强了可扩展性,能提供大规模 AI 向量数据的相似性检索服务。相比于自建,目前阿里云Milvus具备易用性、可用性、安全性、低成本与生态优势。凭借其开箱即用的特性、灵活的扩展能力和全链路监控告警,阿里云Milvus 云服务成为多样化 AI 应用场景的理想选择,包括多模态搜索、检索增强生成(RAG)、搜索推荐、内容风险识别等。您还可以利用开源的 Attu 工具进行可视化操作,进一步促进应用的快速开发和部署。 本文介绍如何通过整合阿里云向量检索服务Milvus版、阿里云百炼DashScope Embedding模型与阿里云PAI(EAS)模型服务,构建一个由LLM(大型语言模型)驱动的问题解答应用,并着重演示了如何搭建基于这些技术的RAG对话系统。 前提条件 已创建Milvus实例。 进入阿里云Milvus页面(https://www.aliyun.com/product/milvus),登录阿里云Milvus控制台(https://milvus.console.aliyun.com/#/overview)。并在左侧导航栏,单击Milvus实例,并继续创建实例。 已开通PAI(EAS)并创建了默认工作空间。 登录PAI控制台(https://pai.console.aliyun.com),在左上角选择需要开通的地域后,进行认证、授权并开通服务,待开通成功后,便可进入控制台进行AI开发。 已开通百炼服务并获得API-KEY。 登陆阿里云百炼大模型服务平台(https://bailian.console.aliyun.com),在页面右上角的下拉菜单中单击API-KEY,进行创建。 使用限制 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模型得到的答案进行核实。 操作流程 步骤一:部署对话模型推理服务 进入模型在线服务页面。 登录PAI控制台(https://pai.console.aliyun.com/)。 在左侧导航栏单击工作空间列表,在工作空间列表页面中单击待操作的工作空间名称,进入对应工作空间内。 在工作空间页面的左侧导航栏选择模型部署>模型在线服务(EAS),进入模型在线服务(EAS)页面。 在模型在线服务页面,单击部署服务。 在部署服务页面,选择大模型RAG对话系统。 在部署大模型RAG对话系统页面,配置以下关键参数,其余参数可使用默认配置,更多参数详情请参见大模型RAG对话系统(https://help.aliyun.com/zh/pai/user-guide/deploy-a-rag-based-dialogue-system)。 单击部署。 当服务状态变为运行中时,表示服务部署成功。 获取VPC地址调用的服务访问地址和Token。 单击服务名称,进入概览页面。 在基本信息区域,单击查看调用信息。 在调用信息对话框的VPC地址调用页签,获取服务访问地址和Token,并保存到本地。 步骤二:创建并执行Python文件 (可选)在ECS控制台创建并启动一个开通公网的ECS实例,用于运行Python文件,详情请参见通过控制台使用ECS实例(快捷版)(https://help.aliyun.com/zh/ecs/getting-started/create-and-manage-an-ecs-instance-by-using-the-ecs-console)。 您也可以在本地机器执行Python文件,具体请根据您的实际情况作出合适的选择。 执行以下命令,安装相关依赖库。 pip3 install pymilvus langchain dashscope beautifulsoup4 执行以下命令,创建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-embedding-v2", 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.")) 以下参数请根据实际环境替换。 执行以下命令运行文件。 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. 相关信息 更多关于Milvus的介绍,请参见什么是向量检索服务Milvus版(https://help.aliyun.com/zh/milvus/product-overview/what-is-the-vector-retrieval-milvus-version)。 Milvus最新动态: 预付费包年折扣:1年85折、2年7折、3年5折; 产品动态: 如有疑问,可加入向量检索 Milvus 版用户交流钉群59530004993咨询。 询问AI

优秀的个人博客,低调大师

大数据计算服务MaxCompute每日问答汇总(持续更新中)

大数据计算服务(MaxCompute,原名ODPS)是一种快速、完全托管的TB/PB级数据仓库解决方案。MaxCompute向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题,有效降低企业成本,并保障数据安全。MaxCompute主要服务于批量结构化数据的存储和计算,可以提供海量数据仓库的解决方案以及针对大数据的分析建模服务。随着社会数据收集手段的不断丰富及完善,越来越多的行业数据被积累下来。数据规模已经增长到了传统软件行业无法承载的海量数据(百GB、TB、乃至PB)级别。在分析海量数据场景下,由于单台服务器的处理能力限制,数据分析者通常采用分布式计算模式。但分布式的计算模型对数据分析人员提出了较高的要求,且不易维护。使用分布式模型,数据分析人员不仅需要了解业务需求,同时还需要熟悉底层

优秀的个人博客,低调大师

2019java开发面试问答合集(附答案)

10G整数文件中寻找中位数或者第K大数 采用基于字节的桶排序将数字分到不同的桶中,比如找到第k大数,则先找出每个桶中的第k大数,在比较。整形是4byte,有32位,先按高八位建255个桶如果内存只有2g,则每次读取2g的数据遍历放到255个桶中,并统计255个桶的量,2g读取完后将每个桶的数据导出到磁盘,循环读完10g数据。这时根据255个桶的计数计算出中位数在哪个桶,然后开始建后续8位的桶,直到最后低8位也分完,这时候对桶内数据进行快排即可。如何实现分布式锁 数据库乐观锁,利用了mysql update行锁的特点,在每次update前先select出数据然后根据数据的版本进行update,如果版本变了就不更新并把错误抛给用户重试最终达到一致。redis setnx,当该key不存在时就设置value,如果已经存在该key了就直接返回。zookeeper 不能重复创建同一个节点,创建持久结点时需要主动删除结点释放,创建临时结点时断开连接就会释放什么是分布式系统,分布式原理是什么 将一个大的系统拆分成多个细小的子系统,子系统之间通过网络通信的构成的大系统称为分布式系统。 分布式事务怎么做 事务有四个特性acid a:原子性,事务中的操作不可分割,要么一起成功,要么一起失败c: 一致性,数据库中的数据要是完整的,也包含各资源状态的一致i:隔离性,事务之间要有自己的工作空间,不能相互干扰d:持久性,事务完成后数据要落盘数据库的事务是使用undo和redo日志做的,undo会记录未提交操作的数据用来回滚,redo记录已提交操作的数据落盘。常用的分布式事务有几种方式: 2pc,两阶段提交,服务a发prepare请求给协调器,协调器将请求写到本地日志,然后发送prepare给其他各服务,执行者收到请求后执行本地事务,但不会commit,然后将结果返回给协调器,协调器判断所有的返回如果都成功则让所有执行者提交commit,如果有失败的则全部回滚。消息表,服务a在发起事务的时候执行本地事务的消息同时写入消息表然后发送消息给服务b,服务b在完成本地事务后回消息给服务a调度器清除消息表,如果没有清除,则事务调度器读取消息表发送消息给服务b,这就需要服务b有幂等性消息事务,消息事务是通过消息中间件实现的类似2pc功能比如rocketmq,服务a提交prepare给mq,然后执行本地事务,如果失败则回滚,如果成功则确认prepare消息,mq相当于事务调度器会定期扫描prepare消息询问发送方是否要发送消息,而消费方如果失败则需要一直重试TCC事务补偿,先锁住资源,然后使用锁住的资源执行业务逻辑,如果失败则释放资源,如果成功则落盘。分布式cap,base理论 分布式系统的cap理论,c一致性,a可用性,p分区容错性,因为网络和机器原因不可控所以p是一定要保障的,大家都知道cap不能同时满足,所以只能在c和a中选择,因此有base理论,ba基本可用,s软状态(在最终一致前允许存在不一样的状态),e最终一致 zookeeper 使用场景 配置管理,由于强一致性,可以存放集群配置集群管理,有新机器加入时在指定目录创建临时znode,然后集群所有机器对目录创建watch,当有机器断连时临时znode会自动删除,集群机器收到通知分布式锁,集群机器同时创建znode,创建成功的抢到锁,zonde删除释放锁队列,采用编号znode,按照编号顺序依次执行集群 集群中有三种角色,leader,follower和observer,leader负责写操作,保证集群事务的顺序性,follower参与选举,observer负责读操作。只有当集群初始化和领导者失去多数派支持时会发生领导者选举。 原理 zookeeper的核心是原子广播,采用zab协议,主要有恢复模式(选主)和广播模式(同步) 如何批量替换文本中的字符串 sed -i "s/x/y/g" *一个文件中可以使用vimtr命令替换aws gsub函数常用的查看cpu,内存,网络,磁盘的命令有哪些 top查看cpu命令:mpstat查看内存:free查看网络:netstat lsof查看端口,统计句柄查看磁盘:df du fdisknginx proxy_pass和rewrite的区别 proxy_pass请求在后台跳转,不影响浏览器urlrewrite会发起3xx请求,影响浏览器urlnginx和tomcat的区别 nginx是http server,常用做静态内容服务和代理服务器,直接外来请求转发给后面的应用服务器(tomcat,Django等)tomcat是一个application server,更准确的说是一个servlet/jsp应用的容器,处理http请求并生成动态页面。正向代理和反向代理 正向代理代理的是客户端,服务端不知道真正的客户端是谁,场景如vpn反向代理代理的是服务端,客户端不知道真正的服务端是谁,场景如负载均衡DNS 域名正向解析和反向解析 正向解析是指根据域名找到ip地址反向解析是根据ip地址找到域名,通常用来屏蔽某个ip上的域名或者邮件一个域名解析的过程 客户向本地dns服务器发起请求,本地dns服务器一层一层向上递归查询是否有域名解析,直到根服务器根服务器返回顶级域的dns服务器地址给本地服务器,本地服务器迭代查询:根-顶级域-二级域-三级域,直到某个域服务器返回地址给本地服务器,本地服务器缓存该解析,然后返回给客户端网络 tcp/ip协议,三次握手,四次挥手 三次握手 客户端发起请求,发送syn报文,seq=x服务端收到syn请求后,返回ack,此时ack=x+1,然后也返回一个syn,seq=y客户端收到syn后,返回ack,此时ack=y+1,连接建立四次挥手 客户端发起请求,发送fin报文,seq=x服务端收到fin报文后,返回ack,此时ack=x+1,此步骤确认客户端已不会发送数据,但是服务端数据可能没有返回服务端确认数据全部返回后,发送fin报文,seq=y,告诉客户端已处理完,可以关闭客户端返回ack=y+1,关闭连接snat 和 dnat 内网机器要访问外网,需要snat,防火墙修改来源ip为公网出口ip发送请求包给外网,外网机器接收到的请求包的来源是公网出口ip而不是真正的内网ip外网访问内网机器,需要dnat,外网发送请求包目标地址是公网出口ip,防火墙根据路由修改请求包的目标为内网ip发送给内网机器,内网机器返回时防火墙修改源地址为公网出口ip返回给外网机器docker 什么是docker容器,什么是docker镜像 Docker镜像用于创建容器。使用build命令创建镜像,并且在使用run启动时它们将生成容器。Docker容器包括应用程序及其所有依赖项,但与其他容器共享内核,作为主机操作系统上用户空间中的独立进程运行。docker run和docker start有什么区别 docker run = 创建容器docker create + 启动容器docker start docker file COPY 和 ADD的区别 COPY指令能够将构建命令所在的主机本地的文件或目录,复制到镜像文件系统。ADD指令不仅能够将构建命令所在的主机本地的文件或目录,而且能够将远程URL所对应的文件或目录,作为资源复制到镜像文件系统,还可以解压压缩文件并把它们添加到镜像中。如何缩小docker镜像的体积 尽量在同一层运行更多的命令由于copy,add,run都会生成新的层,尽量使用run命令执行copy和add,如wget移除编译打包依赖使用小体积的 Alpine 基础镜像docker的网络模式 host模式 和宿主机共用网络namesapce,端口直接使用宿主机的端口 other container模式 和host模式很像,只是共用的是另一个容器的网络namespace 需要java学习路线图的私信笔者“java”领取哦!另外喜欢这篇文章的可以给笔者点个赞,关注一下,每天都会分享Java相关文章!还有不定时的福利赠送,包括整理的学习资料,面试题,源码等~~

优秀的个人博客,低调大师

从问题到答案,阿里云问答算法句义理解

背景简介 随着阿里云业务的增长,售后工程师们需要解决的问题数量逐步增大,在解决复杂的技术问题的同时,还是有不小一部分的同质化的业务咨询问题需要解决。所以,这时候云博士的出现就是为了解决那些可以通过机器回答的问题,让售后工程师们能聚焦在更加紧急复杂的问题上。随着数据的沉淀,我们积累了大量的用户历史问题,对应解决的知识点的数据,算法如何使用这些数据,然后解决用户问题,我们会在下面的篇幅中逐步介绍。 如何找到相似问法? 当算法知道“机器无法打开”对应的是知识点K,那么用户遇到了一个问题:“电脑不能启动”的时候,我们希望算法能直接将这个这个问题等同于已经知道的“机器无法打开”,然后推送给用户知识点K。而这里头的关键就是,“电脑不能启动” = “机器无法打开”。从传统的角度来看,如果我们用关键字匹配,不难发现上面的两个问题是正交的,即两个问题中并

优秀的个人博客,低调大师

社区新手规范必读

说明:本论坛主要面向支付宝接口开发者,在论坛中只讨论和支付宝接口相关的问题1.不要发出自己账号中的密钥(论坛管理者也不会主动向您索取您的个人私钥)2.如果发现私钥泄露,请使用密钥工具及时生成及时更换保证账号安全3.不要发与支付宝接口无关的内容,发现会被删帖封号4.欢迎在论坛中分享自己的经验贴,帮助后面的同学5.欢迎在论坛中提出好的建议,来完善大家的开发体验6.提问帖请选择提问类型,分享帖选择分享类型 如何提问:提问的目的都是想最快的速度获取到想要的结果,那么标准的提问方式就是最有效获取答案的方式一,需求类型提问方式 错误提问方式 1.我有个门店想使用支付宝收款不知道怎么集成? 正确提问方式 本人身份+场景描述+实现效果+需求 例:

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册