news 2026/5/1 8:35:30

AI学习笔记 - Prompt

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AI学习笔记 - Prompt

1. Prompts开发基础概念与重要性

在AI应用开发中,Prompts(提示词)是与大语言模型交互的核心桥梁,其质量直接决定了模型输出的准确性和实用性。一个精心设计的Prompt能够引导模型生成符合预期的内容,而模糊的Prompt则可能导致无关或低质量的输出。对于开发者而言,掌握Prompts开发技术是实现高效AI应用的关键第一步。

Prompts不仅仅是简单的问题或指令,它包含了角色定义、任务描述、上下文信息、输出格式等多个维度。在LangChain等框架中,Prompts通过模板化的方式实现了可复用性和可维护性,这使得开发者能够构建更加健壮、高效的LLM应用。

2. 基础PromptTemplate示例

2.1 PromptTemplate实现

让我们从最基础的PromptTemplate开始,这是LangChain中最常用的提示构建工具。以下代码展示了如何创建一个可参数化的提示模板:

from langchain.prompts import PromptTemplate # 创建基础提示模板 prompt = PromptTemplate( input_variables=["topic", "word_count"], template="请用{word_count}字介绍{topic}的历史背景。" ) # 填充变量生成实际提示 formatted_prompt = prompt.format(topic="量子计算", word_count="300") print(formatted_prompt) # 输出:"请用300字介绍量子计算的历史背景。"

这个简单的例子展示了PromptTemplate的核心功能:通过定义占位符(如{topic}{word_count})创建可复用的模板,然后在运行时用具体值填充这些占位符。这种方式避免了硬编码提示文本,提高了代码的可维护性。

2.2 包含角色定义实现

在实际应用中,我们通常需要为AI模型设定明确的角色,这有助于模型更好地理解任务背景和期望的输出风格:

from langchain.prompts import PromptTemplate # 创建包含角色定义的模板 template = """你是业务咨询顾问。你给一个销售{product}的电商公司,起一个好的名字。""" prompt = PromptTemplate.from_template(template) print(prompt.format(product="手机")) # 或者使用另一种创建方式 prompt2 = PromptTemplate( template="""你是业务咨询顾问。你给一个销售{product}的电商公司,起一个好的名字。""", input_variables=['product'] ) print(prompt2.format(product="电脑"))

在这个示例中,我们通过"你是业务咨询顾问"这句话为模型设定了明确的角色,这会使模型以专业顾问的身份来思考问题。研究表明,明确的角色定义能够显著提升模型输出的专业性和针对性。

3. 聊天模型ChatPromptTemplate

3.1 多角色消息模板

对于聊天模型(如GPT-3.5-turbo、GPT-4),我们需要使用ChatPromptTemplate来处理多角色的消息序列。以下是一个完整的示例:

from langchain_core.prompts import ChatPromptTemplate from langchain_core.messages import SystemMessage, HumanMessage, AIMessage # 创建聊天提示模板 chat_template = ChatPromptTemplate.from_messages([ ("system", "你是一个乐于助人的图书馆管理员,总是用友好、专业的语气回答问题。"), ("human", "请为我推荐一些适合{age_group}阅读的{genre}类书籍,并简要说明推荐理由。") ]) # 填充模板并生成消息列表 messages = chat_template.format_messages( age_group="青少年", genre="科幻" ) # 打印完整的消息结构 for msg in messages: print(f"{msg.type}: {msg.content}")

这个示例展示了聊天模板的核心特点:支持多种消息类型,包括系统消息(设定AI角色和行为准则)、人类用户消息(用户输入)等。系统消息对于塑造AI的"人设"至关重要,它决定了AI将以什么样的风格和态度回应用户。

3.2 实际调用聊天模型

将ChatPromptTemplate与实际的聊天模型结合使用:

from langchain.chat_models import ChatOpenAI from langchain.prompts import ChatPromptTemplate # 初始化聊天模型 chat = ChatOpenAI(model_name="gpt-3.5-turbo") # 创建模板 template = ChatPromptTemplate.from_messages([ ("system", "你是一个乐于助人的图书馆管理员,总是用友好、专业的语气回答问题。"), ("human", "请为我推荐一些适合{age_group}阅读的{genre}类书籍,并简要说明推荐理由。") ]) # 生成消息并调用模型 messages = template.format_messages(age_group="青少年", genre="科幻") response = chat(messages) print("AI的回答:") print(response.content)

4. Few-Shot示例模板

4.1 基础FewShotPromptTemplate

Few-Shot学习是通过提供示例来"教"模型如何完成特定任务的有效方法。以下是一个完整的示例:

from langchain.prompts import FewShotPromptTemplate, PromptTemplate # 定义示例 examples = [ {"question": "中国的首都是哪里?", "answer": "北京"}, {"question": "法国的首都是哪里?", "answer": "巴黎"} ] # 创建示例格式模板 example_template = """ Question: {question} Answer: {answer} """ example_prompt = PromptTemplate( input_variables=["question", "answer"], template=example_template ) # 创建Few-Shot提示模板 few_shot_prompt = FewShotPromptTemplate( examples=examples, example_prompt=example_prompt, prefix="请回答以下问题:", suffix="Question: {input}\nAnswer:", input_variables=["input"] ) # 生成提示 formatted_prompt = few_shot_prompt.format(input="美国的首都是哪里?") print(formatted_prompt)

这个模板会生成包含示例的完整提示,帮助模型理解我们期望的问答格式。Few-Shot学习特别适用于需要特定输出格式或风格的任务。

4.2 更复杂的Few-Shot示例

对于更复杂的任务,更详细的示例:

from langchain.prompts import FewShotPromptTemplate, PromptTemplate examples = [ { "input": "蓝色的天空", "output": "天空是蓝色的,像一块巨大的蓝宝石。" }, { "input": "秋天的枫叶", "output": "枫叶在秋天变成了红色,像一团团燃烧的火焰。" } ] example_template = """ 输入:{input} 输出:{output} """ example_prompt = PromptTemplate( input_variables=["input", "output"], template=example_template ) few_shot_prompt = FewShotPromptTemplate( examples=examples, example_prompt=example_prompt, prefix="请将以下简短的描述扩展成生动的句子:", suffix="输入:{test_input}\n输出:", input_variables=["test_input"], example_separator="\n---\n" ) result = few_shot_prompt.format(test_input="宁静的夜晚") print(result)

5. 结构化输出与链式调用

5.1 结构化输出解析器

在实际应用中,我们经常需要模型输出特定格式的内容,这时可以使用结构化输出解析器:

from langchain.output_parsers import StructuredOutputParser, ResponseSchema from langchain_core.prompts import PromptTemplate from langchain_openai import ChatOpenAI # 初始化模型 llm = ChatOpenAI( model_name="gpt-3.5-turbo", temperature=0.5, max_tokens=200 ) # 定义输出模式 response_schemas = [ ResponseSchema(name="content", description="The original content"), ResponseSchema(name="summary", description="The summary of the content"), ] output_parser = StructuredOutputParser.from_response_schemas(response_schemas) format_instructions = output_parser.get_format_instructions() # 创建提示模板 summarizing_prompt_template = """ {format_instructions} 总结以下文本为一个20字以内的句子: --- {content} """ prompt = PromptTemplate.from_template( summarizing_prompt_template, partial_variables={'format_instructions': format_instructions} ) # 创建链 summarizing_chain = prompt | llm | output_parser result = summarizing_chain.invoke({"content": "这是一个测试。"}) print(result)

5.2 链式工作流

对于复杂任务,我们可以将多个Prompt链式组合:

from langchain.chains import LLMChain from langchain.llms import OpenAI from langchain.prompts import PromptTemplate # 第一个链:生成主题概述 overview_prompt = PromptTemplate( input_variables=["topic"], template="简要介绍{topic}的核心概念:" ) overview_chain = LLMChain(llm=OpenAI(), prompt=overview_prompt) # 第二个链:基于概述生成详细提示 detail_prompt = PromptTemplate( input_variables=["topic", "overview"], template="基于以下概述,详细解释{topic}的应用场景:\n{overview}" ) detail_chain = LLMChain(llm=OpenAI(), prompt=detail_prompt) # 执行链 topic = "区块链" overview = overview_chain.run(topic) result = detail_chain.run(topic=topic, overview=overview) print("概述:", overview) print("详细应用:", result)

6. 最佳实践与优化技巧

6.1 Prompt设计原则

根据吴恩达和OpenAI的建议,有效的Prompt设计应遵循以下原则:

  1. 写出清晰而具体的指示:避免模糊表述,明确任务要求
  2. 给模型思考的时间:对于复杂任务,提供分步指导
  3. 使用外部工具:结合检索、计算等工具增强模型能力
  4. 反复迭代优化:根据输出结果不断调整Prompt

6.2 Prompt框架应用

阿里云百炼推荐的Prompt框架包含以下要素:

  • 背景:介绍任务相关背景信息
  • 目的:明确指出期望完成的具体任务
  • 风格:指定输出内容的写作风格
  • 语气:定义应有的语气(正式、诙谐等)
  • 受众:明确面向的读者群体
  • 输出:规定输出的具体形式

6.3 调试与优化

在实际开发中,Prompt调试是一个迭代过程:

  1. 持续优化:多次尝试和调整,不断改进Prompt
  2. 分析反馈:观察模型响应,分析优点和不足
  3. 寻求帮助:参考社区经验和最佳实践
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 5:11:06

超越基础查询:5种利用Search Console数据获取深度关键词洞察的策略

谷歌搜索控制台(GSC)会显示你网站排名的关键词,但挑战不在于获取数据,而是知道如何利用它来发现优化机会和值得填补的内容空白。 以下是五种利用谷歌搜索控制台寻找可优化的关键词和追求新内容机会的方法。 方法一:寻找…

作者头像 李华
网站建设 2026/5/1 6:10:13

PDF vs PDF/A:区别、场景与常用转换方法(2025 全面解读)

在日常工作中,我们已经习惯把合同、制度文件、学术报告、技术资料都保存成 PDF 格式。但当文件需要 长期保存时,普通 PDF 可能会出现一些问题,例如:字体无法正常显示、跨设备排版错乱、使用浏览器打开却提示错误、甚至几年后再打开…

作者头像 李华
网站建设 2026/4/20 6:16:09

【期末复习01】-算法题 ProgramDesign

文章目录文章介绍项目结构1.案例Algorithm012.案例Algorithm023.案例Algorithm034.案例Algorithm045.案例Algorithm05文章介绍 期末复习重点案例(算法题) 项目结构 1.案例Algorithm01 要求:使用冒泡排序算法对数组a{9, 7, 4, 6, 3, 1,10}&…

作者头像 李华
网站建设 2026/5/1 6:13:06

GPT-5.2:创意行业的新时代,还是让创作者焦虑的未来?

AI将会是创作的伙伴,还是威胁? 最近,GPT-5.2的发布可谓引起了不小的轰动。作为OpenAI的一项重大更新,GPT-5.2不仅在文本生成方面有了显著的提升,还开始深入到创意产业的各个角落:写作、设计、音乐、艺术&am…

作者头像 李华
网站建设 2026/4/25 16:14:47

构建能访问k8s集群的容器

一.背景Kubernetes(K8s)作为容器编排的事实标准,已成为企业云原生架构的核心底座,承载着微服务、大数据、AI 应用等各类容器化业务的部署与运维。在这一体系中,“构建能访问 K8s 集群的容器”(即容器内进程…

作者头像 李华