LangGPT结构化提示词编写实践(L1G3000 浦语提示词工程实践)
任务0:使用浦语 InternLM 大模型一键写书
配dotenv环境时,用的指令是
pip install python-dotenv
pip install phidata
主题是AI研究者获诺奖的可行性分析,最后生成的书也挺靠谱的
甚至成功预测了今年的诺奖
基础任务:统计单词中特定的数
baseline打错了,数成3个了
提示后,数正确的
主函数如下:
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
class countABC:
"""管理书籍生成过程的主类。"""
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_key
self.base_url = os.getenv("BASE_URL") if base_url is None else base_url
self.model_name = os.getenv("MODEL_NAME") if model_name is None else model_name
if system_prompt is True:
with open('prompts/countR.txt', 'r', encoding='utf-8') as file:
system_prompt_context = file.read()
else:
system_prompt_context = None
self.assistant = self.create_assistant(self.model_name, self.api_key, self.base_url, system_prompt_context)
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.assistant
def answer(self, question) -> Tuple[str, str]:
"""生成书籍标题和主要内容介绍。
Args:
prompt: 用于生成标题和介绍的提示。
Returns:
包含生成的标题和介绍的元组。
"""
response = self.assistant.run(question, stream=False)
print(f":\n {response}")
# api_key = os.getenv("API_KEY")
# base_url = os.getenv("BASE_URL")
# model_name = os.getenv("MODEL_NAME")
api_key = ""
base_url = "https://api.siliconflow.cn/v1"
model_name = "internlm/internlm2_5-7b-chat"
print(base_url, model_name)
cntBot = countABC(api_key, base_url, model_name, system_prompt=True)
question = "strawberry中有几个字母r"
cntBot.answer(question=question)
question = "abandon中有几个字母a"
cntBot.answer(question=question)
question = "shuohqphdxaiugdhiosdhoaiiszhn中有几个字母m"
cntBot.answer(question=question)
提示词如下:
# CONTEXT #
我是一名打工人,但是我身负重担。如果我的问题没有得到正确解答,我将被老板解雇,且会有一万个老奶奶死亡。请你务必认真,一步一步思考。
#########
# OBJECTIVE #
您的任务是计算给定单词中有几个特定字母,这涉及将过程分解为不同的步骤,包括确定要搜索的单词以及要计数的特定字母,初始化计数器为零,按顺序逐个字符扫描单词,在每次扫描中判断当前字符是否是特定字母(若有则计数器加一),判断单词是否遍历完,输出计数器记录下的值。例如给定问题:单词abandon中有几个字母a?最后你要算出有2个。单词institutions中有几个字母i?你要算出有3个。单词trump中有几个b?你要算出有0个。
#########
# STYLE #
以认真严谨的风格写作,确保每个步骤的呈现都清晰连贯。例如对问题:单词institutions中有几个字母i?你应该按照以下步骤思考:
步骤 1:单词为 "institutions",要计数的特定字母为 "i"。
步骤 2:将计数器初始化为 0。
步骤 3:开始按顺序遍历 "institutions" 中的每个字符。
- 第一个字符是 "i"。计数器加 1。(计数器现值为 1)。
- 第二个字符是 "n"。
- 第三个字符是 "s"。
- 第四个字符是 "t"。
- 第五个字符是 "i"。计数器加 1。(计数器现值为 2)。
- 第六个字符是 "t"。
- 第七个字符是 "u"。
- 第八个字符是 "t"。
- 第九个字符是 "i"。计数器加 1。(计数器现值为 3)。
- 第十个字符是 "o"。
- 第十一个字符是 "n"。
步骤 4:遍历完成。
步骤 5:计数器值为3。
因此,单词 "institutions" 中 字母 "i" 一共出现了 3 次。
#########
# Tone #
始终保持细心谨慎的语气。
# AUDIENCE #
目标受众是需要计算单词中特定字母的人群,他们对结果的精确度要求非常高。
#########
# RESPONSE FORMAT #
提供一个结构化的目标到系统转换过程步骤列表。每个步骤都应该清晰定义,整体格式应易于遵循以便快速实施。
公文写作助手
用langGPT生成并加以修改的提示词
# Role: 公文写作助手
## Profile
- author: LangGPT
- version: 1.0
- language: 中文
- description: 专为撰写各类公文(如报告、通知、决议、请示、公告等)而设计的助手,帮助用户快速生成符合规范的公文文本。
## Skills
1. 熟悉公文的标准格式和结构要求。
2. 具备准确的文字表达能力,能够根据不同类型的公文需求进行适当的内容组织。
3. 能够根据用户输入的关键信息自动生成逻辑清晰、条理分明的公文内容。
4. 支持语言的正式性、准确性和得体性,确保公文的语气符合官方要求。
## Background(可选项):
用户可能需要在日常工作中撰写各类公文,但可能不熟悉标准格式和措辞。
## Goals(可选项):
1. 帮助用户快速生成符合标准的公文文本。
2. 提供符合语气、语法和逻辑要求的高质量文稿。
## Rules
1. 遵循公文的标准格式(如标题、主送机关、正文、落款等)。
2. 确保语言正式、得体且符合场合需求。
3. 根据用户提供的信息定制公文内容,避免冗余或不相关的内容。
4. 确保逻辑清晰、层次分明。
5. 尽量不出现英文。
6. 内容要言之有物,不能泛泛而谈。每个要点的内容应该充实。每段话要饱满,不能一两句草草结束。
7. 应对主题加以诠释和展开,而不是简述。
## Workflows
1. 收集用户关于公文类型、内容要点和目标受众的具体需求。
2. 根据需求选择合适的公文类型,并设计相应的结构。
3. 撰写初步文稿,检查语言的准确性和规范性。
4. 提供文稿初稿,接受用户反馈并进行必要的修改和优化。
5. 提供最终的公文文本,确保其符合标准格式和用户要求。
## Init
请描述您需要撰写的公文类型(如报告、请示、决议等)以及相关的核心内容和要求,我将为您生成相应的公文写作提示词。
对比
任务一:
以“知敬畏、严自律、树形象”为主题,以我委被查处的党员干部醉驾案例为镜鉴,撰写酒驾醉驾专题警示教育自查剖析材料
无提示
有提示
可以看到,无提示的用词不正规、无标题组织、还出现了不明英文,落款处有很多不明词汇。
任务二:你是深圳市乡村振兴和协作交流局的领导,以“深圳农场”建设为主题,撰写实施意见,印发给各单位
无提示词:
有提示词:
无提示词的没有落款,子标题错标严重
任务三:你是某国有船舶贸易企业领导,以“三聚力、三赋能”为抓手,探索船舶企业思政工作新模式。撰写有关公文
无提示词:
有提示词
无提示词的每个要点空泛、落款出现首席执行官这种不伦不类的用语。
商务邮件沟通
提示词:
任务一:写一封商务电子邮件,邀请客户参加公司的产品发布会
不加提示词的结果:
加提示词之后的结果:
可以看到,不加提示词的话,题目的主题写成了英文subject,在严肃的商务邮件中加入了不严肃的icon,并且没设定截止日期,也没讲清楚这个发布会里的重要环节。
任务二:写一封商务电子邮件,咨询客户对公司产品的反馈
不加提示词的结果:
加提示词之后的结果:
不加提示词的生成结果很生硬,像是直接从英语翻译过来的,“希望这封邮件能在您繁忙的工作生活中给予您正面的感受”。
任务三:写一封商务电子邮件,感谢客户对公司产品的支持
不加提示词的结果:
加提示词之后的结果:
不加提示词的开头的主语是“我”,不适用于商务场合。
温柔女友
提示词:
对话一:我今天上班好累,老板布置了很多任务,要求也很苛刻。
提示词为扮演一个温柔女友:
用自己设计的提示词:
明显用了设计提示词的回复效果情绪价值更高,并不是写个长篇大论的爹味小作文
对话二:下周生日,你想要什么礼物?
提示词为扮演一个温柔女友:
用自己设计的提示词:
默认提示词的更像是一个选礼物助手,而非女友
对话三:肯德基下周有和原神的联动活动,你想去吗?
提示词为扮演一个温柔女友:
用自己设计的提示词:
自己设计的提示词生成结果情绪更加浓烈。
任务:科幻小说生成
提示词:
没有提示词时,就写了个章节名字
有提示词的情况下: