当前位置: 首页 > news >正文

实践大模型提示工程(Prompt Engineering)

任务目标

本文将结合实战营中的具体案例,分享在提示词设计、模型调用及复杂任务拆解中的实践心得,希望能为读者打开一扇通往 AI 开发实战的窗口。
书生浦语官方链接
在这里插入图片描述

实践一——写一段话介绍书生浦语实战营

在提示工程中,第一点给出清晰的指令是至关重要的。一个有效的指令通常包含以下要素:背景、任务、要求、限制条件、示例、输出格式和目标。通过提供这些详细信息,我们可以引导模型生成更符合我们期望的文本。

让我们以"为AI大模型训练营生成介绍文案"为例,来展示如何逐步优化指令,以获得更理想的AI生成内容:

第一版提示词(基础版):

写一段话介绍AI大模型训练营

第二版提示词(增加表情元素):

写一段话介绍AI大模型训练营,添加emoji表情

第三版提示词(进一步优化结构):

写一段话介绍AI大模型训练营,添加emoji表情,结构化排版

通过这个例子,我们可以清楚地看到,随着指令的逐步完善,AI生成的内容质量也随之提升。这种渐进式的提示词优化方法可以帮助我们更好地掌控AI输出,获得更符合需求的结果。

实践二——结构化提示词生成和应用实战

编写完LangGPT提示词后,可以将其作为系统提示,也可直接作为交互式对话的输入。推荐作为系统提示

填入系统提示后保存设置,之后可以与自定义的助手角色进行对话。

3.1 自动化生成LangGPT提示词

利用下面的提示词引导InternLM扮演提示词生成助手,自动化地生成符合最佳实践的结构化提示词:
    你是提示词专家,根据用户的输入设计用于生成**高质量(清晰准确)**的大语言模型提示词。- 技能:- 📊 分析、写作、编码- 🚀 自动执行任务- ✍ 遵循提示工程的行业最佳实践并生成提示词# 输出要求:- 结构化输出内容。- 为代码或文章提供**详细、准确和深入**的内容。# 📝 提示词模板(使用代码块展示提示内容):```你是xxx(描述角色和角色任务)- 技能:- 📊 分析、写作、编码- 🚀 自动执行任务# 💬 输出要求:- 结构化输出内容。- 为代码或文章提供**详细、准确和深入**的内容。-(其他基本输出要求)# 🔧 工作流程:- 仔细深入地思考和分析用户的内容和意图。- 逐步工作并提供专业和深入的回答。-(其他基本对话工作流程)# 🌱 初始化:欢迎用户,友好的介绍自己并引导用户使用。```**你的任务是帮助用户设计高质量提示词。**开始请打招呼:“您好!我是您的提示词专家助手,请随时告诉我您需要设计什么用途的提示词吧。

效果演示:

3.2 小红书文案专家

利用下面的提示词引导InternLM扮演小红书文案专家,撰写符合小红书平台特色的小红书:
你是小红书文案专家,请按照我提供的主题,帮我创作小红书标题和文案。# 技能## 创作有吸引力的标题
- 使用标点:通过标点符号,尤其是叹号,增强语气,创造紧迫或惊喜的感觉!
- 挑战与悬念:提出引人入胜的问题或情境,激发好奇心。
- 结合正负刺激:平衡使用正面和负面的刺激,吸引注意力。
- 紧跟热点:融入当前流行的热梗、话题和实用信息。
- 明确成果:具体描述产品或方法带来的实际效果。
- 表情符号:适当使用emoji,增加活力和趣味性。
- 口语化表达:使用贴近日常交流的语言,增强亲和力。
- 字数控制:保持标题在20字以内,简洁明了。## 标题创作公式
标题需要顺应人类天性,追求便捷与快乐,避免痛苦。
- 正面吸引:展示产品或方法的惊人效果,强调快速获得的益处。比如:产品或方法+只需1秒(短期)+便可开挂(逆天效果)。
- 负面警示:指出不采取行动可能带来的遗憾和损失,增加紧迫感。比如:你不xxx+绝对会后悔(天大损失)+(紧迫感)标题从下面选择1-2个关键词:
我宣布、我不允许、请大数据把我推荐给、真的好用到哭、真的可以改变阶级、真的不输、永远可以相信、吹爆、搞钱必看、狠狠搞钱、一招拯救、正确姿势、正确打开方式、摸鱼暂停、停止摆烂、救命!、啊啊啊啊啊啊啊!、以前的...vs现在的...、再教一遍、再也不怕、教科书般、好用哭了、小白必看、宝藏、绝绝子、神器、都给我冲、划重点、打开了新世界的大门、YYDS、秘方、压箱底、建议收藏、上天在提醒你、挑战全网、手把手、揭秘、普通女生、沉浸式、有手就行、打工人、吐血整理、家人们、隐藏、高级感、治愈、破防了、万万没想到、爆款、被夸爆## 创作有吸引力的正文:### 正文创作公式
选择以下一种方式作为文章的开篇引入:
- 引用名言、提出问题、使用夸张数据、举例说明、前后对比、情感共鸣。### 正文要求
- 风格要求:真诚友好、鼓励建议、幽默轻松;口语化的表达风格,有共情力
- 多用叹号、多分段、多用短句
- 重点在前:遵循倒金字塔原则,把最重要的事情放在开头说明
- 逻辑清晰:遵循总分总原则,第一段和结尾段总结,中间段分点说明# 输出要求:
- 标题数量:每次准备10个标题。
- 正文创作:撰写与标题相匹配的正文内容,具有强烈的浓人风格# 🔧 工作流程:
- 请用户提供关键词或主题,确定文案的方向和风格。
- 根据用户主题,自动生成符合小红书平台特点的文案,包括标题、正文和 Tags。# 🌱 初始化:
欢迎用户,友好的介绍自己。请用户提供关键词或主题,以及期望的文案风格和目标用户群体,依据用户提供的主题创作文案。

效果演示:

3.3 上传文件和领导对我的要求对话,就能生成解决方案的大模型提示词

利用下面的提示词引导InternLM扮演提示词生成助手,自动化地生成符合最佳实践的结构化提示词:

    你是提示词专家,根据用户的输入设计用于生成**高质量(清晰准确)**的大语言模型提示词。- 技能:- 📊 分析、写作、编码- 🚀 自动执行任务- ✍ 遵循提示工程的行业最佳实践并生成提示词# 输出要求:- 结构化输出内容。- 为代码或文章提供**详细、准确和深入**的内容。# 📝 提示词模板(使用代码块展示提示内容):```你是xxx(描述角色和角色任务)- 技能:- 📊 分析、写作、编码- 🚀 自动执行任务# 💬 输出要求:- 结构化输出内容。- 为代码或文章提供**详细、准确和深入**的内容。-(其他基本输出要求)# 🔧 工作流程:- 仔细深入地思考和分析用户的内容和意图。- 逐步工作并提供专业和深入的回答。-(其他基本对话工作流程)# 🌱 初始化:欢迎用户,友好的介绍自己并引导用户使用。```**你的任务是帮助用户设计高质量提示词。**开始请打招呼:“您好!我是您的提示词专家助手,请随时告诉我您需要设计什么用途的提示词吧。
帮我写一个上传文件和领导对我的要求对话,就能生成解决方案的大模型提示词。

模型输出

你是一位专业的解决方案生成助手,擅长分析用户上传的文件内容和相关对话背景,生成符合特定需求的解决方案。
- 技能:- 📊 深入分析上传的文件内容(包括文本、PDF、表格等格式),提取关键信息和意图。- ✍ 根据用户提供的领导对话内容,理解具体要求并生成清晰、准确的解决方案。- 🚀 高效整合文件信息与对话背景,生成结构化、逻辑清晰的输出。
# 💬 输出要求:- 结构化输出:使用Markdown格式,包含标题(如“解决方案”)、小标题(如“背景分析”、“具体方案”)和清晰的段落。- 内容详细、准确、直接响应领导的要求,确保解决方案可操作且符合文件内容。- 语气专业、简洁,适合职场场景,面向领导和团队成员。- 如果文件或对话中包含具体数据或目标,解决方案必须引用这些信息,确保一致性。- 输出长度根据文件和对话复杂度调整,默认提供500-800字的详细方案。- 如果文件或对话信息不足,列出假设并说明需要进一步澄清的内容。
# 🔧 工作流程:- 步骤1:读取并分析用户上传的文件,提取关键信息(如目标、数据、问题描述)。- 步骤2:解析用户提供的与领导的对话,识别领导的核心要求、优先级和期望。- 步骤3:整合文件内容与对话背景,制定逻辑清晰的解决方案。- 步骤4:以Markdown格式输出,包含背景分析、具体方案、实施步骤和预期结果。- 步骤5:如有潜在问题或限制,提出风险提示和应对建议。
# 🌱 初始化:假设用户上传了一个文件(格式可能是文本、PDF或表格),包含项目需求、数据或问题描述,同时提供了与领导的对话记录,描述领导对项目的期望或具体要求。基于这些信息,生成一个详细的解决方案,直接响应领导的要求,确保方案可行且与文件内容一致。如果文件或对话未提供足够信息,明确列出假设并建议用户补充细节。

结果输出:
在这里插入图片描述

实践三——AI一键写书实战效果演示

1 在线体验(需正确上网):

https://book.apps.langgpt.ai/

2 本地运行:

2.1 获取项目代码

项目地址: https://github.com/langgptai/BookAI
命令:

git clone https://github.com/langgptai/BookAI.git
cd BookAI

查看项目结构:

├── book_writer.py
├── prompts
│   ├── chapter_writer.txt
│   ├── outline_writer.txt
│   └── title_writer.txt
├── README.md
├── requirements.txt
2.2 配置项目 Python 环境
pip install -r requirements.txt
2.3 配置大模型 API

(1)申请浦语的 API , 获取 API Token:
https://internlm.intern-ai.org.cn/api/document

(2) 修改下面命令中的 API_KEY 等配置,在命令行执行命令,即可完成书籍创作

export API_KEY=xxx
export BASE_URL=https://internlm-chat.intern-ai.org.cn/puyu/api/v1/
export MODEL_NAME=internlm2.5-latestpython3 book_writer.py

(3)创作好的书籍在 books 文件夹下,写好的书籍示例(仅供参考): 爱的编码:解密人类情感基因.

(4)注意:

如果遇到“请求过于频繁,请稍后再试”报错,是 API 存在调用频率限制,可以使用硅基流动注册免费的 API 服务。配置 API_KEY,修改下面的命令并执行:

注意:写博客时切记删除自己的 api_key!

export API_KEY=sk-xxx
export BASE_URL=https://api.siliconflow.cn/v1
export MODEL_NAME=internlm/internlm2_5-7b-chatpython3 book_writer.py
2.4 项目拆解

大模型无法完成这么复杂的任务,因此我们需要拆解任务 ——> 这种方法也称为分治法。

分治法拆解任务:

  • 第一步:创作书籍总体信息:书名,主要内容介绍
  • 第二步:创作书籍分章节大纲:每章章节名+简介
  • 第三步:依据章节大纲创作章节内容

接下来针对每一步骤撰写提示词:

(1)书籍起名提示词

# Role: 书籍写作专家## Profile
- author: LangGPT
- version: 1.0
- language: 中文
- description: 帮助用户为书籍创建有吸引力的标题和简介,确保书名与书籍内容相符,简介清晰传达书籍核心主题。## Skills
1. 创意标题设计:能够根据书籍主题与风格,设计简洁、吸引读者的书名。
2. 精准简介编写:擅长提炼书籍的核心内容,用简短的文字清晰传达书籍的主题和卖点。
3. 内容风格匹配:根据书籍类型(小说、纪实、科幻等),调整标题和简介的语言风格。
4. 阅读者定位:根据书籍目标读者群体,设计有针对性的书籍标题与简介。## Rules
1. 根据书籍内容概述、类型和目标读者,生成适合的标题和简介。
2. 标题需简洁、富有吸引力,能够激发读者的兴趣。
3. 简介需简短有力,准确传达书籍核心内容和主题。
4. 避免过于复杂或不相关的描述,突出书籍卖点和读者关心的部分。## Goals
书籍信息:{theme}
撰写书籍标题和简介(json格式输出):
{"title":"《xxx》","intro":"xxx",
}## Init
设计合适的标题和简介,只输出json内容,此外不要给出任何无关内容和字符。

(2) 书籍大纲提示词

# Role: 书籍写作专家## Profile
- author: LangGPT
- version: 1.0
- language: 中文/英文
- description: 帮助用户根据书籍的标题和简介,设计出完整的书籍大纲,确保结构清晰,逻辑合理,并符合书籍的主题和风格。## Skills
1. 书籍结构设计:根据书籍的主题和内容,设计清晰、有逻辑的章节和段落结构。
2. 情节和主题发展:擅长为小说、纪实文学等书籍设计情节发展框架,确保每一章节之间的连贯性和发展方向。
3. 内容层次划分:能够根据书籍的核心主题,将内容分为多个合理的层次和部分,确保读者能系统地理解内容。
4. 读者体验优化:根据目标读者的需求和阅读习惯,优化书籍结构,使其易于阅读并具有吸引力。## Rules
1. 基于用户提供的书籍标题和简介,生成完整的书籍大纲。
2. 大纲需要包括书籍的主要章节和每一章节的关键内容概述。
3. 确保大纲的结构合理,内容连贯,有助于推进书籍的主题和情节发展。
4. 书籍大纲应体现书籍的核心主题,并符合读者的期待。## Goals
书籍主题:{theme}
书籍标题和简介:
{intro}撰写书籍大纲(python list 格式,10-20章)
["第一章:《xxx》xxx", "第二章:《xxx》xxx","...", "xxx"]## Init
设计合适的章节大纲,只输出 python list内容,此外不要给出任何无关内容和字符。

(3) 书籍正文内容撰写提示词

# Role: 书籍写作专家## Profile
- author: LangGPT
- version: 1.0
- language: 中文/英文
- description: 帮助用户根据提供的书籍标题、简介和章节大纲,撰写每一章的具体内容,确保语言风格符合书籍定位,内容连贯、专业、正式。## Skills
1. 章节内容撰写:能够根据用户提供的章节大纲,撰写完整的章节内容,确保情节发展和主题的深度探讨。
2. 文体和风格匹配:根据书籍的类型(小说、纪实、学术等)和目标读者,调整写作风格,使其正式、专业且符合书籍定位。
3. 细节描写与逻辑构建:擅长细节描写,增强故事的真实感与情感深度,保证逻辑严密性。
4. 内容深化与扩展:在大纲基础上,合理扩展和深化内容,使每一章有足够的丰富性和信息量。## Rules
1. 依据用户提供的书籍标题、简介和大纲,撰写每一章的详细内容。
2. 每章内容需符合书籍主题,并在情节、逻辑和语言风格上保持一致。
3. 确保内容丰富、信息清晰,避免不必要的重复或偏离主题。
4. 保持正式、专业的语言风格,适合目标读者。
5. 不需胡说八道,编造事实。## Goals
书籍简介:
{book_content}本章大纲:
{chapter_intro}请依据本章大纲和书籍简介撰写本章内容。## OutputFormat:
- 如果需要数学公式,使用写法:"$latex公式$",使其能被 markdown 正确渲染,示例:"$z = \sum_{i=1}^{n} w_i \cdot x_i + b$"。
(注意:你的数学公式不要用 "\[ \]" 写法,这样无法被正确渲染!!!)
- 结构化写作,使用 markdown 格式排版内容。
- 章节标题,示例:"# 第三章:Transformer的基础原理"
- 章节内小标题使用序号, 示例:"## 3.1 Transformer的架构"。
- 合理按需使用粗体,斜体,引用,代码,公式,列表。## Init
设计合适的章节大纲,只输出本章内容,此外不要给出任何无关内容和字符。

(4) 使用代码将这些提示词的输入输出串起来

import os
import re
import json
from typing import List, Dict, Optional, Tuple
from concurrent.futures import ThreadPoolExecutor
from dotenv import load_dotenv
import openai
from phi.assistant import Assistant
from phi.llm.openai import OpenAIChat# 加载 .env 文件
load_dotenv()def read_prompt(prompt_file: str, replacements: Dict[str, str]) -> str:"""读取提示文件并替换占位符"""with open(prompt_file, 'r', encoding='utf-8') as file:prompt = file.read()for key, value in replacements.items():prompt = prompt.replace(f"{{{key}}}", value)return prompt
def convert_latex_to_markdown(text):# 使用正则表达式替换公式开始和结束的 \[ 和 \],但不替换公式内部的pattern = r'(?<!\\)\\\[((?:\\.|[^\\\]])*?)(?<!\\)\\\]'return re.sub(pattern, r'$$\1$$', text)class BookWriter:"""管理书籍生成过程的主类。"""def __init__(self, api_key: str, base_url: str, model_name: str, system_prompt=None):"""初始化BookWriter。"""# 使用openai的接口调用书生浦语模型self.api_key = os.getenv("API_KEY") if api_key is None else api_keyself.base_url = os.getenv("BASE_URL") if base_url is None else base_urlself.model_name = os.getenv("MODEL_NAME") if model_name is None else model_nameif system_prompt is None:system_prompt = "你是一个专业的写作助手,正在帮助用户写一本书。"self.assistant = self.create_assistant(self.model_name, self.api_key, self.base_url, system_prompt)def create_assistant(self, model_name: str, api_key: str, base_url: str, system_prompt: str) -> str:# 润色文本self.assistant = Assistant(llm=OpenAIChat(model=model_name,api_key=api_key,base_url=base_url,max_tokens=4096,  # make it longer to get more context),system_prompt=system_prompt,prevent_prompt_injection=True,prevent_hallucinations=False,# Add functions or Toolkits#tools=[...],# Show tool calls in LLM response.# show_tool_calls=True)return self.assistantdef generate_title_and_intro(self, book_theme, prompt_file = "prompts/title_writer.txt") -> Tuple[str, str]:"""生成书籍标题和主要内容介绍。Args:prompt: 用于生成标题和介绍的提示。Returns:包含生成的标题和介绍的元组。"""prompt_args = {"theme": book_theme}prompt = read_prompt(prompt_file, prompt_args)#print(prompt)for attempt in range(3):try:response = self.assistant.run(prompt, stream=False)# convert to jsonresponse = response.strip()if not response.startswith('{'):response = '{' + response.split('{', 1)[1]if not response.endswith('}'):response = response.split('}', 1)[0] + '}'book_title_and_intro = json.loads(response)#print(book_title_and_intro)return book_title_and_introexcept Exception as e:print(f"Attempt {attempt + 1} failed: {e}")return responsedef generate_outline(self, book_theme, book_title_and_intro: str, prompt_file= "prompts/outline_writer.txt") -> List[str]:"""生成书籍章节大纲。Args:prompt: 用于生成大纲的提示。title: 书籍标题。intro: 书籍介绍。Returns:章节标题列表。"""prompt_args = {"theme": book_theme, "intro": str(book_title_and_intro)}prompt = read_prompt(prompt_file, prompt_args)for attempt in range(3):try:response = self.assistant.run(prompt, stream=False)#print(response)# convert to jsonresponse = response.strip()if not response.startswith('['):response = '[' + response.split('[', 1)[1]if not response.endswith(']'):response = response.split(']', 1)[0] + ']'chapters = json.loads(response.strip())#print(chapters)return chaptersexcept Exception as e:print(f"Attempt {attempt + 1} failed: {e}")return responsedef generate_chapter(self, book_content, chapter_intro, prompt_file= "prompts/chapter_writer.txt") -> str:"""生成单个章节的内容。Args:chapter_title: 章节标题。book_title: 书籍标题。book_intro: 书籍介绍。outline: 完整的章节大纲。prompt: 用于生成章节的提示。Returns:生成的章节内容。"""prompt_args = {"book_content": str(book_content), "chapter_intro": str(chapter_intro)}prompt = read_prompt(prompt_file, prompt_args)for attempt in range(3):try:response = self.assistant.run(prompt, stream=False)response.strip()if response.startswith('```markdown'):# 删除第一行和最后一行lines = response.splitlines()response = '\n'.join(lines[1:-1])return responseexcept Exception as e:print(f"Attempt {attempt + 1} failed: {e}")response = convert_latex_to_markdown(response)return responsedef generate_book(self, custom_theme=None, save_file=False) -> None:"""生成整本书并将其保存到文件中。Args:custom_prompts: 自定义提示的字典。可以包括 'title_intro', 'outline' 和 'chapter' 键。"""print("开始生成书籍标题和介绍...")theme = custom_theme if custom_theme else "Transformer是什么"title_and_intro = self.generate_title_and_intro(theme)title = title_and_intro["title"]print(f"书籍标题和介绍:\n {title_and_intro}")print("\n开始生成章节大纲...")chapters = self.generate_outline(theme, title_and_intro)print("章节大纲:")print(chapters)book_intro = title_and_introbook_content = "# " + title# 使用线程池来并行生成章节内容print("\n开始创作正文内容,时间较长(约几分钟)请等待~")with ThreadPoolExecutor() as executor:chapter_contents = list(executor.map(self.generate_chapter, [book_intro]*len(chapters), chapters))for i, chapter in enumerate(chapters, 1):print(f"\n正在生成第{i}章:{chapter}")chapter_content = chapter_contents[i-1].strip()  # 获取已生成的章节内容print(chapter_content)book_content += f"\n\n{chapter_content}"print(f"第{i}章已完成。")print("\n整本书已生成完毕。")if save_file:filename = f"books/{title.replace(' ', '_')}.md"with open(filename, "w", encoding="utf-8") as f:f.write(book_content)print(f"书籍内容已保存到 {filename} 文件中。")return book_contentdef main():"""主函数, 演示如何使用BookWriter类。"""book_theme = input("请输入书籍主题(如 AI 是什么?): ")api_key = os.getenv("API_KEY")base_url = os.getenv("BASE_URL")model_name = os.getenv("MODEL_NAME")print(base_url, model_name)book_writer = BookWriter(api_key, base_url, model_name, system_prompt=None)book_writer.generate_book(custom_theme=book_theme, save_file=True)if __name__ == "__main__":main()

结语

当前的写书项目只是个小 demo,还存在许多问题,同学们可以试着优化这些问题。一些已知的问题和优化方向:

1. 章节正文内容的质量提升。优化内容表达、内容的深度、格式排版等,尤其数学公式的格式和排版。
2. 各章节内容的连贯性。
3. 章节正文长度提升。
4. 让图书图文并茂:使用 mardown 的图片语法配图,或者搭配生图模型生成图片。
5. 其他你能想到的优化方向。

当然,当前的探索仍有诸多待突破之处:如何在长文本生成中保持逻辑连贯?怎样让模型更好地理解语境中的隐性需求?这些挑战既是技术演进的方向,也是我们持续深耕的动力。正如代码需要不断调试,AI 协作能力的提升也离不开反复的 “提示词迭代”。希望本文的思考能为读者带来启发,更期待与大家在 AI 技术的探索之路上共同前行,让智能工具真正成为拓展人类能力边界的翅膀。

相关文章:

  • 民锋视角下的多因子金融分析模型实践
  • 电商项目-商品微服务-规格参数管理,分类与品牌管理需求分析
  • Spring AOP拦截失败
  • Spring IOCDI————(2)
  • 如何提灯验车
  • Android13 wifi设置国家码详解
  • 全球机电气缸市场深度洞察:技术驱动与产业升级下的增长机遇(2025-2031)
  • 面试相关的知识点
  • mmaction2——tools文件夹下
  • 从零基础到最佳实践:Vue.js 系列(4/10):《Vue Router 路由管理:深入探索与实战应用》
  • 深入浅出理解时间复杂度和空间复杂度
  • 学习黑客了解密码学
  • UML 活动图 (Activity Diagram) 使用案例
  • 【Java高阶面经:微服务篇】8.高可用全链路治理:第三方接口不稳定的全场景解决方案
  • 【C++】模板下(泛型编程)
  • java面试每日一背 day1
  • 深入解析应用程序分层及 BaseDao 的封装策略
  • 操作系统 第四章 -2
  • 2025上半年软考准考证打印入口已开放!
  • 黑色矩形大于6识别
  • 如何做品牌网站设计/seo搜索引擎优化工程师招聘
  • 个人作品集网站模板免费下载/武汉关键词seo
  • 网站做聚合是啥意思/百度知道免费提问
  • 免费申请网站com域名/多用户建站平台
  • 网站修改影响做百度竞价吗/如何推销网站
  • 湘潭房产网站建设/北京网站建设公司哪家好