1.通过优化提示词来调整大模型的回答
1.1使用场景
默认提示词无法满足业务要求。
回答的内容太简单/困难,输出内容/格式/语气达不到要求等
1.2llama-index 的提示词模版
1.2.1llama-index 的默认模板
from llama_index.llms.dashscope import DashScope
from llama_index.core import SimpleDirectoryReader, VectorStoreIndex
from llama_index.embeddings.dashscope import DashScopeEmbedding, DashScopeTextEmbeddingModelsimport os
os.chdir(os.path.dirname(os.path.abspath(__file__)))from config.load_key import load_key
load_key()# 创建索引
documents = SimpleDirectoryReader("./chatbot/docs").load_data()
index = VectorStoreIndex.from_documents(documents,embed_model=DashScopeEmbedding(model_name=DashScopeTextEmbeddingModels.TEXT_EMBEDDING_V2)
)# 创建查询引擎
query_engine = index.as_query_engine(streaming=True,llm=DashScope(model_name="qwen-plus",api_key=os.getenv("DASHSCOPE_API_KEY"))
)
# print(query_engine.get_prompts())# 打印prompt模板
print(f"LlamaIndex原始prompt模板为:\n{query_engine.get_prompts()['response_synthesizer:text_qa_template'].default_template.template}")
1.2.2使用自定义模板
from chatbot import ragfrom config.load_key import load_key
load_key()# 加载索引
index = rag.load_index()
# 设置query engine
query_engine = rag.create_query_engine(index=index)# 自定义prompt模板
from llama_index.core import PromptTemplateprompt_template_string = ("你是贾维斯,你回答问题时,需要在回答前加上贾维斯说:""注意事项:\n""1. 根据上下文信息而非先验知识来回答问题。\n""2. 如果是工具咨询类问题,请务必给出下载地址链接。\n""以下是参考信息。""---------------------\n""{context_str}\n""---------------------\n""问题:{query_str}\n。""回答:贾维斯说:<answer>"
)prompt_template = PromptTemplate(prompt_template_string)
query_engine.update_prompts({"response_synthesizer:text_qa_template": prompt_template})def qa_v2(question, query_engine):"""执行问答"""streaming_response = query_engine.query(question)streaming_response.print_response_stream()if __name__ == "__main__":qa_v2('我们公司项目管理应该用什么工具', query_engine=query_engine)
2.如何改进提示词
提示词工程(Prompt Engineering)
2.1 提示词框架
1.直接提问,也称为零样本提示(Zero-Shot Prompting),即不给大语言模型提供案例,完全依靠 LLM 理解和处理能力完成任务。适用于目标明确、问题简单、答案确定且唯一等场景。
2.在提示词中提供少量(通常几个或几十个)示例,也称为少样本提示(Few-Shot Prompting),以帮助模型更好地理解任务要求和期望输出。
3.赋予模型一个具体的角色或身份,来引导模型在特定角色视角下生成回答。如:专业知识、特定视角、特定语言风格等
4.把一个复杂的任务,拆解成多个稍微简单的任务,让大语言模型分步来思考问题,称为思维链(Chain-of-Thought Prompting, CoT)提示,这种方式可让大语言模型像人类一样逐步解释或进行推理,从而极大地提升 LLM 的能力。
5.提示词分隔符(如 # - ,等)在复杂场景中的应用,确保多角色、多段落提示时的上下文管理和信息隔离。
6.构建第一个提示词框架:“背景信息”+“指令”+“输出指示”
扩展成更加通用的框架:
2.2 其他常用的提示词框架
框架 | 具体应用领域(举例子) | 内容含义 |
---|---|---|
CRISPE | 项目管理、团队协作、客户服务 | 能力 (Capabilities) 角色 (Roles) 洞察 (Insights) 陈述 (Statement) 个性 (Personality) 实验 (Experiment) |
ROSES | 软件开发、产品设计、市场营销策略规划 | 角色 (Role) 客观 (Objective) 场景 (Setting) 预期解决方案 (Expected Solution) 步骤 (Steps) |
TRACE | 市场研究、业务分析、教学设计 | 任务 (Task) 请求 (Request) 操作 (Action) 上下文 (Context) 示例 (Examples) |
三幕剧的机制 | 剧情 | 触发/冲突/解决 |
2.3 提示词技巧
路径:应用组件 - Prompt 工程
提示词自动优化工具
通用技巧: 提示词工程指南
少量样本提示((Few-Shot Prompting)
链式思考(Chain-of-Thought Prompting)
ReACT框架(Reason-Act)
3.为答疑机器人扩展问题分类与路由功能
3.1 意图识别
3.2 构建路由模块
优化策略:
明确输出格式:指定输出格式,使分类结果规范且易于解析。
Few-shot 示例:提供示例,帮助大模型理解每个类别的特征和分类规则。