我们将探索如何使用Meta AI的尖端Llama 3语言模型构建一个强大的检索增强生成(RAG)应用程序。通过利用Llama 3的功能和RAG技术,我们将创建一个应用程序,允许用户与网页进行交互式对话,检索相关信息并对用户查询生成准确的响应。在本教程中,我们将深入了解设置开发环境、加载和处理网页数据、创建嵌入和矢量存储以及实现RAG链以提供卓越用户体验的分步过程。
什么是Llama 3? Llama 3是由Meta AI开发的最先进的语言模型,擅长理解和生成类似人类的文本。
凭借其令人印象深刻的自然语言处理能力,Llama 3可以理解复杂的查询,提供准确的响应,并参与上下文相关的对话。
它能够处理各种主题,处理效率高,是构建智能应用程序的理想选择。
想试试Llama 3的威力吗?现在就与阿纳金AI聊天!(虚拟支持任何可用的AI模型!)
什么是RAG? 检索增强生成(RAG)是一种结合信息检索和语言生成来提高问答系统性能的技术。
简单地说,RAG允许AI模型从知识库或文档中检索相关信息,并使用这些信息对用户查询生成更准确、更适合上下文的响应。
通过利用检索和生成的能力,RAG可以创建智能聊天机器人和问答应用程序,为用户提供高度相关和信息丰富的响应。
对于想要运行RAG系统而没有编码经验的用户,您可以尝试Anakin AI,在那里您可以使用No Code Builder创建令人敬畏的AI应用程序!
准备运行本地Llama 3 RAG应用程序
在我们开始之前,请确保安装了以下必备组件:
Python 3.7 or higher
Streamlit
ollama
langchain
langchain_community
您可以通过运行以下命令来安装所需的库:
pip install streamlit ollama langchain langchain_community使用Llama-3在本地运行自己的RAG应用程序的分步指南 步骤1:设置Streamlit应用程序 首先,让我们设置Streamlit应用程序的基本结构。创建一个名为app.py的新Python文件并添加以下代码:
import streamlit as st import ollama from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain_community.document_loaders import WebBaseLoader from langchain_community.vectorstores import Chroma from langchain_community.embeddings import OllamaEmbeddings st.title("Chat with Webpage ?") st.caption("This app allows you to chat with a webpage using local Llama-3 and RAG") # Get the webpage URL from the user webpage_url = st.text_input("Enter Webpage URL", type="default")此代码设置Streamlit应用程序的基本结构,包括标题、说明和供用户输入网页URL的输入字段。
步骤2:加载和处理网页数据 接下来,我们需要从指定的网页加载数据并处理它以供进一步使用。将以下代码添加到app.py:
if webpage_url: # 1. Load the data loader = WebBaseLoader(webpage_url) docs = loader.load() text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=10) splits = text_splitter.split_documents(docs)这里,我们使用langchain_community中的WebBaseLoader来加载网页数据。然后,我们使用langchain中的RecursiveCharacterTextSplitter将加载的文档拆分为较小的块。
步骤3:创建Ollama嵌入和矢量存储 为了能够从网页中有效地检索相关信息,我们需要创建嵌入和向量存储。添加以下代码:
# 2. Create Ollama embeddings and vector store embeddings = OllamaEmbeddings(model="llama3") vectorstore = Chroma.from_documents(documents=splits, embedding=embeddings)我们使用langchain_community中的OllamaEmbeddings类创建Ollama嵌入,并指定llama3模型。然后,我们使用Chroma类创建一个向量存储,传递分割的文档和嵌入。
步骤4:定义Ollama Llama-3模型函数 现在,让我们定义一个函数,它利用Ollama Llama-3模型来根据用户的问题和相关上下文生成响应。添加以下代码:
# 3. Call Ollama Llama3 model def ollama_llm(question, context): formatted_prompt = f"Question: {question}\n\nContext: {context}" response = ollama.chat(model='llama3', messages=[{'role': 'user', 'content': formatted_prompt}]) return response['message']['content']该函数将用户的问题和相关上下文作为输入。它通过组合问题和上下文来格式化提示,然后使用ollama.chat函数使用Llama-3模型生成响应。
步骤5:设置RAG链 为了根据用户的问题从向量存储中检索相关信息,我们需要设置RAG(检索增强生成)链。添加以下代码:
# 4. RAG Setup retriever = vectorstore.as_retriever() def combine_docs(docs): return "\n\n".join(doc.page_content for doc in docs) def rag_chain(question): retrieved_docs = retriever.invoke(question) formatted_context = combine_docs(retrieved_docs) return ollama_llm(question, formatted_context) st.success(f"Loaded {webpage_url} successfully!")在这里,我们使用as_retriever方法从vector store创建一个检索器。我们定义了一个辅助函数combine_docs,用于将检索到的文档联合收割机组合成一个格式化的上下文字符串。rag_chain函数接受用户的问题,使用检索器检索相关文档,将文档组合成格式化的上下文,并将问题和上下文传递给ollama_llm函数以生成响应。
步骤6:实现聊天功能 最后,让我们在Streamlit应用中实现聊天功能。添加以下代码:
# Ask a question about the webpage prompt = st.text_input("Ask any question about the webpage") # Chat with the webpage if prompt: result = rag_chain(prompt) st.write(result)这段代码为用户添加了一个输入字段,用于询问有关网页的问题。当用户输入一个问题并提交它时,使用用户的问题调用rag_chain函数。然后使用st.write显示生成的响应。
最后一步:是时候运行应用程序了! 要运行应用程序,请保存app.py文件并在同一目录中打开一个终端。运行以下命令:
streamlit run app.py这将启动Streamlit应用程序,您可以在Web浏览器中通过提供的URL访问它。
结论 到这里您已经成功构建了一个RAG应用程序,并在本地运行Llama-3。该应用程序允许用户通过利用本地Llama-3和RAG技术的力量与网页聊天。用户可以输入网页URL,应用程序将加载和处理网页数据,创建嵌入和矢量存储,并使用RAG链检索相关信息并根据用户的问题生成响应。
您可以根据需要,通过添加更多功能、改进用户界面或集成其他功能来进一步探索和增强应用。