首页 > 其他分享 >大模型实战(二):langchain+Ollama调用本地大模型实现RAG(保姆级)

大模型实战(二):langchain+Ollama调用本地大模型实现RAG(保姆级)

时间:2024-11-18 16:45:08浏览次数:3  
标签:RAG 模型 XXX langchain custom kwargs model

文章目录

一、任务描述

由于显卡仍然较为昂贵,个人笔记本的硬件条件很难带动大模型,因此我们可以调用一些部署在服务器上(比如:公共算力平台、学校实验室等)的大模型搭建自己的AI机器人。由于OpenAI的服务是收费的,此处我们先选择Ollama进行试验,OpenAI的调用方法会在下一篇写出

1. 环境

Python3.11 + Pycharm 2024.2.4

2. 功能

基于已经构建完成的本地向量知识库(具体构建方法可以参考上一篇:langchain调用huggingface大模型建立本地向量化知识库),调用本地ollama模型,搭建自己的AI问答机器人。

二、代码拆解

1. 导入包

如果pycharm报错,按照提示pip一下。

# 使用公司内部部署的LLM
from langchain import VectorDBQA
from langchain.vectorstores import Chroma
from langchain_community.llms import Ollama
from langchain.prompts import PromptTemplate
from langchain_huggingface import HuggingFaceEmbeddings

2. 配置本地模型

填写部署好的模型的ip地址与端口号。

# 配置部署模型的ip地址和端口号
host = "XXX.XXX.XXX.XXX" # ip地址
port = "XXX" # 端口号
url = f"http://{host}:{port}"

3. 实例化embedding模型

这里实例化是为了读取之前已经用大模型编码完成的向量化知识库,注意这里使用的模型要与之前知识库编码的模型保持一致,否则会出错。

# 实例化embedding模型
model_name = "./XXX"  # 这里需要按照自己选择的模型,补充huggingface上下载的模型包的名称
model_kwargs = {'device': 'cpu', 'trust_remote_code': True} # 使用cpu
encode_kwargs = {'normalize_embeddings': False}
embeddings = HuggingFaceEmbeddings( # 实例化
    model_name=model_name,
    model_kwargs=model_kwargs,
    encode_kwargs=encode_kwargs
)

4. 导入向量化知识库

这里的embeddings引用的就是上一步当中配置的编码模型,persist_directory需要填写已经构建的向量化知识库存放地址。

# 已有向量知识库,从本地加载
vector_store = Chroma(persist_directory="XXX/XXX", embedding_function=embeddings)

5. 加入提示词

提示词一般首先需要明确AI机器人的身份,比如“你是论文写作小助手”;然后详细说明你想要它为你做的事情,比如“现在请你根据我为你提供的材料,围绕‘鸟类的演进历史’撰写一篇500字的论文”;最后提出一些注意事项,比如“所有引用资料请标明出处,不允许胡编乱造”。注意要记得给模型提示“根据知识库回答问题”

# 加入提示词
custom_prompt = """
Context: {context}
Question: {question}
Helpful Answer:
在此处填写你的提示词
"""

6. 定义查询方法

主要需要修改的是llm = Ollama(base_url= url, model="qwen2:72b",temperature=0.3), # 模型选择这个语句,该语句中,url就是第2步当中填写的ip地址和端口组成的大模型部署地址,model就是你想要调用的模型名称(该模型必须已经部署在url所引用的地址上),temperature是模型回答创造性程度,该值越大,AI机器人的回答会越不可预料一些。

# 定义查询方法
custom_prompt_template = PromptTemplate(
    template=custom_prompt, input_variables=["context", "question"]
)

custom_qa = VectorDBQA.from_chain_type(
    # llm = Ollama(model="qwen2-7b:latest",temperature=0.3),
    llm = Ollama(base_url= url, model="qwen2:72b",temperature=0.3),   # 模型选择
    chain_type="stuff",
    vectorstore = vector_store,
    return_source_documents=False,
    chain_type_kwargs={"prompt": custom_prompt_template},
)

7. 问答

输入问题,运行即可,此处print输出的格式可以自行修改。

# 提问
Question = ("XXX")
print("答案:"+custom_qa.run(Question), end="\n")

三、总体代码

# 使用公司内部部署的LLM
from langchain import VectorDBQA
from langchain.vectorstores import Chroma
from langchain_community.llms import Ollama
from langchain.prompts import PromptTemplate
from langchain_huggingface import HuggingFaceEmbeddings

# 配置部署模型的ip地址和端口号
host = "XXX.XXX.XXX.XXX" # ip地址
port = "XXX" # 端口号
url = f"http://{host}:{port}"

# 实例化embedding模型
model_name = "./XXX"  # 这里需要按照自己选择的模型,补充huggingface上下载的模型包的名称
model_kwargs = {'device': 'cpu', 'trust_remote_code': True} # 使用cpu
encode_kwargs = {'normalize_embeddings': False}
embeddings = HuggingFaceEmbeddings( # 实例化
    model_name=model_name,
    model_kwargs=model_kwargs,
    encode_kwargs=encode_kwargs
)

# 已有向量知识库,从本地加载
vector_store = Chroma(persist_directory="XXX/XXX", embedding_function=embeddings)

# 加入提示词
custom_prompt = """
Context: {context}
Question: {question}
Helpful Answer:
在此处填写你的提示词
"""


# 定义查询方法
custom_prompt_template = PromptTemplate(
    template=custom_prompt, input_variables=["context", "question"]
)

custom_qa = VectorDBQA.from_chain_type(
    # llm = Ollama(model="qwen2-7b:latest",temperature=0.3),
    llm = Ollama(base_url= url, model="qwen2:72b",temperature=0.3),   # 模型替换选择:qwen2-7b:latest
    chain_type="stuff",
    vectorstore = vector_store,
    return_source_documents=False,
    chain_type_kwargs={"prompt": custom_prompt_template},
)

# 提问
Question = ("XXX")
print("答案:"+custom_qa.run(Question), end="\n")

标签:RAG,模型,XXX,langchain,custom,kwargs,model
From: https://blog.csdn.net/Haha_Sugar/article/details/143859040

相关文章

  • 基于大模型LLM(包括ChatGPT)的应用开发与辅助编程技能
    《基于大模型LLM(包括ChatGPT)的应用开发与辅助编程技能》在当今数字化飞速发展的时代,大模型LLM(大型语言模型)如ChatGPT等正掀起一场前所未有的技术革命,它们在应用开发与辅助编程领域展现出了巨大的潜力和影响力,正逐渐改变着开发者们的工作模式与思维方式。大模型LLM在应用......
  • 多模态大模型LLM与AIGC前沿技术实战,基于训练数据和生成算法模型
    多模态大模型LLM与AIGC前沿技术实战,基于训练数据和生成算法模型在当今人工智能领域,多模态大模型LLM(大型语言模型)与AIGC(人工智能生成内容)正以前所未有的发展态势,引领着技术革新的浪潮。它们的强大能力背后,训练数据和生成算法模型起着至关重要的作用,深入探究这两方面并了解其在实......
  • AI 大模型应用开发实战营:全流程深度实践大模型应用开发落地
    AI大模型应用开发实战营:全流程深度实践大模型应用开发落地在人工智能蓬勃发展的时代,AI大模型以其强大的能力和广泛的适用性,正逐渐成为推动各行业变革的核心力量。然而,从理论认知到实际应用开发并成功落地,中间存在着诸多技术与实践的挑战。AI大模型应用开发实战营应运而生,旨在......
  • GPT 大模型 + AIGC 技术实操课:GPT 大模型部署使用与 AIGC 实战落地方案
    GPT大模型+AIGC技术实操课:GPT大模型部署使用与AIGC实战落地方案在人工智能蓬勃发展的今天,GPT大模型与AIGC(人工智能生成内容)技术成为了各界瞩目的焦点,它们正以前所未有的力量重塑着内容创作、智能交互等诸多领域的生态。而开展一门关于GPT大模型+AIGC技术实操课,帮助......
  • 在深度学习模型中添加灵敏度和精确度评价指标
    在深度学习模型中添加灵敏度和精确度评价指标引言在深度学习的图像分割任务中,评价模型性能的指标至关重要。常用的指标如IoU(IntersectionoverUnion)和Dice系数能够有效地衡量模型的分割效果。然而,单一的评价指标往往无法全面反映模型的性能。因此,本文将介绍如何在深度学......
  • AI大模型实战训练营-大模型原理及训练技巧、大模型微调的核心原理
    《AI大模型实战训练营:原理、训练技巧与微调核心原理探究》在当今科技飞速发展的时代,AI大模型已然成为了众多领域关注的焦点,它们正以强大的能力重塑着我们认知世界和解决问题的方式。而参与AI大模型实战训练营,则是深入了解其背后奥秘、掌握关键技术的绝佳途径。今天,就让我们一......
  • 基座模型、聊天模型和指令模型的区别
    目录三者的区别基座模型(BaseModel)聊天模型(ChatModel)指令模型(InstructionModel)总结示例基座模型(BaseModel)聊天模型(ChatModel)指令模型(InstructionModel)大白话解释基座模型(BaseModel)聊天模型(ChatModel)指令模型(InstructionModel)总结三者的区别基座模型(basemodel)、聊天模型......
  • 全网最全商品模型设计方案,不接受反驳!
    大家好,我是汤师爷~今天聊聊商品概念模型设计。优秀的商品概念模型应具备充分的灵活性和抽象性,以适应不同行业的需求变化,并在系统升级或业务调整时,能最小化重构的工作量。商品模型是商品管理系统的核心,整体来看,可以划分为三个关键部分:基础资料:用于定义和管理商品的基本要素,是......
  • 基于yolov8、yolov5的玉米病害检测识别系统(含UI界面、训练好的模型、Python代码、数据
    项目介绍项目中所用到的算法模型和数据集等信息如下:算法模型:  yolov8、yolov8+SE注意力机制或yolov5、yolov5+SE注意力机制,直接提供最少两个训练好的模型。模型十分重要,因为有些同学的电脑没有GPU,无法自行训练。数据集:  网上下载的数据集,格式都已转......
  • 在学校服务器借用本机的代理下载huggingface的模型
    最近学到了transformer库,可是在服务器上无法科学上网,每次要先将模型下载到本地再上传模型的过程非常的繁琐,于是研究了借用本地代理,从而直接在服务器下载huggingface的模型。本机配置1.本机开启代理后,cmd用ipconfig查询本机的ip地址,记作my_host_ip2.在代理软件上要开启局......