文章目录
一、任务描述
由于显卡仍然较为昂贵,个人笔记本的硬件条件很难带动大模型,因此我们可以调用一些部署在服务器上(比如:公共算力平台、学校实验室等)的大模型搭建自己的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