大模型应用开发rag-第1个rag应用

文章目录

【README】

  1. 本文内容代码总结自《大模型应用开发-rag实战课》,作者黄佳;
    1. 作者源代码地址: https://github.com/huangjia2019/rag-in-action/tree/master/00-简单RAG-SimpleRAG
  2. 本文记录了第1个rag应用,该应用基于langchain,deepseek实现。
  3. 本文python应用使用poetry管理依赖包;
  4. python版本是3.11.9 ;
    1. 注意:python版本不能太高,否则可能导致兼容性问题; (经测试,python3.14.3无法与sentence-transformers依赖包最新版本兼容)

【1】第1个rag应用

  1. 源码参见: https://github.com/TomJourney/python/tree/main/third_poetry_demo

  2. 本文所有依赖包由poetry管理,依赖包定义在 third_poetry_demo/pyproject.toml文件中。 安装好poetry后,执行运行 poetry install 即可(根据pyproject.toml中定义的依赖包进行安装)

【1.1】rag应用具体逻辑

  1. 背景:根据黑神话悟空的wiki介绍,基于rag实现关于黑神话悟空的QA系统;

【 rag_01_p11_langchain.py 】

python 复制代码
# 1. 加载文档
import os
from dotenv import load_dotenv

# 加载环境变量
load_dotenv()

from langchain_community.document_loaders import WebBaseLoader

loader = WebBaseLoader(
    web_paths=("https://zh.wikipedia.org/wiki/黑神话:悟空",)
)
docs = loader.load()

# 2. 文档分块
from langchain_text_splitters import RecursiveCharacterTextSplitter

#  创建文本分割器
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
doc_split_result = text_splitter.split_documents(docs)

# 3. 设置嵌入模型
from langchain_huggingface import HuggingFaceEmbeddings

embed_model = HuggingFaceEmbeddings(
    model_name="BAAI/bge-small-zh-v1.5",
    model_kwargs={'device': 'cpu'},
    encode_kwargs={'normalize_embeddings': True}
)

# 4. 创建向量存储
from langchain_core.vectorstores import InMemoryVectorStore

vector_store = InMemoryVectorStore(embed_model)
vector_store.add_documents(doc_split_result)

# 5. 构建用户查询
question = "黑悟空有哪些游戏场景?"

# 6. 6. 在向量存储中搜索相关文档,并准备上下文内容
retrieved_docs = vector_store.similarity_search(question, k=3)
joined_retrieved_docs = "\n\n".join(doc.page_content for doc in retrieved_docs)
print("joined_retrieved_docs = ", joined_retrieved_docs)

# 7. 构建提示模版
from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_template("""
                    基于以下上下文,回答问题。如果上下文中没有相关信息,
                    请说"我无法从提供的上下文中找到相关信息"。
                    上下文: {context}
                    问题: {question}
                    回答:"""
)

# 8. 使用大模型生成回答
from langchain_deepseek import ChatDeepSeek
llm = ChatDeepSeek(
    model="deepseek-chat",
    temperature=0.7,
    max_tokens=2048,
    api_key=os.getenv("DEEPSEEK_API_KEY")
)

answer = llm.invoke(prompt.format(question=question, context=joined_retrieved_docs))
print(answer)

【1.2】deepseek响应效果

json 复制代码
content='根据提供的上下文,黑神话:悟空的游戏场景融合了中国的文化和自然地标。具体提到的取景地包括:\n\n*   重庆的大足石刻\n*   山西省的小西天、南禅寺、铁佛寺、广胜寺和鹳雀楼\n\n此外,上下文还提及游戏共有36个取景地,其中27个位于山西省。' 
相关推荐
CoderYanger4 分钟前
Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)
java·数据库·spring·面试·职场和发展·java-ee·mybatis
XLYcmy41 分钟前
信息检索报告数字经济赋能城市低碳治理的路径研究——基于“传统数据库 + 生成式人工智能”双轮驱动的检索实践 检索实施与结果分析 Web of Science
数据库·ai·llm·prompt·ssci·deepseek·wos
Decay__1 小时前
21_MySQL 优化案例集 —— 慢 SQL 优化、索引重构与参数调整收益对比
运维·数据库·sql·mysql·架构
codigger2 小时前
MySQL 深分页优化:limit 100000, 10 慢在哪,怎么救
数据库·sql·mysql·程序员
麦壳饼2 小时前
SonnetDB 5.0 正式发布:增强 SQL 与事务,开放九模型 MCP 读写
数据库·人工智能·sql·sonnetdb
Decay__11 小时前
18_MySQL 智能巡检方案 —— 巡检项清单 / 一键巡检脚本 / 健康评分
运维·数据库·sql·mysql·架构
java_logo11 小时前
Docker 部署 Liquibase:轻松搭建数据库变更管理
数据库·docker·容器·数据库管理·liquibase·轩辕镜像·数据库变更
凤凰院凶涛QAQ13 小时前
《MySQL内核拆解:从SQL到InnoDB》(四) : 联合查询 & 视图
数据库·sql·mysql
码农小河6613 小时前
基于SSM+JSP的高校专业信息管理系统【附源码+数据库】
java·开发语言·数据库
张小姐的猫13 小时前
【MySQL】访问 & 数据流动原理
android·数据库·mysql·adb·1024程序员节