如何使用 Ollama 和 LangChain 创建本地 RAG 代理

2024-08-14 0 449

如何使用 Ollama 和 LangChain 创建本地 RAG 代理

什么是 rag?

rag 代表检索增强生成,这是一种强大的技术,旨在通过以文档形式为大型语言模型(llm)提供特定的相关上下文来增强其性能。与纯粹根据预先训练的知识生成响应的传统法学硕士不同,rag 允许您通过检索和利用实时数据或特定领域的信息,使模型的输出与您期望的结果更紧密地结合起来。

rag 与微调

虽然 rag 和微调的目的都是提高 llm 的性能,但 rag 通常是一种更高效且资源友好的方法。微调涉及在专门的数据集上重新训练模型,这需要大量的计算资源、时间和专业知识。另一方面,rag 动态检索相关信息并将其合并到生成过程中,从而可以更灵活且更具成本效益地适应新任务,而无需进行大量的再培训

构建 rag 代理

安装要求

安装奥拉马

ollama 提供本地运行 llama 所需的后端基础设施。首先,请访问 ollama 的网站下载该应用程序。按照说明在本地计算机上进行设置。

安装 langchain 要求

langchain 是一个 Python 框架,旨在与各种 llm 和向量数据库配合使用,使其成为构建 rag 代理的理想选择。通过运行以下命令安装 langchain 及其依赖项:

1

pip install langchain

对 rag 代理进行编码

创建 API 函数

首先,您需要一个函数来与本地 llama 实例交互。设置方法如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

from requests import post as rpost

def call_llama(prompt):

    HEADers = {"content-type": "application/JSon"}

    payload = {

        "model": "llama3.1",

        "prompt": prompt,

        "stream": false,

    }

    response = rpost(

        "HTTP://localhost:11434/api/generate",

        headers=headers,

        JSON=payload

    )

    return response.json()["response"]

创建 langchain llm

接下来,将此功能集成到langchain内的自定义llm类中:

1

2

3

4

5

6

7

8

9

from langchain_core.language_models.llms import llm

class llama(llm):

    def _call(self, prompt, **kwargs):

        return call_llama(prompt)

    @property

    def _llm_type(self):

        return "llama-3.1-8b"

集成 rag 代理

设置检索器

检索器负责根据用户的查询获取相关文档。以下是如何使用 faiss 进行矢量存储和 huggingface 的预训练嵌入进行设置:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

from langchain.vectorstores import faiss

from langchain_huggingface import huggingfaceembeddings

documents = [

    {"content": "what is your return policy? ..."},

    {"content": "how long does shIPping take? ..."},

    # add more documents as needed

]

texts = [doc["content"] for doc in documents]

retriever = faiss.from_texts(

    texts,

    huggingfaceembeddings(model_name="all-minilm-l6-v2")

).as_retriever(k=5)

创建提示模板

定义 rag 代理将用于根据检索到的文档生成响应的提示模板:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

from langchain.prompts import chatprompttemplate, messagesplaceholder

faq_template = """

you are a chat agent for my e-commerce company. as a chat agent, it is your duty to help the human with their inquiry and make them a happy customer.

help them, using the following context:

<context>

{context}

</context>

"""

faq_prompt = chatprompttemplate.from_messages([

    ("system", faq_template),

    messagesplaceholder("messages")

])

创建文档和检索器链

将文档检索和 llama 生成结合成一个内聚链:

1

2

3

4

5

6

7

8

9

10

from langchain.chains.combine_documents import create_stuff_documents_chain

document_chain = create_stuff_documents_chain(llama(), faq_prompt)

def parse_retriever_input(params):

    return params["messages"][-1].content

retrieval_chain = runnablepassthrough.assign(

    context=parse_retriever_input | retriever

).assign(answer=document_chain)

启动您的 ollama 服务

运行 rag 代理之前,请确保 ollama 服务器已启动并正在运行。使用以下命令启动服务器:

1

ollama serve

提示您的 rag 代理

现在,您可以通过发送查询来测试您的 rag 代理:

1

2

3

4

5

6

7

8

9

from langchain.schema import HumanMessage

response = retrieval_chain.invoke({

    "messages": [

        HumanMessage("I received a damaged item. I want my money back.")

    ]

})

print(response)

回复:
“得知您收到损坏的物品,我感到非常遗憾。根据我们的政策,如果您收到损坏的物品,请立即联系我们的客户服务团队并附上损坏的照片。我们将为您安排更换或退款。您希望我帮助您获得退款吗?我需要您提供一些信息,例如您的订单号和有关损坏物品的详细信息,以便我帮助处理您的请求吗?”


通过执行以下步骤,您可以创建一个功能齐全的本地 rag 代理,能够通过实时上下文增强 llm 的性能。此设置可以适应各种领域和任务,使其成为上下文感知生成至关重要的任何应用程序的通用解决方案。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

免责声明
1. 本站所有资源来源于用户上传和网络等,如有侵权请邮件联系本站整改team@lcwl.fun!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系本站工作人员处理!
6. 本站资源售价或VIP只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 因人力时间成本问题,部分源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!
9.本站所有源码资源都是经过本站工作人员人工亲测可搭建的,保证每个源码都可以正常搭建,但不保证源码内功能都完全可用,源码属于可复制的产品,无任何理由退款!

网站搭建学习网 Python 如何使用 Ollama 和 LangChain 创建本地 RAG 代理 https://www.xuezuoweb.com/13065.html

常见问题
  • 本站所有的源码都是经过平台人工部署搭建测试过可用的
查看详情
  • 购买源码资源时购买了带主机的套餐是指可以享受源码和所选套餐型号的主机两个产品,在本站套餐里开通主机可享优惠,最高免费使用主机
查看详情

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务

Fa快捷助手
手机编程软件开发

在手机上用手点一点就能轻松做软件

去做软件
链未云主机
免备案香港云主机

开通主机就送域名的免备案香港云主机

去使用
链未云服务器
免备案香港云服务器

支持售后、超低价、稳定的免备案香港云服务器

去使用