news 2026/4/7 0:18:18

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/2 15:01:54

鸿蒙 Electron 跨生态协同:与 Windows/macOS/Android 互联互通实战

鸿蒙Electron跨生态协同:与Windows/macOS/Android互联互通实战 在多系统并存的办公与生活场景中,单一设备的能力边界始终有限。鸿蒙Electron凭借鸿蒙系统的分布式软总线技术,打破了Windows、macOS、Android与鸿蒙设备之间的壁垒,…

作者头像 李华
网站建设 2026/4/6 18:36:59

Manus与LangChain智能体实战经验!DeepMind工程师的上下文工程哲学

随着大模型能力的边界不断拓展,我们构建智能体的方式正在经历一场静悄悄却剧烈的范式转移,核心不再是堆砌更复杂的提示词,而是学会如何优雅地让路。Google DeepMind 工程师 Philipp Schmid,总结了 Manus 创始人 Peak Ji&#xff0…

作者头像 李华
网站建设 2026/4/1 15:06:02

鸿蒙应用交互设计:实现流畅的页面跳转与状态管理

鸿蒙应用交互设计:实现流畅的页面跳转与状态管理 一、章节概述 ✅ 学习目标 掌握鸿蒙应用页面跳转的完整流程熟练使用 AbilitySlice 与 Page 进行页面管理理解并应用多种状态管理方案实现页面间的数据传递与回调构建流畅的用户交互体验 💡 重点内容 Abil…

作者头像 李华
网站建设 2026/4/4 18:47:18

esmini完整指南:10分钟学会开源自动驾驶仿真

esmini完整指南:10分钟学会开源自动驾驶仿真 【免费下载链接】esmini a basic OpenSCENARIO player 项目地址: https://gitcode.com/gh_mirrors/es/esmini 在当今自动驾驶技术快速发展的时代,一个高效且易于使用的仿真平台对于开发者和研究者来说…

作者头像 李华
网站建设 2026/4/3 10:22:26

终极指南:如何使用Dlib构建完整的疲劳驾驶检测系统

终极指南:如何使用Dlib构建完整的疲劳驾驶检测系统 【免费下载链接】Fatigue-Driving-Detection-Based-on-Dlib 项目地址: https://gitcode.com/gh_mirrors/fa/Fatigue-Driving-Detection-Based-on-Dlib 在当今交通安全日益重要的背景下,Dlib疲劳…

作者头像 李华