首页 > 其他分享 >【AI开发】RAG基础

【AI开发】RAG基础

时间:2024-06-17 17:33:29浏览次数:26  
标签:RAG prompt AI messages langchain 开发 embedding query import

在这里插入图片描述
RAG的基本流程:

  1. 用一个loader把knowledge base里的知识做成一个个的document,然后把document切分成snippets,把snippets通过embedding(比如openai的embedding模型或者huggingface的)向量化,存储到vectordb向量数据库,以供后续相关性检索。至此便完成了私域数据集的索引indexing。
  2. 第二部分是retrieval检索,主要是先把自己的问题query向量化,然后在vectordb中进行相似度检索,得到相关的snippets。
  3. 最后一部分是把原问题和相关的snippets拼合起来组成prompt,一起送到LLM中,从而得到最想要的答案。

下面用notebook来做一个小demo:

from langchain.chat_models import ChatOpenAI
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage

chat = ChatOpenAI(
    model='deepseek-chat',
    openai_api_key="sk-f8f1fab675ea4d2d9e565877d354d464",
    openai_api_base='https://api.deepseek.com',
    max_tokens=1024
)
from langchain.schema import(
    SystemMessage,
    HumanMessage,
    AIMessage
)

messages = [
    SystemMessage(content="You are a helpful assistant."),
    HumanMessage(content="Do you know GPT-4?")
]
res = chat(messages=messages)
print(res.content)

创建一个RAG对话模型

1.加载数据(以GPT-4论文为例)

! pip install pypdf #一个pdf解析器
from langchain.document_loaders import PyPDFLoader

loader = PyPDFLoader("https://arxiv.org/pdf/2303.08774")

pages = loader.load_and_split()
pages[0]

2.知识切片 将文档分割成均匀的块,每个块是一段原始文本

from langchain.text_splitter import RecursiveCharacterTextSplitter

text_spliter = RecursiveCharacterTextSplitter(
    chunk_size = 500,     #最大500为一段
    chunk_overlap = 50     #最多重叠50
)
docs = text_spliter.split_documents(pages)
len(docs)

3.用embedding模型把切片向量化,存储到向量数据库中,方便下次问问题的时候进行相关性检索

from langchain.embeddings.openai import OpenAIEmbeddings #embedding模型用的openai的达芬奇模型,收费且deepseek没有开发,所以不用
#! pip install sentence-transformers #我们用免费的sentence-transformers
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import Chroma  #向量库chroma

model_name = '.cache/huggingface/hub/models--sentence-transformers--sentence-t5-large/snapshots/7f77100e0c564a5c2faeebd3cac0e5c1771b257e'
embedding = HuggingFaceEmbeddings(model_name=model_name)
vectorstore_hf = Chroma.from_documents(documents=docs,   
                                       embedding=embedding,
                                       collection_name="test_LangchainRAG_hf_embed")

4.通过向量相似度检索和问题最相关的k个文档

query = "How large is GPT-4 vocabulary"
result = vectorstore_hf.similarity_search(query=query, k=2)

5.原始query和检索得到的文本组合起来输入语言模型,得到最终的输出

def augment_prompt(query: str):
    #获取top3的文本片段
    result3 = vectorstore_hf.similarity_search(query=query,k=3)
    source_knowledge = "\n".join([x.page_content for x in result3])

    #构建prompt
    #这里是一个f-string的用法,允许在字符串中嵌入表达式,运行的时候表达式会被其value代替
    augment_prompt = f"""Using the contexts below, answer the query.   
    
    contexts:
    {source_knowledge}

    query: {query}"""

    return augment_prompt
print(augment_prompt(query))
#创建prompt
prompt = HumanMessage(
    content=augment_prompt(query=query)
)

messages.append(prompt)
res_afteraug = chat(messages=messages)
print(res.content)

标签:RAG,prompt,AI,messages,langchain,开发,embedding,query,import
From: https://blog.csdn.net/qq_44899247/article/details/139689370

相关文章

  • 高效开发系列:鸿蒙原生app套用混合app开发思路
    2024年,似乎华为迎来了新的企业机遇--鸿蒙独立操作系统。 受到全球国际形势的影响,加之第四次科技革命(AI革命)冷不丁的出现,在他国AI技术领先的前提下,中国自主研发的独立操作系统再次提上新的战略高度。其中,鸿蒙独立操作系统(HarmonyOS)就是大新创/国产操作系统的新高度。 鸿......
  • vscode使用tabnine ide插件,ai插件
    安装安装上面这个插件后,会提示登录,可以使用github在线地址登录。代码提示代码指令使用侧边栏功能总结tabninevscode插件就是一款代码ai自动补全的插件,侧边栏还可以进行代码解释、修正等功能。......
  • 近期火热的巴西推广casino游戏推广快手视频kwai广告怎么做
    近期火热的巴西推广casino游戏推广快手视频kwai广告怎么做在巴西这个充满活力的国度,casino游戏一直以其独特的魅力吸引着众多玩家的关注。近年来,随着数字媒体的兴起,越来越多的游戏开发者选择通过快手视频kwai平台投放广告,以拓展巴西市场的用户基础。本文将详细介绍在巴西推广c......
  • 全面助力海外快手kwai广告赋能slot游戏市场增效
    全面助力海外快手kwai广告赋能slot游戏市场增效kwai海外快手投放slots游戏广告针对性投放引流kwai海外快手投放slots游戏广告,除了要注重广告创意和内容质量外,更需要进行针对性的投放策略,以有效引流目标用户。首先,我们需要对目标用户进行深入分析,了解他们的兴趣、需求和消费习......
  • Vector | Graph:蚂蚁首个开源Graph RAG框架设计解读
    检索增强生成(RAG:RetrievalAugmentedGeneration)技术旨在把信息检索与大模型结合,以缓解大模型推理“幻觉”的问题。近来关于RAG的研究如火如荼,支持RAG的开源框架也层出不穷,并孕育了大量专业领域的AI工程应用。我们设计了一个通用的开源RAG框架,以兼容未来多样化的基础研究建设和工......
  • 从零开始:AI产品经理的入门路线图
    引言:想象这样一个场景:早晨的阳光穿透窗帘,投射在新一代智能机器人上,它正静静等待着你的第一个命令开始全新的一天。这样的场景听起来像是科幻小说里的情节,但实际上,这正是AI产品经理们工作的成果。如果你对这样的未来感到兴奋,那么你可能会考虑成为一个AI产品经理——那些创......
  • 用AI做中式吐槽漫画,10分钟一个原创作品,轻松实现月入6位数
    在现代社会,我们每个人都面临着各种压力。工作、学习、家庭等各种事务让我们的情绪倍受压迫,我们急需找到一种方式来释放这些情绪。因此,将生活中那些让人疲惫不堪的场景以幽默的漫画形式表达出来,已经成为了一个新兴的行业。而AI的出现,更是让我们这些没有美术绘画功底的人也能......
  • 敏捷开发时代,彻底结束了
    最近,我收到一位读者的私信,他最近“内耗”得非常厉害,他可能一时兴起把我的私信当作了吐槽箱。他们公司一直实行敏捷的管理模式,复盘发现了一个问题:发布与迭代具有强相关性,一个迭代就发布一次,导致需求交付周期过长,严重超出团队和业务部门可接受的时限。现在他在考虑到底该如何改变,是......
  • 开发一个python工具,pdf转图片,并且截成单个图片,然后修整没用的白边及循环遍历文件夹全
    今天推荐一键款本人开发的pdf转单张图片并截取没有用的白边工具一、开发背景:业务需要将一个pdf文件展示在前端显示,但是基于各种原因,放弃了h5使用插件展示原因有多个,文件资源太大加载太慢、pdf展示兼容性问题、pdf展示效果不好、pdf字体有时缺失等等,所以将项目中的协议等,全部由p......
  • 自动驾驶、AI、高端医疗……芯驿电子携 FPGA 创新成果亮相 2024 上海国际嵌入式展
      6月12日至14日,2024上海国际嵌入式展(embeddedworldChina)在上海世博展览馆正式举行。本届展会以“智慧赋能,科技全球”为主题,旨在打造嵌入式系统全产业链交流与合作平台。 作为中国嵌入式技术领域领先的FPGA方案商,芯驿电子科技(上海)有限公司携多款FPGA新品和行业方案......