17 LlamaIndex中的提示(prompt)使用模式

LlamaIndex中的提示使用模式

在LlamaIndex中,提示(prompts)是与语言模型(LLM)交互的关键部分。通过自定义提示,你可以更精确地控制模型的输出,以满足特定需求。本文将介绍如何在LlamaIndex中定义和使用自定义提示,以及一些高级提示功能。

定义自定义提示

定义自定义提示非常简单,只需创建一个格式字符串即可。以下是一个示例:

from llama_index.core import PromptTemplate

template = (
    "We have provided context information below. \n"
    "---------------------\n"
    "{context_str}"
    "\n---------------------\n"
    "Given this information, please answer the question: {query_str}\n"
)
qa_template = PromptTemplate(template)

# 你可以创建文本提示(用于completion API)
prompt = qa_template.format(context_str=..., query_str=...)

# 或者轻松转换为消息提示(用于chat API)
messages = qa_template.format_messages(context_str=..., query_str=...)

注意:你可能会看到对诸如QuestionAnswerPrompt、RefinePrompt等旧版提示子类的引用。这些已被弃用(现在是PromptTemplate的类型别名)。现在你可以直接指定PromptTemplate(template)来构造自定义提示。但仍需确保模板字符串包含预期的参数(例如{context_str}{query_str})。

你还可以从聊天消息定义模板:

from llama_index.core import ChatPromptTemplate
from llama_index.core.llms import ChatMessage, MessageRole

message_templates = [
    ChatMessage
<think>我们正在处理用户的问题:"请问LlamaIndex 使用方法及示例教程"。根据之前的对话历史,用户已经询问过LlamaIndex支持的数据库类型,现在转向询问使用方法和示例教程。 根据提供的引用,我们可以总结出以下关键点: 引用[1]:使用LLM进行高效查询,包括环境配置、创建查询引擎,结合向量存储、总结索引和工具检索器。 引用[2]:构建聊天引擎,包括加载数据、创建索引、配置聊天引擎,以及通过中专API调用大模型。 引用[3]:构建私有知识库的保姆级教程,包括数据注入、结构化(索引构建)、访问(检索)的完整RAG实现。 引用[4]:从基础智能体到RAG文档检索的分步指南,包括前期准备(配置OpenAI API环境)和代码实现。 引用[5]:结合本地模型(如通过Ollama)的入门教程,包括安装依赖项。 因此,我们可以将回答组织为以下几个部分: 1. 环境配置(安装和设置) 2. 加载数据与创建索引 3. 构建查询引擎(基本查询) 4. 构建聊天引擎(对话式交互) 5. 构建RAG应用(文档检索) 6. 结合本地模型(如Ollama) 每个部分提供简要说明和代码示例。 注意:由于用户之前的问题是关于数据库的,我们可以在示例中适当结合之前提到的数据库(如使用PostgreSQL作为向量存储),但重点在于LlamaIndex的基本使用流程。 另外,根据系统指令,我们需要在适当的地方添加引用标识,并且代码块要正确。 最后,生成相关问题。 开始构建回答:</think>### LlamaIndex 使用方法及示例教程 LlamaIndex 是一个强大的 LLM 数据框架,专为私有知识库构建、RAG 应用和智能代理开发设计。以下是核心使用流程及代码示例,涵盖数据加载、索引构建、查询引擎和聊天引擎实现[^3][^4]: --- #### 一、环境配置与安装 ```bash # 基础安装 pip install llama-index python-dotenv # 扩展支持(向量库/本地模型) pip install llama-index-vector-stores-chroma # Chroma向量库 pip install llama-index-llms-ollama # Ollama本地模型支持[^5] ``` #### 二、核心使用流程 ##### 1. 数据加载与索引构建 ```python from llama_index.core import VectorStoreIndex, SimpleDirectoryReader from llama_index.vector_stores.chroma import ChromaVectorStore import chromadb # 加载本地文档(支持PDF/TXT/HTML等) documents = SimpleDirectoryReader("data").load_data() # 创建Chroma向量库 chroma_client = chromadb.PersistentClient(path="./chroma_db") vector_store = ChromaVectorStore(chroma_collection=chroma_client.create_collection("knowledge")) index = VectorStoreIndex.from_documents(documents, vector_store=vector_store) # 自动生成嵌入向量[^3] ``` ##### 2. 基础查询引擎 ```python query_engine = index.as_query_engine() response = query_engine.query("LlamaIndex如何优化检索效率?") print(response) # 输出:LlamaIndex通过向量索引和分层筛选... [^1] ``` ##### 3. 聊天引擎实现(对话式交互) ```python from llama_index.core.memory import ChatMemoryBuffer memory = ChatMemoryBuffer.from_defaults(token_limit=1500) chat_engine = index.as_chat_engine( chat_mode="context", # 上下文感知模式 memory=memory, system_prompt="你是一个技术文档助手,用简洁语言回答" ) # 多轮对话 print(chat_engine.chat("RAG是什么?")) # 解释RAG概念 print(chat_engine.chat("用Python示例说明")) # 自动关联上文生成代码[^2] ``` ##### 4. 自定义检索器(混合搜索) ```python from llama_index.core.retrievers import VectorIndexRetriever from llama_index.core.query_engine import RetrieverQueryEngine # 同时使用向量+关键词检索 vector_retriever = VectorIndexRetriever(index=index, similarity_top_k=3) keyword_retriever = index.as_retriever(retriever_mode="keyword") hybrid_retriever = HybridRetriever([vector_retriever, keyword_retriever]) query_engine = RetrieverQueryEngine.from_args(hybrid_retriever) ``` --- #### 三、进阶应用示例 ##### 1. RAG 文档检索系统 ```python # 结合工具调用的智能体 from llama_index.core.tools import QueryEngineTool from llama_index.agent.openai import OpenAIAgent tool = QueryEngineTool.from_defaults(query_engine=query_engine) agent = OpenAIAgent.from_tools([tool], verbose=True) # 执行复杂任务 agent.chat("总结data/目录下所有PDF中关于向量数据库的内容,并对比Chroma和Milvus") ``` ##### 2. 本地模型集成(Ollama) ```python from llama_index.llms.ollama import Ollama from llama_index.embeddings.huggingface import HuggingFaceEmbedding # 使用本地LLM和嵌入模型 llm = Ollama(model="llama3", request_timeout=60.0) embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-small-zh") index = VectorStoreIndex.from_documents(documents, embed_model=embed_model, llm=llm) # [^5] ``` --- ### 四、最佳实践 1. **索引优化** - 大型数据集使用 `SentenceSplitter` 分块(建议 512 tokens) - 添加元数据过滤:`index.storage_context.persist(persist_dir="./storage")` 2. **性能调优** ```python # 加速检索 index.as_query_engine( similarity_top_k=5, # 减少召回数量 response_mode="tree_summarize" # 分层总结结果 ) ``` 3. **错误处理** ```python try: response = query_engine.query("非法指令@@") except Exception as e: print(f"查询失败: {str(e)}") # 捕获LLM格式错误 ``` > ⚙️ **部署提示**:生产环境建议使用 `FastAPI` 封装引擎,搭配 `PGVector` 实现高并发访问[^3][^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

需要重新演唱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值