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

相关推荐
To_OC22 分钟前
大模型蒸馏是啥?说白了就是大厨带徒弟的学问
人工智能·llm·agent
新手来了@click36 分钟前
JAVA+AI 简化开发操作|文章被 AI Agent 技术社区收录分享
人工智能
GuWenyue1 小时前
Cursor黑盒拆解!1套LangChain.js手写Mini编程Agent,自动生成React项目,效率提升60%
前端·数据库·人工智能
GuWenyue1 小时前
传统Agent工具两大痛点!300行代码落地MCP跨语言工具,彻底解耦LLM与工具
前端·人工智能·算法
老云讲算力市场1 小时前
WAIC首日观察:国产算力与机器人加速落地,奇点算力迎来产业新机遇
人工智能·科技
糖果店的幽灵2 小时前
【DeepAgents 从入门到精通】Context Management 上下文管理
java·人工智能·后端·spring·中间件·langgraph·deepagents
小林ixn2 小时前
大模型随机说话的秘密:Temperature 和 Top K 深度解析,LangChain 实战调优
人工智能·langchain
ALINX技术博客2 小时前
ALINX 亮相 2026 WAIC 世界人工智能大会,展示 AI 视觉 FPGA+GPU 异构计算与电子后视镜解决方案
人工智能·ai·fpga·世界人工智能大会·电子后视镜
程序员老猫2 小时前
当 AI 能写 80% 的代码时,后端工程师的核心价值还剩什么?
人工智能
想会飞的蒲公英2 小时前
计算机怎样读取中文文本:编码、清洗与标准化
人工智能·python·自然语言处理