LlamaIndex是大模型时代的数据处理中枢,专为知识库构建设计,核心能力包括:
多格式文档加载:支持PDF/Word/Markdown等20+格式
智能分块策略:
from llama_index.core.node_parser import SentenceSplitter splitter = SentenceSplitter( chunk_size=512, # 块大小 chunk_overlap=64, # 块间重叠 separator="\n" # 分割符 ) nodes = splitter.get_nodes_from_documents(documents)
混合检索:结合向量搜索与关键词匹配
企业级知识库架构:
[数据湖] → LlamaIndex预处理 → [向量存储] → [检索服务]
用户问题向量化 → 相似性搜索 → Top-K文档召回
增强阶段:
prompt_template = """ 基于以下知识: {context_str} 请回答:{query_str} 要求: - 引用文档编号 - 不超过200字 """
生成阶段:大模型整合检索结果生成答案
与传统微调对比:
推理速度:A100单卡达1200 tokens/s
显存占用:7B模型仅需14GB显存(FP16)
Docker部署命令:
docker run -d --gpus all \ -p 8000:8000 \ -v /data/deepseek:/models \ deepseekai/deepseek-r1:latest \ --model-path /models/deepseek-r1-7b \ --max-length 1024
API调用示例:
import requests response = requests.post( "http://localhost:8000/generate", json={"prompt": "量子计算的主要挑战是什么?", "temperature": 0.7} ) print(response.json()["text"])
创建专用环境:
conda create -n rag python=3.10 conda activate rag pip install llama-index chromadb deepseek transformers streamlit
环境导出与共享:
conda env export > environment.yml conda env create -f environment.yml
本地加载示例:
from langchain.embeddings import HuggingFaceEmbeddings embed_model = HuggingFaceEmbeddings( model_name="BAAI/bge-large-zh", model_kwargs={'device': 'cuda'}, encode_kwargs={'normalize_embeddings': True} ) vectors = embed_model.encode_documents(["量子计算利用量子比特..."])
教师模型:Qwen-14B
学生模型:Qwen-7B
知识迁移率:92%
微调代码核心:
from transformers import TrainingArguments training_args = TrainingArguments( output_dir="./results", num_train_epochs=3, per_device_train_batch_size=8, gradient_accumulation_steps=4, fp16=True, logging_steps=100 ) trainer = Trainer( model=model, args=training_args, train_dataset=dataset, compute_metrics=compute_accuracy ) trainer.train()
7.1 测试用例设计
def evaluate_rag(answer, ground_truth): # 准确率 accuracy = f1_score(ground_truth, answer) # 响应延迟 latency = time.time() - start_time # 相关性 relevance = cosine_similarity(embed(answer), embed(question)) return {"accuracy": accuracy, "latency": latency, "relevance": relevance}
import chromadb client = chromadb.PersistentClient(path="/data/knowledge_db") collection = client.create_collection("enterprise_docs")
数据注入:
from llama_index.core import VectorStoreIndex index = VectorStoreIndex.from_documents( documents, storage_context=storage_context, embed_model=embed_model )
版本管理:每日自动备份+差异更新
import streamlit as st st.title("企业知识问答系统") question = st.text_input("请输入您的问题:") if st.button("提交"): with st.spinner('正在查询...'): result = rag_query(question) st.markdown(f"**答案**:{result['answer']}") st.write("参考文档:") for doc in result['sources']: st.caption(f"- {doc}")
部署命令:
streamlit run app.py --server.port 8501 --server.address 0.0.0.0
本文系聚客AI原创,转载需备注来源,更多AI大模型应用开发学习内容,尽在聚客AI学院。