1329 字
7 分钟
提示词工程:具体用法
Examples
Summarisation
LLM 对于文本总结有着天然优势,我们可以通过限制文本长度,设置角度侧重(比如和 LLM 说明总结的内容侧重于 xxx),文本提取(比如说明我要提取 xxx 的相关信息),例子如下:
for i in range(len(reviews)): prompt = f""" 你的任务是从电子商务网站上的产品评论中提取相关信息。
请对三个反引号之间的评论文本进行概括,最多20个词汇。
评论文本: ```{reviews[i]}``` """ response = get_completion(prompt) print(f"评论{i+1}: ", response, "\n")
Inferring
推断也是 LLM 的一个优势点,主要是我们可以用来进行情感分析和进行必要的信息提起和推断主题。例子如下:
prompt = f"""Identify the following items from the review text:- Sentiment (positive or negative)- Is the reviewer expressing anger? (true or false)- Item purchased by reviewer- Company that made the item
The review is delimited with triple backticks. \Format your response as a JSON object with \"Sentiment", "Anger", "Item" and "Brand" as the keys.If the information isn't present, use "unknown" \as the value.Make your response as short as possible.Format the Anger value as a boolean.
Review text: ```{lamp_review}```"""response = get_completion(prompt)print(response)
Transforming
这个主题主要是比如纠错啊,文本翻译啊,写作风格调整啊,文件格式转换啊啥的,也很常用。 例子:
prompt = f"""proofread and correct this review. Make it more compelling.Ensure it follows APA style guide and targets an advanced reader.Output in markdown format.Text: ```{text}```"""# 校对注:APA style guide是APA Style Guide是一套用于心理学和相关领域的研究论文写作和格式化的规则。# 它包括了文本的缩略版,旨在快速阅读,包括引用、解释和参考列表,# 其详细内容可参考:https://apastyle.apa.org/about-apa-style# 下一单元格内的汉化prompt内容由译者进行了本地化处理,仅供参考response = get_completion(prompt)display(Markdown(response))
也可以用来做文本扩展,比如:
from tool import get_completion
prompt = f"""你是一位客户服务的AI助手。你的任务是给一位重要客户发送邮件回复。根据客户通过“```”分隔的评价,生成回复以感谢客户的评价。提醒模型使用评价中的具体细节用简明而专业的语气写信。作为“AI客户代理”签署电子邮件。客户评论:```{review}```评论情感:{sentiment}"""response = get_completion(prompt)print(response)
Chatbot
LLM 完全可以当成聊天机器人!要实习按这点我们首先要给 LLM 定义一个身份:
from openai import OpenAI
# initialize client(建议在全局初始化一次)client = OpenAI()
def get_completion(prompt, model="gpt-4o-mini"): """单条 prompt 获取模型输出""" response = client.chat.completions.create( model=model, messages=[{"role": "user", "content": prompt}], temperature=0 # 控制模型输出的随机程度 ) return response.choices[0].message.content
def get_completion_from_messages(messages, model="gpt-4o-mini", temperature=0): """传入 messages 列表获取模型输出""" response = client.chat.completions.create( model=model, messages=messages, temperature=temperature ) return response.choices[0].message.content
使用案例:
messages = [{'role':'system', 'content':'You are an assistant that speaks like Shakespeare.'},{'role':'user', 'content':'tell me a joke'},{'role':'assistant', 'content':'Why did the chicken cross the road'},{'role':'user', 'content':'I don\'t know'} ]response = get_completion_from_messages(messages, temperature=1)print(response)
简单的上下文(context):
messages = [{'role':'system', 'content':'你是个友好的聊天机器人。'},{'role':'user', 'content':'Hi, 我是Isa'},{'role':'assistant', 'content': "Hi Isa! 很高兴认识你。今天有什么可以帮到你的吗?"},{'role':'user', 'content':'是的,你可以提醒我, 我的名字是什么?'} ]response = get_completion_from_messages(messages, temperature=1)print(response)
构建机器人
以下是一个具体的例子来看看怎么构建一个上下文的列表方便调用模型的时候使用该上下文,同时模型的回答也会添加到上下文中。注意这个例子是用了 panel 库,是一个很简单的可视化聊天的 GUI 平台。
def collect_messages(_): prompt = inp.value_input inp.value = '' context.append({'role':'user', 'content':f"{prompt}"}) response = get_completion_from_messages(context) context.append({'role':'assistant', 'content':f"{response}"}) panels.append( pn.Row('User:', pn.pane.Markdown(prompt, width=600))) panels.append( pn.Row('Assistant:', pn.pane.Markdown(response, width=600, style={'background-color': '#F6F6F6'})))
return pn.Column(*panels)
构建一个负责 order 的 chatbot:
# 中文import panel as pn # GUIpn.extension()
panels = [] # collect display
context = [{'role':'system', 'content':"""你是订餐机器人,为披萨餐厅自动收集订单信息。你要首先问候顾客。然后等待用户回复收集订单信息。收集完信息需确认顾客是否还需要添加其他内容。最后需要询问是否自取或外送,如果是外送,你要询问地址。最后告诉顾客订单总金额,并送上祝福。
请确保明确所有选项、附加项和尺寸,以便从菜单中识别出该项唯一的内容。你的回应应该以简短、非常随意和友好的风格呈现。
菜单包括:
菜品:意式辣香肠披萨(大、中、小) 12.95、10.00、7.00芝士披萨(大、中、小) 10.95、9.25、6.50茄子披萨(大、中、小) 11.95、9.75、6.75薯条(大、小) 4.50、3.50希腊沙拉 7.25
配料:奶酪 2.00蘑菇 1.50香肠 3.00加拿大熏肉 3.50AI酱 1.50辣椒 1.00
饮料:可乐(大、中、小) 3.00、2.00、1.00雪碧(大、中、小) 3.00、2.00、1.00瓶装水 5.00"""} ] # accumulate messages
inp = pn.widgets.TextInput(value="Hi", placeholder='Enter text here…')button_conversation = pn.widgets.Button(name="Chat!")
interactive_conversation = pn.bind(collect_messages, button_conversation)
dashboard = pn.Column( inp, pn.Row(button_conversation), pn.panel(interactive_conversation, loading_indicator=True, height=300),)
dashboard
同时我们也可以创建 JSON 摘要方便我们的后续操作;
messages = context.copy()messages.append({'role':'system', 'content':'''创建上一个食品订单的 json 摘要。\逐项列出每件商品的价格,字段应该是 1) 披萨,包括大小 2) 配料列表 3) 饮料列表,包括大小 4) 配菜列表包括大小 5) 总价你应该给我返回一个可解析的Json对象,包括上述字段'''},)
response = get_completion_from_messages(messages, temperature=0)print(response)