当前位置:   article > 正文

快速构建本地RAG聊天机器人:使用LangFlow和Ollama实现无代码开发_ollama ragflow 配置

ollama ragflow 配置

基于LangChain的快速RAG应用原型制作方法

还记得构建智能聊天机器人需要数月编码的日子吗?

LangChain这样的框架确实简化了开发流程,但对非程序员来说,数百行代码仍然是一道门槛。

有没有更简单的方法呢?

图片由 Ravi Palwe 在 Unsplash 提供

这时我发现了“Lang Flow”,一个基于Python版本LangChain的开源包。它让你无需编写一行代码就能创建AI应用。它提供了一个画布,你只需拖动组件并连接它们,就能构建你的聊天机器人。

在这篇文章中,我们将使用LangFlow在几分钟内构建一个智能AI聊天机器人的原型。在后端,我们将使用Ollama进行嵌入模型和大型语言模型,这意味着应用程序可以在本地免费运行!最后,我们将这个流程转化为一个Streamlit应用,只需少量编码。

探索检索增强生成流程:LangChain、LangFlow和Ollama简介

在这个项目中,我们将构建一个人工智能聊天机器人,并命名为“Dinnerly——您的健康食谱规划师”。它的目标是借助检索增强生成(RAG)技术,从一个食谱PDF文件中推荐健康的菜肴配方。

在深入了解如何实现这一目标之前,让我们快速浏览一下项目中将要使用的关键组件。

检索增强生成(RAG)

RAG(Retrieval-Augmented Generation)通过向大型语言模型(LLMs)提供外部来源的相关信息,帮助它们提高生成响应的准确性和时效性。

RAG的工作流程通常包括以下步骤,如A Guide to Retrieval Augmented Generation中所述:

  1. 加载文档: 首先加载文档或数据源。

  2. 分割成片段: 将文档分解成可管理的部分。

  3. 创建嵌入向量: 使用嵌入技术将这些片段转换为向量表示。

  4. 存储在向量数据库中: 将这些向量保存在数据库中,以便高效检索。

  5. 用户交互: 接收用户查询或输入,并将其转换为嵌入向量。

  6. 向量数据库中的语义搜索: 连接到向量数据库,根据用户的查询进行语义搜索。

  7. 检索并处理响应: 获取相关响应,通过LLM处理,生成答案。

  8. 向用户交付答案: 将LLM生成的最终输出返回给用户。

这是RAG工作流程的概述,由Han HELOIR, Ph.D. ☕️提供。

Langchain

Langchain 是一个围绕大型语言模型构建的开源框架,它促进了各种生成式AI应用的设计和开发,包括聊天机器人、摘要等。

该库的核心思想是将不同的组件“串联”起来,以简化复杂的AI任务,并围绕LLMs创建更高级的用例。

LangFlow

LangFlow 是专为LangChain设计的一款网页工具,它提供了一个用户界面,用户可以通过拖放组件来构建和测试LangChain应用,无需编写代码。

然而,为了使用LangFlow设计AI应用流程,你需要首先对LangChain的工作原理及其不同组件有基本的了解。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

LangFlow界面

Ollama

Ollama 对我来说,是开源LLM(大型语言模型)中最优秀且最容易上手的方式。它支持诸如Llama 2和Mistral等强大的LLM,并且你可以在ollama.ai/library上查看可用模型的列表。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Ollama https://ollama.ai/

配置Ollama

安装Ollama

首先,访问 Ollama下载页面,选择与您操作系统匹配的版本,下载并安装。

安装好Ollama后,打开命令终端并输入以下命令。这些命令将下载模型并在您的本地机器上运行它们。

对于本项目,我们将使用Llama2作为大型语言模型(LLM),并使用“nomic-embed-text”作为嵌入模型。"Nomic-embed-text"是一个功能强大的开源嵌入模型,具有大上下文窗口。这使得我们可以在本地运行整个应用程序,而无需任何云服务!

ollama serve  
ollama pull llama2  
ollama pull nomic-embed-text  
ollama run llama2  

  • 1
  • 2
  • 3
  • 4
  • 5

配置LangFlow

前置条件

在开始使用LangFlow之前,确保你的计算机上已经安装了Python。Python的版本应高于3.9,但需低于3.12。

安装LangFlow

接下来,我们继续安装LangFlow。建议在虚拟环境中进行此操作。这种方法有助于在自己的空间内整洁地管理依赖项。在我的Mac上,我使用Conda来设置。只需在命令行终端中输入以下命令,创建一个名为“langflow”的虚拟环境,其中包含Python 3.11。

conda create -n langflow python=3.11  
conda activate langflow  
pip install langflow  

  • 1
  • 2
  • 3
  • 4

如果你没有Conda,也可以直接使用Python设置虚拟环境,如下所示。

python -m venv langflow  
source langflow/bin/activate  
pip install langflow  

  • 1
  • 2
  • 3
  • 4

安装完成后,只需在终端中输入“langflow run”即可启动LangFlow。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Langflow后端控制台。图片由作者提供。

然后,将它给出的URL(如上例中的http://127.0.0.1:7860)复制到你的网络浏览器中,搞定!你应该会看到一个类似这样的界面,显示了你的所有项目。

Langflow UI项目页面。图片由作者提供。

设计聊天机器人的流程

是时候创建你的第一个流程了!

点击“新建项目”,这将打开一个空白画布。在左侧窗格中,你会看到各种组件,可以将它们拖放到工作区。

LangFlow 画布。作者提供图片。

对于我们的项目,我们将构建一个能够从 PDF 文件中回答问题的聊天机器人。还记得我们之前提到的 RAG 管道吗?我们需要以下元素来组合它:

  1. PDF 加载器:我们将使用“PyPDFLoader”。你需要输入 PDF 文档的文件路径。

  2. 文本分割器:选择“RecursiveCharacterTextSplitter”,默认设置即可。

  3. 文本嵌入模型:选择“OllamaEmbeddings”来利用免费的开源嵌入。

  4. 向量数据库:我们选择“FAISS”来存储嵌入并支持向量搜索。

  5. 用于生成响应的 LLM:选择“ChatOllama”,并指定模型为“llama2”。

  6. 对话内存:这使聊天机器人能够保留聊天历史,有助于后续问题。我们将使用“ConversationBufferMemory”。

  7. 对话检索链:将 LLM、内存和检索到的文本等组件连接起来生成响应。我们选择“ConversationRetrievalChain”。

将所有这些组件拖放到画布上,并设置必要的字段,如 PDF 文件路径和 LLM 模型名称。其他设置可以保持默认。

接下来,将这些组件连接起来形成你的流程。

一旦所有组件都连接好,点击右下角的“闪电”按钮编译流程。如果一切顺利,按钮将变为绿色,表示成功。

成功编译流程后,点击“聊天机器人”图标来测试你的创作。

Langflow 聊天机器人演示。作者提供图片。

一些提示:

  1. 完成流程后,你可以将其保存为 JSON 文件,或在“我的收藏”中找到它,以便将来访问或编辑。

  2. 通过使用预建示例深入 LangFlow 可以提供很好的灵感并帮助你入门。你可以:
    - 在“LangFlow Store”中找到示例,但需要 API 密钥才能访问。
    - 访问 LangFlow GitHub 页面下载示例,然后使用 UI 上的“上传”按钮将它们上传到 LangFlow。

  3. 如果本地设置不适合你,你也可以选择使用 OpenAI 构建 RAG 管道。只需确保你有设置所需的 OpenAI API 密钥。

将流程转化为Streamlit聊天机器人

如果流程设置正确,现在是将其集成到应用程序中的时候了。在构建流程后,LangFlow提供了必要的代码片段,只需点击侧边栏中的“代码”按钮。

让我们继续将此流程集成到Streamlit聊天机器人中。

  1. 设置依赖项:首先,我们需要安装依赖项。
pip install streamlit  
pip install langflow  
pip install langchain-community 
  • 1
  • 2
  • 3
  1. 获取Lang Flow代码片段:创建一个新的Python文件“app.py”。返回LangFlow UI,再次找到“代码”按钮。导航到“Python API”标签,复制代码片段并粘贴到“app.py”中。
import requests  
from typing import  Optional  
  
BASE_API_URL = "http://127.0.0.1:7860/api/v1/process"  
FLOW_ID = "d9392262-a912-42b4-8582-cc9e48894a00"  
  
# 可以通过添加tweaks字典调整流程  
# 例如 {"OpenAI-XXXXX": {"model_name": "gpt-4"}}  
TWEAKS = {  
  "VectorStoreAgent-brRPx": {},  
  "VectorStoreInfo-BS24v": {},  
  "OpenAIEmbeddings-lnfRZ": {},  
  "RecursiveCharacterTextSplitter-bErPe": {},  
  "WebBaseLoader-HLOqm": {},  
  "ChatOpenAI-aQOv0": {},  
  "FAISS-o0WIf": {}  
}  
  
def  run_flow(inputs: dict, flow_id: str, tweaks: Optional[dict] = None) -> dict:  
    """  
    使用给定消息和可选调整运行流程。  
  
    :param message: 发送给流程的消息  
    :param flow_id: 要运行的流程的ID  
    :param tweaks: 自定义流程的可选调整  
    :return: 流程的JSON响应  
    """  
    api_url = f"{BASE_API_URL}/{flow_id}"  
  
    payload = {"inputs": inputs}  
    headers = None  
    if tweaks:  
        payload["tweaks"] = tweaks  
    response = requests.post(api_url, json=payload, headers=headers)  
    return response.json()  

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  1. 构建聊天功能:在同一个Python文件中,我们将定义一个专门用于聊天的函数。此函数在接收到用户的新查询时运行流程以获取响应,然后在界面上流式传输该响应。
def  chat(prompt: str):  
  with current_chat_message:  
    # 阻止输入,防止在AI响应时发送消息  
    st.session_state.disabled = True  
  
    # 将用户消息添加到聊天历史记录  
    st.session_state.messages.append(("human", prompt))  
  
    # 在聊天消息容器中显示用户消息  
    with st.chat_message("human"):  
      st.markdown(prompt)  
  
    # 在聊天消息容器中显示助手响应  
    with st.chat_message("ai"):  
      # 获取完整的聊天历史,包括最新问题作为最后一条消息  
      history = "\n".join(  
        [f"{role}: {msg}"  for role, msg in st.session_state.messages]  
      )  
  
      query = f"{history}\nAI:"  
  
      # 设置要应用于流程的任何调整  
      inputs = {"input": query}  
  
      output = run_flow(inputs, flow_id=FLOW_ID, tweaks=TWEAKS)  
      print(output)  
      try:  
        output = output['result']['output']  
      except Exception :  
        output = f"应用程序错误 : {output}"  
  
      placeholder = st.empty()  
      response = ""  
  
      for tokens in output:  
        response += tokens  
        # 使用"▌"表示正在流式传输响应。  
        with placeholder:  
          st.markdown(response + "▌")  
  
      # 删除"▌",表示消息已完成。  
      with placeholder:  
        st.markdown(response)  
  
    # 将AI响应记录到聊天历史记录  
    st.session_state.messages.append(("ai", response))  
    # 解除聊天输入的阻止  
    st.session_state.disabled = False  
  
    st.rerun()  

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  1. 创建界面:现在,我们将在同一个Python文件中构建一个简单的Streamlit用户界面。
st.set_page_config(page_title="Dinnerly")  
st.title("欢迎来到Dinnerly:您的健康食谱规划师")  
  
system_prompt = "您是一个有用的助手,用于向用户提供健康食谱建议"  
if  "messages"  not  in st.session_state:  
    st.session_state.messages = [("system", system_prompt)]  
if  "disabled"  not  in st.session_state:  
    # `disable` 标志,防止在AI响应时用户发送消息  
    st.session_state.disabled = False  
  
  
with st.chat_message("ai"):  
  st.markdown(  
    f"嗨!我是您的健康食谱规划师,很高兴帮助您准备健康美味的菜肴!"  
  )  
  
# 在应用重新运行时显示聊天历史消息  
for role, message in st.session_state.messages:  
    if role == "system":  
        continue  
    with st.chat_message(role):  
        st.markdown(message)  
  
current_chat_message = st.container()  
prompt = st.chat_input("在这里提问...", disabled=st.session_state.disabled)  
  
if prompt:  
    chat(prompt)  
  
  

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

运行Streamlit应用后,您就可以与自己的食谱规划师聊天了!它将帮助您创建美味健康的餐点。

Streamlit应用演示。图片由作者提供。

提示:

可以使用相同的代码和界面来测试和集成不同的流程。只需将FLOW_ID更改为要测试和集成的新流程即可。

结束语

在这篇文章中,我们创建了一个基于RAG的智能聊天机器人。我们利用LangFlow无需编码就建立了RAG管道,借助开源模型进行嵌入和LLM处理,使应用程序能在本地运行,无需推理成本。最后,我们将这个设置转化为一个Streamlit应用程序。

我特别欣赏LangFlow的无代码方式,相信它可能会改变我们构建和原型设计AI应用的方式。

然而,值得注意的是,某些组件仍在开发中,有时可能无法按预期工作。当遇到这些问题时,缺乏问题的可见性或故障排除指导。另一个改进之处可能是直接提供底层Python代码,以提供更大的定制空间。

总的来说,我认为LangFlow对于快速原型设计需求是一个有价值的工具。

雷军曾说过:站在风口,猪都能飞起来”可以说现在大模型就是当下风口,是一个可以改变自身的机会,就看我们能不能抓住了。

那么,我们该如何学习大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

一、大模型全套的学习路线

学习大型人工智能模型,如GPT-3、BERT或任何其他先进的神经网络模型,需要系统的方法和持续的努力。既然要系统的学习大模型,那么学习路线是必不可少的,下面的这份路线能帮助你快速梳理知识,形成自己的体系。

L1级别:AI大模型时代的华丽登场

L2级别:AI大模型API应用开发工程

L3级别:大模型应用架构进阶实践

L4级别:大模型微调与私有化部署

一般掌握到第四个级别,市场上大多数岗位都是可以胜任,但要还不是天花板,天花板级别要求更加严格,对于算法和实战是非常苛刻的。建议普通人掌握到L4级别即可。

以上的AI大模型学习路线,不知道为什么发出来就有点糊,高清版可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/746785
推荐阅读
相关标签
  

闽ICP备14008679号