大语言模型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

相关推荐
数据科学作家32 分钟前
学数据分析必囤!数据分析必看!清华社9本书覆盖Stata/SPSS/Python全阶段学习路径
人工智能·python·机器学习·数据分析·统计·stata·spss
CV缝合救星2 小时前
【Arxiv 2025 预发行论文】重磅突破!STAR-DSSA 模块横空出世:显著性+拓扑双重加持,小目标、大场景统统拿下!
人工智能·深度学习·计算机视觉·目标跟踪·即插即用模块
TDengine (老段)4 小时前
从 ETL 到 Agentic AI:工业数据管理变革与 TDengine IDMP 的治理之道
数据库·数据仓库·人工智能·物联网·时序数据库·etl·tdengine
蓝桉8024 小时前
如何进行神经网络的模型训练(视频代码中的知识点记录)
人工智能·深度学习·神经网络
星期天要睡觉5 小时前
深度学习——数据增强(Data Augmentation)
人工智能·深度学习
南山二毛6 小时前
机器人控制器开发(导航算法——导航栈关联坐标系)
人工智能·架构·机器人
大数据张老师6 小时前
【案例】AI语音识别系统的标注分区策略
人工智能·系统架构·语音识别·架构设计·后端架构
xz2024102****6 小时前
吴恩达机器学习合集
人工智能·机器学习
anneCoder6 小时前
AI大模型应用研发工程师面试知识准备目录
人工智能·深度学习·机器学习
骑驴看星星a6 小时前
没有深度学习
人工智能·深度学习