AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


本地定制化大模型!Llama 3 + RAG!
发布日期:2024-07-06 08:11:11 浏览次数: 2788 来源:数据分析及应用


我们将探索如何使用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链检索相关信息并根据用户的问题生成响应。

您可以根据需要,通过添加更多功能、改进用户界面或集成其他功能来进一步探索和增强应用。


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询