LlamaIndex和LangChain快速入门
一、LlamaIndex 和 LangChain 是什么?
1. LlamaIndex
- 定位: 专为私有数据设计的检索增强生成(RAG)工具。
- 核心功能:
- 结构化/非结构化数据的索引构建(如文档、数据库、API)。
- 高效的语义检索,快速从海量数据中提取关键信息。
- 优势: 简化数据与大模型(如GPT)的对接流程,提升问答系统的准确率。
2. LangChain
- 定位: 大语言模型(LLM)应用开发框架。
- 核心功能:
- 集成多种LLM(OpenAI、HuggingFace等)。
- 提供提示词管理、链式调用、记忆模块、工具代理等功能。
- 优势: 快速构建复杂对话、数据分析等应用,支持模块化扩展。
3. 区别与协作
- 区别: LlamaIndex 专注数据检索,LangChain 专注应用流程构建。
- 协作: LlamaIndex 作为数据层,LangChain 作为处理层,结合实现高效RAG应用。
二、环境准备
1. 安装库
bash
pip install llama-index langchain openai python-dotenv
2. 设置OpenAI API密钥
创建 .env 文件:
env
OPENAI_API_KEY=你的密钥
三、LlamaIndex 快速入门
1. 加载数据并构建索引
python
from llama_index.core import SimpleDirectoryReader, VectorStoreIndex
import os
from dotenv import load_dotenv
load_dotenv()
# 加载文档
documents = SimpleDirectoryReader("data").load_data() # 将文档放入data文件夹
# 创建向量索引
index = VectorStoreIndex.from_documents(documents)
2. 查询数据
python
query_engine = index.as_query_engine()
response = query_engine.query("什么是机器学习?")
print(response.response)
四、LangChain 快速入门
1. 调用大模型
python
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
llm = ChatOpenAI(model="gpt-3.5-turbo")
# 直接提问
response = llm.invoke("解释量子计算")
print(response.content)
2. 使用提示模板
python
prompt = ChatPromptTemplate.from_template("用{style}风格解释{concept}")
message = prompt.format(style="幽默", concept="神经网络")
response = llm.invoke(message)
print(response.content)
3. 创建处理链
python
chain = prompt | llm # 连接提示词与模型
response = chain.invoke({"style": "简洁", "concept": "深度学习"})
print(response.content)
五、结合 LlamaIndex + LangChain
1. 使用LlamaIndex检索,LangChain生成回答
python
from llama_index.core import VectorStoreIndex
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
# 构建索引
index = VectorStoreIndex.from_documents(documents)
retriever = index.as_retriever()
# LangChain组件
llm = ChatOpenAI()
prompt = ChatPromptTemplate.from_template("基于以下内容回答:\n{context}\n\n问题:{query}")
# 构建处理链
chain = {"context": retriever, "query": lambda x: x["query"]} | prompt | llm
# 执行查询
response = chain.invoke({"query": "机器学习的应用场景有哪些?"})
print(response.content)
六、进阶建议
- LlamaIndex:
- 探索不同索引类型(树状索引、关键词索引)。
- 集成数据库或Notion等外部数据源。
- LangChain:
- 使用记忆模块实现多轮对话。
- 尝试Agent调用外部工具(如计算器、搜索引擎)。
- 性能优化:
- 对长文档分块检索,提升效率。
- 调整检索相似度阈值,平衡准确率与召回率。
七、学习资源
- LlamaIndex文档: https://docs.llamaindex.ai
- LangChain文档: https://python.langchain.com
- 实战项目: 尝试构建个人知识库助手或客服机器人。