检索增强生成(RAG)经常用于开发定制的人工智能应用程序,包括聊天机器人、推荐系统和其他个性化工具。该系统利用向量数据库和大型语言模型(LLMs)的优势提供高质量的结果。
选择适合任何RAG模型的LLM非常重要,需要考虑成本、隐私问题和可扩展性等因素。商业LLMs如OpenAI的GPT-4和Google的Gemini非常有效,但可能价格昂贵并引发数据隐私问题。一些用户更喜欢开源LLMs,因为它们具有灵活性和成本节省的优势,但它们需要大量资源进行微调和部署,包括GPU和专用基础设施。此外,使用本地设置管理模型更新和可扩展性可能具有挑战性。
更好的解决方案是选择一个开源LLM并将其部署在云上。这种方法提供了必要的计算能力和可扩展性,而无需承担本地托管的高成本和复杂性。它不仅节省了初始基础设施成本,还减少了维护方面的担忧。
让我们探索一种类似的方法,使用云托管的开源LLMs和可扩展的向量数据库来开发一个应用程序。
工具和技术
开发这个基于RAG的人工智能应用程序需要几个工具,包括:
- BentoML:BentoML是一个开源平台,简化了将机器学习模型部署为生产就绪API的过程,确保可扩展性和易管理性。
- LangChain:LangChain是一个使用LLMs构建应用程序的框架。它提供了易于集成和定制的模块化组件。
- MyScaleDB:MyScaleDB是一个高性能、可扩展的数据库,针对高效的数据检索和存储进行了优化,支持高级查询功能。
在本教程中,我们将使用LangChain的WikipediaLoader模块从维基百科提取数据,并在此数据上构建一个LLM。
注意:您可以在MyScale示例存储库上找到完整的Python笔记本。
准备工作
设置环境
通过打开终端并输入以下命令,开始设置您的环境以在系统中使用BentoML、MyScaleDB和LangChain:
pip install bentoml langchain clickhouse-connect
执行这条命令会在您的系统中安装这三个软件包。安装完成后,您就可以编写代码并开发RAG应用程序了。
加载数据
首先,从langchain_community.document_loaders.wikipedia模块中导入WikipediaLoader。您将使用这个加载器来获取与"阿尔伯特·爱因斯坦"相关的维基百科文档。
from langchain_community.document_loaders.wikipedia import WikipediaLoader
loader = WikipediaLoader(query="Albert Einstein")
# 加载文档
docs = loader.load()
# 显示第一个文档的内容
print(docs[0].page_content)
这里使用load方法来检索“阿尔伯特·爱因斯坦”文档,并使用print方法打印第一个文档的内容以验证加载的数据。
将文本拆分为块
从langchain_text_splitters导入CharacterTextSplitter,将所有页面的内容连接成一个字符串,然后将文本拆分为可管理的块。
from langchain_text_splitters import CharacterTextSplitter
# 将文本拆分为块
text = ' '.join([page.page_content.replace('\\t', ' ') for page in docs])
text_splitter = CharacterTextSplitter(
separator="\\n",
chunk_size=400,
chunk_overlap=100,
length_function=len,
is_separator_regex=False,
)
texts = text_splitter.create_documents([text])
splits

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



