首页 > 其他分享 >LLM学习(四)——构建 RAG 应用

LLM学习(四)——构建 RAG 应用

时间:2024-04-24 10:33:05浏览次数:17  
标签:RAG google chain langchain API 构建 LLM import genai

4.1 接入Langchain

首先我们导入所有需要的库文件

import google.generativeai as genai
import os
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_google_genai import GoogleGenerativeAIEmbeddings
from langchain.prompts import PromptTemplate
from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
import sys
from langchain.vectorstores.chroma import Chroma
import gradio as gr

我们使用langchain_google_genai中的ChatGoogleGenerativeAI导入模型另外Langchain现在还没有把genai并入所有要想安装相应的包还需要运行
!pip install -U langchain-google-genai
另外出来使用 API 密钥设置 GOOGLE_API_KEY 的环境变量
你还可以显式的使用 google_api_key kwarg 将您的 API 密钥传递给 ChatGoogle 构造函数
llm = ChatGoogleGenerativeAI(model="gemini-pro",google_api_key=api_key)

# 这里换成自己的代理端口
os.environ['http_proxy'] = 'http://127.0.0.1:10809'
os.environ['https_proxy'] = 'http://127.0.0.1:10809'
GOOGLE_API_KEY="AIzaSyBZFSrCWg7Ow2D3I2rMbf37qXp1SlF9T5k"
os.environ["GOOGLE_API_KEY"] =GOOGLE_API_KEY
llm = ChatGoogleGenerativeAI(model="gemini-pro")

result = llm.invoke("Write a ballad about LangChain")
print(type(result))
print(result.content)

下面的图片是相应的结果

4.2 向量库的搭建

4.2.1 加载向量数据库

path = '输入自己的持久化向量库的位置记得改'
embeddings = GoogleGenerativeAIEmbeddings(model="models/embedding-001",task_type="retrieval_document")
vectordb=Chroma(
    persist_directory=path,
    embedding_function=embeddings
)

print(f"向量库中存储的数量:{vectordb._collection.count()}")

question = "什么是prompt engineering?"
docs = vectordb.similarity_search(question,k=3)
print(f"检索到的内容数:{len(docs)}")
for i, doc in enumerate(docs):
    print(f"检索到的第{i}个内容: \n {doc.page_content}", end="\n-----------------------------------------------------\n")

下面是导入我的向量库的结果

4.2.2 构建检索问答链

PromptTemplate函数是Langchain官方提供语言模型的提示模板,提示模板由字符串模板组成。它接受来自用户的一组参数,这些参数可用于生成语言模型的提示,而且可以使用f-strings(默认)或 jinja2 语法对模板进行格式化。下面的Code中的{context}和{input}就是相应的需要输入的参数。然后使用from_template把我们预定义的模板template转换成PromptTemplate对象。接着我们使用create_stuff_documents_chain函数去创建一个链用于讲输入的
这样我们就构建好了检索问答链retrieval_chain

template = """
You are a helpful AI assistant.
Answer based on the context provided. 
context: {context}
input: {input}
answer:
"""
retriever=vectordb.as_retriever()
prompt = PromptTemplate.from_template(template)
combine_docs_chain = create_stuff_documents_chain(llm, prompt)
retrieval_chain = create_retrieval_chain(retriever, combine_docs_chain)

标签:RAG,google,chain,langchain,API,构建,LLM,import,genai
From: https://www.cnblogs.com/zzddkkhome/p/18154461

相关文章

  • 将C++代码文件路径、行号、函数名称等打包到#pragma message输出的方法
    #include<iostream>#define__GEN_STRING_IMPL(x)#x#define__GEN_STRING(x)__GEN_STRING_IMPL(x)#define__GEN_LOCATION_STRING()__FILE__"("__GEN_STRING(__LINE__)"):"classCTestObject{public:voidprint1(){......
  • 构建之法07
    在阅读《构建之法》的第七章时,我深入理解了软件开发团队中沟通与协作的重要性。这一章从团队组织、角色分配、任务划分、进度管理等多个方面,详细阐述了如何构建一个高效、协作的开发团队。首先,我认识到一个成功的软件开发项目,离不开一个结构清晰、分工明确的团队。团队成员之间应......
  • 使用 Dockerfile 构建和定制 Docker 镜像
    前言Dockerfile是用于构建Docker镜像的文本文件,其中包含了一系列指令和参数,用于定义镜像的内容、环境和运行方式。本文将介绍如何编写和使用Dockerfile,以及常用的指令和技巧,帮助大家快速掌握Docker镜像的构建和定制过程。什么是DockerfileDockerfile是一个文本文件,其内......
  • 大语言模型(LLM)评价指标小汇总
    大语言模型(LLM)评价指标小汇总(也许会更新)from:https://zhuanlan.zhihu.com/p/641416694​目录总之就是接了个小项目,这些天统计了一些LLM评价指标,不算很全面,很多方法的具体操作都不是很熟悉,参考论文也没找全,大家就凑合着看:1.榜单、论文统计方法描述......
  • 使用ollama + AnythingLLM快速且简单的在本地部署llm3
    使用ollama+AnythingLLM快速且简单的在本地部署llm3不多说,直接开始一、安装ollamaollama官网:https://ollama.com/下载地址:https://ollama.com/download打开以后注册并下载即可安装没有什么好说的,找到自己的系统安装即可,因为我的电脑没有搞虚拟机,所以就直接安装Windows的......
  • 水资源管理系统:守护生命之源,构建和谐水生态
    水资源是维系地球生态平衡和人类社会可持续发展的重要基础。然而,随着人口增长、工业化和城市化的加速,水资源短缺、水质污染和生态破坏等问题日益凸显。在这样的背景下,构建一个全面、高效、智能的水资源管理系统显得尤为迫切和必要。项目背景水资源的合理利用和有效保护是全球面......
  • multi-agent框架camel学习笔记(二)RAG和向量数据库
    本系列想学习如何从零开始搭建一个multi-agent系统并融入到应用中,这篇文章主要写其中的LLM-agent的核心模块RAG和向量数据库,以及Camel系统中是如何使用RAG。1.为什么要用RAG(检索增强生成)先聊下什么是RAG,为什么我们要用RAG:RAG和向量数据库本身不是很新的技术,传统的搜广推里也......
  • python使用scap构建镜像流量
    importpytestimportrequestsimporttimefromscapy.allimport*@pytest.mark.usefixtures("get_config_instance")deftest_76_vlan(get_config_instance):#DefineethernetandIP/TCPlayerseth=Ether()ip=IP(src='10.0.0.2&......
  • Java集成系列:高效构建自定义插件
    前言随着软件开发的快速发展和需求的不断增长,开发人员面临着更多的压力和挑战。传统的开发方法需要花费大量的时间和精力,而低代码开发平台的出现为开发人员提供了一种更加高效、快速的开发方式。今天小编就以构建命令插件为例,展示如何使用Java语言高效构建自定义插件。环境准备......
  • 5种搭建LLM服务的方法和代码示例
    在不断发展的大型语言模型(LLMs)领域中,用于支持这些模型的工具和技术正以与模型本身一样快的速度进步。在这篇文章中,我们将总结5种搭建开源大语言模型服务的方法,每种都附带详细的操作步骤,以及各自的优缺点。 https://avoid.overfit.cn/post/efad539d0969474987a7ff652f632d8e......