这篇博客文章介绍了如何利用Groq,一个非常强大的开源推理引擎,来创建一个基于RAG(检索增强生成)的问答系统。我们还将使用开源的大型语言模型(LLMs)来处理和回答用户的问题。
为什么选Groq?为大规模语言模型提供卓越性能 🤔Groq 是一家领先的 AI 基础设施公司,专注于开发世界上最快的 AI 推理技术。他们的 LPU™(语言处理单元(LPU™))推理引擎是一款专为卓越的计算速度、高质量和能效设计的软硬件平台。Groq 的独特之处在于:
LPU™ 推理引擎是一款专为语言处理任务设计的软硬件平台。与擅长并行计算的GPU不同,LPU 更侧重于顺序处理,使其成为像 LLM 推理这样需要序列生成的任务的理想选择,其中序列生成尤为重要。
Groq的开发者友好程度 👉Groq提供了多种途径开始使用并集成他们的技术。
Groq Engine 中可用的大型语言模型Groq API密钥
网址
模型名
Groq 通过其 API 提供了一系列预训练的大型语言模型(LLM)的访问权限。虽然这些具体的模型可能会随着时间而有所变化,但以下是一些当前可用的示例(截至 2024 年 5 月 27 日的)。
import streamlit as st import os from langchain_groq import ChatGroq from langchain_community.document_loaders import WebBaseLoader from langchain.embeddings import OllamaEmbeddings from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.chains.combine_documents import create_stuff_documents_chain from langchain_core.prompts import ChatPromptTemplate from langchain.chains import create_retrieval_chain from langchain_community.vectorstores import FAISS import time from dotenv import load_dotenv load_dotenv() ## 加载Groq API密钥 groq_api_key = os.environ['GROQ_API_KEY']
这段代码导入了所需的库,并从环境变量中获取您的Groq API密钥(API key)。您可以通过遵循以下步骤免费获取Groq API密钥。
第二. 数据加载及预处理
这一部分侧重于使用WebBaseLoader从网站加载文档。然后,将文档拆分成更小的片段以便处理,并创建向量嵌入以高效地根据文档的意义进行比较,从而提高效率。
如果没有 'vector' 在 st.session_state 中: st.session_state.embeddings=OllamaEmbeddings() st.session_state.loader=WebBaseLoader("https://docs.smith.langchain.com/") st.session_state.docs=st.session_state.loader.load() st.session_state.text_splitter=RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200) st.session_state.final_documents=st.session_state.text_splitter.split_documents(st.session_state.docs[:50]) st.session_state.vectors=FAISS.from_documents(st.session_state.final_documents,st.session_state.embeddings)
3. 大型语言模型集成与Prompt设计
在这里,我们使用ChatGroq类,以及您的Groq API密钥来创建一个LLM实例。指定的模型名称(“mixtral-8x7b-32768”)是Groq引擎中可用选项之一。
我们接着用ChatPromptTemplate类定义一个提示。这个提示让LLM基于给定的文档内容来回答用户的问题。
最后呢,我们创建了两个这样的重要链条:
st.title("ChatGroq 演示") llm=ChatGroq(groq_api_key=groq_api_key, model_name="mixtral-8x7b-32768") prompt=ChatPromptTemplate.from_template( """ 仅根据提供的上下文回答问题。 请根据问题提供最准确的回答 <context> {context} </context> 问题:{input} """ ) document_chain = create_stuff_documents_chain(llm, prompt) retriever = st.session_state.vectors.as_retriever() retrieval_chain = create_retrieval_chain(retriever, document_chain)
4. 用户输入及响应生成
prompt=st.text_input("在此输入您的提示") if prompt: start=time.process_time() response=retrieval_chain.invoke({"input":prompt}) print("响应时间:", time.process_time()-start) st.write(response['answer']) # 使用 Streamlit 展开器 with st.expander("文档相似性搜索"): # 查找相关的内容 for i, doc in enumerate(response['context']): st.write(doc.page_content)结论部分
使用了Groq技术的网页
响应时间:0.09375,这里响应速度挺快的。