大语言模型RAG项目实战

学习完大语言模型落地的关键技术:RAG的相关概念,我们今天来用代码实现一下RAG。

项目实战:基于百度ERNIE SDK 和 LangChain 搭建个人知识库。

1、安装ERNIE Bot

python 复制代码
!pip install --upgrade erniebot
 测试embedding 
import erniebot
erniebot.api_type = "aistudio"
erniebot.access_token = "<你的token>"
response = erniebot.Embedding.create(
model="ernie-text-embedding",
input=[
    "我是百度公司开发的人工智能语言模型,我的中文名是文心一言,英文名是ERNIE-Bot,可以协助您完成范围广泛的任务并提供有关各种主题的信息,比如回答问题,提供定义和解释及建议。如果您有任何问题,请随时向我提问。" ])
print(response.get_result())

2、引入 Chromadb 向量数据库

python 复制代码
!pip install chromadb

3、自定义嵌入函数

定义一个自定义的嵌入函数,用于将文本内容转换为嵌入向量。其中使用 ERNIE Bot 库来创建文本的嵌入,并且通过 Chromadb 库来管理这些嵌入向量。

python 复制代码
import os
import erniebot
from typing import Dict, List, Optional 
import chromadb
from chromadb.api.types import Documents, EmbeddingFunction, Embeddings
def embed_query(content):
response = erniebot.embedding.create(
model="ernie-text-embedding",
input=[content])
result = response.get_result()
print(result)  
return result

class ErnieEmbeddingFunction(EmbeddingFunction): 
def __call__(self, input: Documents) -> Embeddings:
    embeddings = []
    for text in input:
        response = embed_query(text)
        try:
            embedding = response[0]   
            embeddings.append(embedding)
        except (IndexError, TypeError, KeyError) as e:
            print(f"Error processing text: {text}, Error: {e}")

    return embeddings
chroma_client = chromadb.Client()
 chroma_client = chromadb.PersistentClient(path="chromac") #数据保存硬盘位置 可选
collection = chroma_client.create_collection(name="demo", embedding_function=ErnieEmbeddingFunction())
print(collection)

4、导入数据集

选用课程内容作为知识库:

https://aistudio.baidu.com/datasetdetail/260836

5、文档切割

使用 LangChain 库来处理和分割文本文档

python 复制代码
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain.document_loaders import TextLoader 
loader = TextLoader('./AI大课逐字稿.txt',encoding='utf-8')
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=600, chunk_overlap=20)
docs = text_splitter.split_documents(documents)
docs

6、Embedding 嵌入

将分割后的文档列表转换为嵌入向量,以便进行进一步的分析和处理。

python 复制代码
import uuid
docs_list=[]
metadatas=[]
ids=[]
for item in docs:
docs_list.append(item.page_content)
metadatas.append({"source": "AI大课逐字稿"})
ids.append(str(uuid.uuid4())) 
collection.add(
documents=docs_list,
metadatas=metadatas,
ids=ids
)

7、检索

python 复制代码
query = "讲师说见VC有两种错误的思维方式,分别是什么"

results = collection.query(
    query_texts=[query],
    n_results=2
) 
content=results['documents'][0]
[ ] 
prompt=f"""
用户问题:{query}
<context>
{content}
</context>
根据<context>里的知识点回答用户问题
"""
response = erniebot.ChatCompletion.create(model="ernie-4.0", messages=[{"role": "user", "content": prompt}])
print(response.get_result())
#讲师说见VC有两种错误的思维方式,分别是:
##1. 用过去的方式套今天的人工智能,比如比喻成OS。一旦比喻成操作系统,就得出结论全世界两套到三套,你觉得必然会被垄断、没有机会了,这种是典型的刻舟求剑。
#2. 人容易对已经成功的事委曲求全,对于创新的新生代创业者容易求全责备。特别是有些做VC容易犯这个错误,比如OpenAI做成了,已经证明了,是个傻子都能看到OpenAI做的很成功,我们容易对它顶礼膜拜,恨不得跪下。对创业者很多还不成形的想法,因为八字没有一撇,光看到了你的很多缺点,这种价值观是不对的,容易Miss掉一些有潜力的项目。

8、封装函数

包含了之前步骤中存储的文本嵌入向量。函数的目的是接收用户的查询,从数据库中检索相关信息,并生成一个回答。

python 复制代码
def main(query):
    results = collection.query(
    query_texts=[query],
    n_results=2
)
    content=results['documents'][0]
    prompt=f"""
    用户问题:{query}
    <context>
    {content}
    </context>
    根据<context>里的知识点回答用户问题
    """
    response = erniebot.ChatCompletion.create(model="ernie-4.0", messages=[{"role": "user", "content": prompt}])
    return response.get_result()
query=input("请输入您要查询的问题:")
print(main(query))

代码地址:

https://aistudio.baidu.com/projectdetail/7431640

相关推荐
陈希瑞2 分钟前
GitHub Skill Forge 深度解析:把任意 GitHub 仓库一键锻造成 AI 可调用“技能包”
人工智能·github
工藤学编程2 分钟前
零基础学AI大模型之LLM存储优化:大量QA与长对话问题实战
人工智能
徐礼昭|商派软件市场负责人3 分钟前
AI 重构网购体验:从 “将就” 到 “讲究” 的消费者进化史|徐礼昭
大数据·人工智能·重构·智能客服·零售·智能搜索·ai推荐
ViiTor_AI3 分钟前
视频水印怎么去?8 款免费视频水印去除工具实测对比(不模糊)
人工智能·音视频
Java后端的Ai之路4 分钟前
【AI大模型开发】-RAG多模态详解(通俗易懂)
人工智能·大模型·rag多模态
飞凌嵌入式6 分钟前
嵌入式AI领域的主控选择
linux·arm开发·人工智能·嵌入式硬件
_YiFei6 分钟前
2026年论文保姆级攻略:降ai率工具深度实测(附免费降ai率避坑指南)
人工智能
一只大侠的侠7 分钟前
用PyTorch Lightning快速搭建可复现实验 pipeline
人工智能·pytorch·python
KG_LLM图谱增强大模型8 分钟前
[290页电子书]打造企业级知识图谱的实战手册,Neo4j 首席科学家力作!从图数据库基础到图原生机器学习
人工智能·知识图谱·neo4j
无忧智库15 分钟前
深度解析:某流域水务集团“数字孪生流域”建设工程可行性研究报告(万字长文)(WORD)
大数据·人工智能