当前位置: 首页 > news >正文

001:简单 RAG 入门

lamaIndex 示例(千问)

文件名:01_LlamaIndex.py

import os from llama_index.llms.dashscope import DashScope, DashScopeGenerationModels from llama_index.embeddings.dashscope import DashScopeEmbedding from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings from dotenv import load_dotenv os.environ['USER_AGENT'] = 'my-rag-app/1.0' load_dotenv() DATA_DIR = "./data" # 1. 配置 LLM Settings.llm = DashScope( model_name=DashScopeGenerationModels.QWEN_MAX, api_key=os.getenv("DASHSCOPE_API_KEY") ) # 2. 设置嵌入模型 Settings.embed_model = DashScopeEmbedding( model_name='text-embedding-v2', api_key=os.getenv("DASHSCOPE_API_KEY"), timeout=60, # 增加超时时间 max_retries=5 # 增加重试次数 ) # 3. 加载与索引 if not os.path.exists(DATA_DIR): print(f"错误:未找到路径 {DATA_DIR}") else: # 建议直接使用绝对路径,避免相对路径带来的困扰 print("正在加载文档...") documents = SimpleDirectoryReader(DATA_DIR).load_data() print("正在创建索引(此步涉及 Embedding 接口调用)...") index = VectorStoreIndex.from_documents(documents) # 4. 查询 query_engine = index.as_query_engine() print("正在提问...") response = query_engine.query("2026春运时间是什么时候?") print(f"AI 回答结果:\n{response}")

运行方式:

python 01_LlamaIndex.py

运行结果:

正在加载文档... 正在创建索引(此步涉及 Embedding 接口调用)... 正在提问... AI 回答结果: 2026年春运的时间是从2月2日至3月13日。

LangChain 示例(DeepSeek)

文件名:02_LangChain_DeepSeek.py

import os from dotenv import load_dotenv os.environ['USER_AGENT'] = 'my-rag-app/1.0' load_dotenv() # 1. 加载数据 from langchain_community.document_loaders import TextLoader # 随便复制一些即时新闻放到 txt 文件中,例如:https://baike.baidu.com/item/2026%E5%B9%B4%E6%98%A5%E8%BF%90/66941026?fromModule=home_hotspot loader = TextLoader( file_path="data/a.txt", encoding="utf-8" # 如果是中文文件,确保使用 utf-8 编码 ) docs = loader.load() # 2. 文档分块 from langchain_text_splitters import RecursiveCharacterTextSplitter text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200) all_splits = text_splitter.split_documents(docs) # 3. 设置嵌入模型 # 使用本地 HuggingFace 模型(推荐,免费且稳定),可能需要科学网络 from langchain_huggingface import HuggingFaceEmbeddings embeddings = 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(embeddings) vector_store.add_documents(all_splits) # 5. 构建用户查询,针对前面的即时新闻提问 question = "2026春运时间是什么时候?" # 6. 在向量数据库中搜索最相似的文档 retrived_docs = vector_store.similarity_search(question, k=3) docs_content = "\n\n".join(doc.page_content for doc in retrived_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", # DeepSeek API 支持的模型名称 temperature=0.7, # 随机性 max_tokens=2048, # 最大输出长度 api_key=os.getenv("DEEPSEEK_API_KEY") # 从环境变量加载API key ) answer = llm.invoke(prompt.format(question=question, context=docs_content)) print(answer.content) # 只打印回答内容
http://www.cnnetsun.cn/news/1582558.html

相关文章:

  • 革新性跨系统应用运行方案:APK Installer实现Windows原生Android应用体验
  • Notepad4 现代化文本引擎:核心架构与UTF-8状态机解析机制详解
  • S32K3系列MCAL移植实战:从K344到K312,手把手教你搞定EB Tresos配置与常见报错处理
  • WSL 升级报错:权限问题排查与修复指南
  • 深度学习基石:从卷积神经网络理解 Stable Yogi 的图像生成能力
  • 保姆级教程:用MuJoCo的add_marker给你的机械臂末端轨迹画条‘光带’
  • 别再为毕设发愁了!手把手教你用机智云+ESP8266+STM32F103C8T6搞定物联网远程控制(附完整代码包)
  • 告别复制粘贴!用Code2Word在Word文档中一键插入高亮代码(Vue3+highlight.js实战)
  • NSudo终极指南:3大核心功能解锁Windows系统权限管理新境界
  • 从H1601SR到HX4001SR:一文读懂千兆网络变压器内部结构如何影响你的PHY选型与布线
  • Redmine RESTful API实战指南:从入门到精通项目自动化
  • 从MovieLens到你的业务:手把手复现KAR实验,看‘推理知识’如何让CTR模型AUC提升1.6%
  • DeepSeek-OCR 部署实战:用 Conda + UV 管理 Python 3.12 环境,大幅提升依赖安装速度
  • IDEA全局替换不够用?试试这个Java脚本,精准处理多模块项目文件内容替换
  • 5分钟成为AI图像清理大师:让不需要的元素从照片中“神奇消失“✨
  • YOLOv9官方镜像实战:3步完成训练与推理,小白也能轻松搞定
  • 东莞seo引擎优化和网站推广有什么区别
  • 从磁力线到最小磁阻:手把手拆解一个微型直流电机的内部‘磁路战争’
  • 数据驱动的合金设计全流程:从前向预测、逆向优化到主动学习的智能闭环!
  • 从正则表达式到词法分析器:用NFA/DFA模拟器理解编译前端核心
  • Video-LLaMA终极指南:如何让AI真正理解视频内容?
  • 避坑指南:在Vitis 2020.2里集成HLS IP后,如何避免平台‘过时’报错?
  • Nunchaku FLUX.1 CustomV3应用案例:电商海报、社交配图一键生成实战
  • 商用建筑清洁机器人跨层调度架构:非侵入式梯控状态机与平层校验
  • Qwen3-Embedding-4B应用案例:智能客服问答系统搭建实战
  • 终极Flash浏览器解决方案:在2024年轻松畅玩经典Flash内容
  • 锂电池最怕啥?枝晶啊!这玩意儿长起来就跟容嬷嬷的针似的,分分钟扎穿隔膜导致短路。最近在COMSOL里折腾了个脉冲抑制枝晶的模型,直接看效果
  • 避坑指南:STM32F4上CherryUSB与LWIP 2.2.1整合的那些‘坑’(FreeRTOS环境)
  • springboot+vue基于web的高校教研室活动管理系统
  • 用树莓派Zero 2W和Qt5打造你的第一个工业控制面板(附完整源码)