news 2026/6/10 14:43:04

LLMIndex的使用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LLMIndex的使用

在大语言模型(LLM)快速发展的今天,如何让模型基于我们自己的私有知识进行准确回答,成为了一个关键问题。检索增强生成(Retrieval-Augmented Generation, RAG)正是解决这一问题的有效范式。本文将通过一段完整的 Python 代码,带你使用LangChain框架构建一个本地 RAG 系统,并借此介绍 LLM 应用开发中的核心组件——虽然标题提到“LLMIndex”,但实际在 LangChain 生态中,我们更常使用 FAISS、Chroma 等向量数据库来实现类似功能(注:LLMIndex 是 LlamaIndex 项目的核心概念,而本文使用的是 LangChain)。

📌说明:本文示例基于LangChain + 本地运行的 Qwen 模型(通过http://127.0.0.1:1234/v1提供 OpenAI 兼容 API),适合希望在本地部署私有知识问答系统的开发者。


一、准备工作

pipinstalllangchain langchain-community langchain-openai python-dotenv faiss-cpu

同时,你需要:

  • 一个本地运行的大模型服务(如 LM Studio、Ollama 或 vLLM),并开启 OpenAI 兼容 API(端口 1234)。
  • 一份名为knowledge.txt的文本知识库文件(UTF-8 编码)。
  • .env文件中配置OPENAI_API_KEY(即使使用本地模型,LangChain 仍要求提供 API Key,可设为任意字符串,如sk-local)。

二、代码解析:构建 RAG 流程

1. 加载环境变量与文档

load_dotenv()api_key=os.getenv("OPENAI_API_KEY")loader=TextLoader("knowledge.txt",encoding="utf-8")documents=loader.load()

这里我们使用TextLoader读取本地知识文件。LangChain 支持多种格式(PDF、Word、网页等),可根据需求替换加载器。

2. 文本分块(Chunking)

text_splitter=RecursiveCharacterTextSplitter(chunk_size=300,chunk_overlap=50)texts=text_splitter.split_documents(documents)

由于 LLM 有上下文长度限制,需将长文档切分为小段。RecursiveCharacterTextSplitter按字符递归分割,保留语义连贯性,chunk_overlap避免信息割裂。

3. 向量化与向量存储

embeddings=OpenAIEmbeddings(model="text-embedding-qwen3-embedding-0.6b",api_key=api_key,base_url="http://127.0.0.1:1234/v1")vectorstore=FAISS.from_documents(texts,embeddings)

关键点来了!我们使用本地嵌入模型(如 Qwen Embedding)将文本转换为向量,并存入FAISS(Facebook 开源的高效相似性搜索库)。这一步相当于构建了“知识索引”——类似于 LlamaIndex 中的VectorStoreIndex

4. 配置本地大语言模型

llm=ChatOpenAI(model='qwen2.5-7b-instruct-1m',api_key=api_key,base_url="http://127.0.0.1:1234/v1")

通过 OpenAI 兼容接口调用本地 Qwen 模型,无需联网,保障数据隐私。

5. 构建 RAG 链

retriever=vectorstore.as_retriever(search_kwargs={"k":3})template="""使用以下上下文片段来回答问题。 如果你不知道答案,就说你不知道,不要编造答案。 {context} 问题: {question} 有用的回答:"""prompt=ChatPromptTemplate.from_template(template)defformat_docs(docs):return"\n\n".join(doc.page_contentfordocindocs)qa_chain=({"context":retriever|format_docs,"question":RunnablePassthrough()}|prompt|llm|StrOutputParser())

这是 LangChain 的精髓:声明式链式编程

  • retriever从向量库中找出最相关的 3 个文本块;
  • format_docs将检索结果拼接成字符串;
  • prompt注入上下文和问题;
  • llm生成答案;
  • StrOutputParser提取纯文本。

整个流程清晰、模块化,易于调试和扩展。

6. 提问与输出

query="LangChain 支持哪些功能?"result=qa_chain.invoke(query)print("问题:",query)print("回答:",result)

系统会自动检索knowledge.txt中相关内容,并基于上下文生成精准回答。


三、为什么不用 LlamaIndex?

你可能会问:既然提到了 “LLMIndex”,为什么不直接用 LlamaIndex?

  • LlamaIndex更专注于数据索引与查询优化,适合复杂知识图谱、多模态索引等场景;
  • LangChain则是一个通用 LLM 应用框架,强调链式组合、工具集成(如 Agent、Memory)。

两者并非互斥,甚至可以结合使用。但在简单 RAG 场景下,LangChain + FAISS 已足够高效。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 18:43:32

猫抓浏览器扩展:资源嗅探终极指南

猫抓浏览器扩展:资源嗅探终极指南 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在日常网络冲浪中,你是否经常遇到心仪的视频无法保存、高清图片难以下载、音频文件无处提取的…

作者头像 李华
网站建设 2026/6/9 19:38:15

MockGPS位置模拟终极指南:5个简单步骤让你零失败运行

想要在Android设备上实现精准的位置模拟吗?MockGPS作为最专业的GPS位置修改工具,能够让你在任何场景下轻松改变设备位置。但很多用户在使用过程中会遇到配置失败、定位不准、应用闪退等问题。本文将为你提供一套完整的解决方案,确保MockGPS位…

作者头像 李华
网站建设 2026/6/9 18:57:03

文章标题

文章内容 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionToolkit </输出文章>文章内容开始第一行必须是文章的标题并且,# 开头文…

作者头像 李华
网站建设 2026/6/9 5:30:31

如何高效搭建个人AO3镜像站点?完整部署指南

如何高效搭建个人AO3镜像站点&#xff1f;完整部署指南 【免费下载链接】AO3-Mirror-Site 项目地址: https://gitcode.com/gh_mirrors/ao/AO3-Mirror-Site 在数字内容访问受限的环境中&#xff0c;搭建个人AO3镜像站点成为了许多用户的首选方案。本文将详细介绍从零开始…

作者头像 李华
网站建设 2026/6/8 15:16:22

ncmdump:快速解锁加密音乐,让音频文件重获自由

ncmdump&#xff1a;快速解锁加密音乐&#xff0c;让音频文件重获自由 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为音乐平台下载的加密音频无法在其他设备播放而烦恼吗&#xff1f;ncmdump这款专业解密工具能够完美解决NCM…

作者头像 李华
网站建设 2026/6/10 13:26:14

终极NCM解密教程:一键解锁网易云加密音乐

终极NCM解密教程&#xff1a;一键解锁网易云加密音乐 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾在网易云音乐下载了心爱的歌曲&#xff0c;却发现只能在特定客户端播放&#xff1f;无法在车载音响、其他音乐应用或分享…

作者头像 李华