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

相关推荐
德迅云安全—珍珍5 小时前
2026 年网络安全预测:AI 全面融入实战的 100+行业洞察
人工智能·安全·web安全
数新网络7 小时前
CyberScheduler —— 打破数据调度边界的核心引擎
人工智能
Codebee7 小时前
Ooder框架8步编码流程实战 - DSM组件UI统计模块深度解析
人工智能
Deepoch7 小时前
智能升级新范式:Deepoc开发板如何重塑康复辅具产业生态
人工智能·具身模型·deepoc·智能轮椅
赋创小助手7 小时前
融合与跃迁:NVIDIA、Groq 与下一代 AI 推理架构的博弈与机遇
服务器·人工智能·深度学习·神经网络·语言模型·自然语言处理·架构
静听松涛1337 小时前
多智能体协作中的通信协议演化
人工智能
基咯咯7 小时前
Google Health AI发布MedASR:Conformer 医疗语音识别如何服务临床口述与对话转写
人工智能
白日做梦Q8 小时前
深度学习模型评估指标深度解析:不止于准确率的科研量化方法
人工智能·深度学习
Yyyyy123jsjs8 小时前
外汇Tick数据交易时段详解与Python实战分析
人工智能·python·区块链
张彦峰ZYF8 小时前
提示词工程实战指南:从概念认知到可验证的高质量 Prompt 设计
人工智能·提示词工程实战指南·高质量 prompt 设计