1. 理解LlamaIndex中的Prompt机制
在大语言模型应用中,Prompt(提示词)是与模型交互的核心媒介。它就像给一位知识渊博但缺乏具体指令的专家下达的工作说明书——如果没有明确的指示,专家可能会给出泛泛而谈的回答;而通过精心设计的Prompt,我们可以获得精准符合需求的输出。
LlamaIndex提供的PromptTemplate和ChatPromptTemplate,本质上是一种结构化提示词管理工具。它们解决了以下痛点:
- 避免硬编码:将提示词逻辑与业务代码分离,便于维护和迭代
- 支持动态变量:通过{var}语法实现上下文感知的提示生成
- 统一管理:集中维护不同场景下的提示模板,确保一致性
提示:在实际项目中,建议为每个业务场景创建独立的prompt模板文件,而不是散落在代码各处。这既便于团队协作,也方便后续进行A/B测试优化提示效果。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Prompt的组成要素解析
一个高效的Prompt通常包含以下核心组件(根据实际需求组合使用):
2.1 角色定义
python复制ChatMessage(content="你是一位资深Python工程师", role=MessageRole.SYSTEM)
- 作用:设定模型的"人设",影响其回答的专业度和视角
- 技巧:角色描述越具体越好,例如"有10年Web开发经验的Django专家"比"程序员"效果更好
2.2 任务指令
python复制template = """请用不超过50字总结以下技术文档:
{doc_content}"""
- 关键点:
- 明确动词(总结/改写/对比等)
- 指定长度限制等量化要求
- 说明输出格式(Markdown/JSON等)
2.3 上下文注入
python复制"已知需求文档:\n{req_doc}\n\n当前代码实现:\n{code_impl}"
- 最佳实践:
- 对长上下文进行分块处理
- 添加明显的分隔标记(如"-----")
- 重要信息放在前部(模型对开头内容更敏感)
2.4 示例演示
python复制"""
好的回答示例:
输入:如何优化SQL查询?
输出:1. 添加适当索引 2. 避免SELECT * 3. 优化JOIN顺序
现在请回答:
{user_question}
"""
- 适用场景:需要特定格式或风格的输出时
- 注意:示例必须与期望输出高度一致
3. 实战模板开发指南
3.1 基础问答模板优化版
python复制from llama_index.core import PromptTemplate
qa_template = PromptTemplate("""
[角色]
你是{domain}领域的资深专家
[背景]
以下是相关技术文档节选:
------
{context_str}
------
[任务]
请用{language}回答以下问题:
问题:{query_str}
[要求]
1. 分点列出核心要点
2. 每个要点附带简短解释
3. 如信息不足请明确说明
4. 使用技术术语但保持易懂
[输出格式]
### 问题重述
{query_str}
### 专业分析
1. 要点1: ...
- 解释: ...
2. 要点2: ...
- 解释: ...
### 补充说明
...
""")
# 使用示例
print(qa_template.format(
domain="数据库优化",
context_str=postgresql_tuning_guide,
query_str="如何优化PostgreSQL的写入性能?",
