5分钟,结合 LangChain 搭建自己的生成式智能问答系统
云搜索 VectorStore 准备
- 登录火山引擎云搜索服务,创建实例集群,集群版本选择 7.10.
- 在火山引擎方舟平台大模型广场选择合适的模型,并查看API调用说明
- Mapping 准备
PUT langchain_faq { "mappings": { "properties": { "message": { "type": "text" }, "message_embedding": { "type": "knn_vector", "dimension": 768 }, "metadata": { "type": "text" } } }, "settings": { "index": { "refresh_interval": "10s", "number_of_shards": "3", "knn": true, "knn.space_type": "cosinesimil", "number_of_replicas": "1" } } }
Client 准备
- 依赖安装
pip install volcengine --user pip install langchain --user
- 初始化
#Embedding from langchain.embeddings import HuggingFaceEmbeddings #VectorStore from langchain.vectorstores import OpenSearchVectorSearch #LLM Base from langchain.llms.base import LLM #Document loader from langchain.document_loaders import WebBaseLoader #LLM Cache from langchain.cache import InMemoryCache #Volcengine from volcengine.ApiInfo import ApiInfo from volcengine import Credentials from volcengine.base.Service import Service from volcengine.ServiceInfo import ServiceInfo import json import os from typing import Optional, List, Dict, Mapping, Any #加载Embeddings,这里使用huggingFace 作为embedding embeddings = HuggingFaceEmbeddings() # 启动llm的缓存 llm_cache = InMemoryCache()
MaaS 准备
maas_host = "maas-api.ml-platform-cn-beijing.volces.com" api_chat = "chat" API_INFOS = {api_chat: ApiInfo("POST", "/api/v1/" + api_chat, {}, {}, {})} class MaaSClient(Service): def __init__(self, ak, sk): credentials = Credentials.Credentials(ak=ak, sk=sk, service="ml_maas", region="cn-beijing") self.service_info = ServiceInfo(maas_host, {"Accept": "application/json"}, credentials, 60, 60, "https") self.api_info = API_INFOS super().__init__(self.service_info, self.api_info) client = MaaSClient(os.getenv("VOLC_ACCESSKEY"), os.getenv("VOLC_SECRETKEY")) #引入LLM Base,构造Volc GLM Client, 用于和LLM 对话 from langchain.llms.base import LLM class ChatGLM(LLM): @property def _llm_type(self) -> str: return "chatglm" def _construct_query(self, prompt: str) -> Dict: query = "human_input is: " + prompt return query @classmethod def _post(cls, query: Dict) -> Any: request = ({ "model": { "name": "chatglm-130b" }, "parameters": { "max_tokens": 2000, "temperature": 0.8 }, "messages": [{ "role": "user", "content": query }] }) print(request) resp = client.json(api=api_chat, params={}, body=json.dumps(request)) return resp def _call(self, prompt: str, stop: Optional[List[str]] = None) -> str: query = self._construct_query(prompt=prompt) resp = self._post(query=query) return resp
写入数据集
# Document loader from langchain.document_loaders import WebBaseLoader loader = WebBaseLoader("https://lilianweng.github.io/posts/2023-06-23-agent/") data = loader.load() # Split from langchain.text_splitter import RecursiveCharacterTextSplitter text_splitter = RecursiveCharacterTextSplitter(chunk_size = 500, chunk_overlap = 0) all_splits = text_splitter.split_documents(data) #Embeddings from langchain.embeddings import HuggingFaceEmbeddings embeddings = HuggingFaceEmbeddings() #VectorStore # URL 为云搜索VectorStore的访问URL, # http_auth 为访问云搜索的用户密码 from langchain.vectorstores import OpenSearchVectorSearch vectorstore = OpenSearchVectorSearch.from_documents( documents = all_splits, embedding = HuggingFaceEmbeddings(), opensearch_url = "URL", http_auth = ("user", "password"), verify_certs = False, ssl_assert_hostname = False, index_name = "langchain_faq", vector_field ="message_embedding", text_field = "message", metadata_field = "message_metadata", ssl_show_warn = False,)
查询 + Retriever
query = "What are the approaches to Task Decomposition?" docs = vectorstore.similarity_search( query, vector_field="message_embedding", text_field="message", metadata_field="message_metadata",) retriever = vectorstore.as_retriever(search_kwargs={"vector_field": "message_embedding", "text_field":"message", "metadata_field":"message_metadata"})
LLM Chat
from langchain.chains import RetrievalQA llm = ChatGLM() retriever = vectorstore.as_retriever(search_kwargs={"vector_field": "message_embedding", "text_field":"message", "metadata_field":"message_metadata"}) qa_chain = RetrievalQA.from_chain_type(llm,retriever=retriever) qa_chain({"query": query})

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
一文读懂OSS、NAS、EBS有什么区别?
近期,AIGC、GPT大模型、数据中台等热点话题备受关注,那么具体在不同的行业场景下,如何选择对应的存储介质呢?选型的时候该考虑哪些因素呢?通过本文主要介绍常用的存储类型及它们之间的对比差异,辅助帮助大家在不同需求和场景下选择合适的存储类型。 存储类型简介 存储的物理层实际无非就是磁盘(disk),即磁记录技术存储数据的存储器。磁盘是计算机主要的存储介质,可以存储大量的二进制数据,并且断电后也能保持数据不丢失。早期计算机使用的磁盘是软磁盘(Floppy Disk,简称软盘),如今常用的磁盘是硬磁盘(Hard disk,简称硬盘)。 磁盘知识简介 存储磁盘常见的三大指标:吞吐量、IOPS、时延。三个指标之间存在着关系,具体呈现为如下公式:每秒吞吐 = I/Osize * IOPS * 并行度(IOPS-延时)。 1.吞吐量是指对网络、设备、端口、虚电路或其他设施,单位时间内成功地传送数据的数量(以比特、字节、分组等测量)。 2.IOPS是(Input/Output Operations Per Second)是一个用于计算机存储设备(如机械硬盘HDD、固态硬盘SSD、混合硬盘HHD或存储...
- 下一篇
云原生基础设施实践:NebulaGraph 的 KubeBlocks 集成故事
像是 NebulaGraph 这类基础设施上云,通用的方法一般是将线下物理机替换成云端的虚拟资源,依托各大云服务厂商实现“服务上云”。但还有一种选择,就是依托云数据基础设施,将数据库产品变成为云生态的一环,不只是提供自身的数据云服务,还能同其他的数据库一起分析挖掘业务数据价值。 在本篇分享中,让你在了解何为云原生基础设施之余,可以获得更多的 NebulaGraph 部署使用方法。又有新的使用姿势了,下面一起来了解下这个集成过程以及相关的使用方法。 KubeBlocks 是什么 在介绍之前,可能有了解云生态的小伙伴,会好奇标题中的 “KubeBlocsk”是什么?它带有 Kube- 前缀,和云原生什么关系? KubeBlocks 的名字源自 Kubernetes(K8s)和乐高积木(Blocks),致力于让 K8s 上的数据基础设施管理就像搭乐高积木一样,既高效又有趣。 它是基于 Kubernetes 的云原生数据基础设施,为用户提供了关系型数据库、NoSQL 数据库、向量数据库以及流计算系统的管理控制功能。 下面开始进入主菜,KubeBlocsk 对 NebulaGraph 的集成。别...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS关闭SELinux安全模块
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16