【Prompt Engineering】6 文本扩展

一、引言

  • 文本扩展:将短文本输入到大型语言模型中,生成更长的文本。
  • 应用场景:头脑风暴、生成电子邮件或论文等。
  • 风险:可能被用于生成垃圾邮件。
  • 使用原则:负责任地使用,确保有益于人们。
  • 技术准备:配置环境以使用OpenAI API。
from zhipuai import ZhipuAI
# 导入第三方库

key = "sk-..."
# 设置 API_KEY, 请替换成您自己的 API_KEY
client = ZhipuAI(api_key = key)

def get_completion(prompt, model="glm-3-turbo", temperature=0):
    messages = [{"role": "user", "content": prompt}]
    response = clinet.chat.completions.create(
        model=model,
        messages=messages,
        temperature=temperature, # 模型输出的温度系数,控制输出的随机程度
    )
    return response.choices[0].message.content

二、定制客户邮件

  • 根据客户评价和情感:使用LLM生成针对性的客户服务邮件。
  • 情感分析:先前章节中已学习如何判断评论情感。
  • Prompt设计:设计Prompt以生成感谢信,根据情感正面或负面调整回复内容。
  • 具体细节:确保回复中使用客户评价的具体细节。
  • 专业语气:以简明、专业的语气撰写邮件。
  • 签名:以“AI客户代理”名义签署邮件。
# 我们可以在推理那章学习到如何对一个评论判断其情感倾向
sentiment = "negative"

# 一个产品的评价
review = f"""
他们在11月份的季节性销售期间以约49美元的价格出售17件套装,折扣约为一半。\
但由于某些原因(可能是价格欺诈),到了12月第二周,同样的套装价格全都涨到了70美元到89美元不等。\
11件套装的价格也上涨了大约10美元左右。\
虽然外观看起来还可以,但基座上锁定刀片的部分看起来不如几年前的早期版本那么好。\
不过我打算非常温柔地使用它,例如,\
我会先在搅拌机中将像豆子、冰、米饭等硬物研磨,然后再制成所需的份量,\
切换到打蛋器制作更细的面粉,或者在制作冰沙时先使用交叉切割刀片,然后使用平面刀片制作更细/不粘的效果。\
制作冰沙时,特别提示:\
将水果和蔬菜切碎并冷冻(如果使用菠菜,则轻轻煮软菠菜,然后冷冻直到使用;\
如果制作果酱,则使用小到中号的食品处理器),这样可以避免在制作冰沙时添加太多冰块。\
大约一年后,电机发出奇怪的噪音,我打电话给客服,但保修已经过期了,所以我不得不再买一个。\
总的来说,这些产品的总体质量已经下降,因此它们依靠品牌认可和消费者忠诚度来维持销售。\
货物在两天内到达。
"""
prompt = f"""
你是一位客户服务的AI助手。
你的任务是给一位重要客户发送邮件回复。
根据客户通过“```”分隔的评价,生成回复以感谢客户的评价。提醒模型使用评价中的具体细节
用简明而专业的语气写信。
作为“AI客户代理”签署电子邮件。
客户评论:
```{review}```
评论情感:{sentiment}
"""
response = get_completion(prompt)
print(response)

三、引入温度系数

  • 温度系数:控制模型响应的多样性和随机性。
  • 温度影响:温度为零时,响应最可预测;温度较高时,响应更随机、多样。
  • 应用场景
    • 可预测响应:设置温度为零,适用于需要一致性的应用。
    • 创意输出:使用更高的温度,适用于需要创意和多样性的场景。
  • 实验建议:尝试不同的温度值,观察输出如何变化。
  • 温度效果:高温度下模型输出更随机,可能更有创造力但也可能更分散。
prompt = f"""
你是一名客户服务的AI助手。
你的任务是给一位重要的客户发送邮件回复。
根据通过“```”分隔的客户电子邮件生成回复,以感谢客户的评价。
如果情感是积极的或中性的,感谢他们的评价。
如果情感是消极的,道歉并建议他们联系客户服务。
请确保使用评论中的具体细节。
以简明和专业的语气写信。
以“AI客户代理”的名义签署电子邮件。
客户评价:```{review}```
评论情感:{sentiment}
"""
response = get_completion(prompt, temperature=0.7)
print(response)

总结

  • 文本扩展是利用LLM生成详细内容的有效方法,但需谨慎使用。
  • 定制客户邮件可以根据情感分析结果进行个性化回复。
  • 温度系数是调整模型创造性和随机性的重要参数。
  • 实验和调整温度系数可以优化模型输出,满足不同应用需求。
<think>好的,我现在需要帮助用户了解提示工程(prompt engineering)、代理(agent)和函数调用(function call)在AI或编程中的概念和实现方法。首先,我需要理清每个概念的定义和它们之间的关系。 首先,提示工程是指设计和优化输入提示,以引导AI模型生成更准确的输出。根据引用[1],分解复杂问题为更简单的子问题可以提升大语言模型(LLM)的解决能力,这可能涉及到像思维链(CoT)这样的技术。用户提到的提示工程结合代理和函数调用,可能需要将这些技术结合起来,使AI系统更有效地处理任务。 接下来是代理(agent)的概念。在AI中,代理通常指能够自主执行任务或决策的实体。比如,一个代理可能需要调用工具或函数来完成目标,这涉及到函数调用。例如,一个代理可能需要使用搜索API获取实时数据,或者执行代码进行计算,这都需要函数调用的支持。 然后是函数调用,这允许AI模型与外部系统或API交互,执行具体操作。例如,当模型需要获取天气数据时,可以调用相应的API函数。结合提示工程,可以设计提示让模型明确何时以及如何调用这些函数,从而增强其功能。 现在需要将这些概念结合起来,思考它们如何协同工作。比如,提示工程可以设计特定的指令,让代理根据输入的提示分解任务,然后通过函数调用执行具体步骤。这可能涉及到分步提示(Step-by-Step Prompting),将复杂任务拆解,并指导代理逐步完成,同时适时调用必要的函数。 此外,引用[1]提到的Least-to-Most提示方法,可能类似于逐步引导模型解决子问题,再整合结果。这可能应用于代理的工作流程中,先分解问题,再通过函数调用处理每个子问题,最后汇总结果。 用户还可能需要了解具体的实现方法,比如在编程中如何将提示工程与函数调用结合。例如,使用LangChain框架,可以创建代理,根据提示解析用户请求,决定调用哪个工具,执行函数,并返回结果。代码示例可能包括定义工具、设置提示模板、初始化代理并运行。 最后,需要考虑可能的相关问题,如不同提示技术的对比、代理设计的最佳实践、函数调用的安全性和效率等。这些都需要在回答中提及,以帮助用户全面理解。 总结,我需要分步骤解释每个概念,结合引用中的研究,给出实际示例,并生成相关问题供用户深入探索。</think>### 提示工程与代理、函数调用的结合 #### 1. **核心概念** - **提示工程(Prompt Engineering)** 通过设计特定结构的输入提示(prompt),引导大语言模型(LLM)生成更符合目标的输出。例如: - **思维链(CoT)**:要求模型分步骤推理,如“请逐步解释如何计算圆的面积”[^1]。 - **函数调用提示**:明确指示模型调用外部工具,如“调用天气API获取北京今日温度”。 - **代理(Agent)** 代理是能够自主决策并执行任务的AI实体。例如: - **工具调用代理**:根据输入决定调用搜索引擎、计算器或数据库。 - **多步任务代理**:分解复杂任务为多个子步骤,如“规划旅行路线”需依次处理交通、住宿等。 - **函数调用(Function Call)** 允许AI模型与外部系统交互,执行具体操作。例如: - 调用Python函数处理数据:`calculate_average([1,2,3])`。 - 调用API获取实时信息:`get_stock_price("AAPL")`。 #### 2. **结合方式与实现** - **步骤分解与函数调用** 1. **提示设计**:通过CoT将任务分解为子问题,例如: ``` 用户输入:“帮我分析某公司近三年营收增长率。” 提示模板: 1. 调用API获取2019-2021年财务数据。 2. 计算每年增长率:(当年营收 - 前年营收)/前年营收。 3. 生成可视化图表。 ``` 2. **代理决策**:代理根据提示选择需调用的函数(如财务API、计算函数、绘图库)。 3. **执行与整合**:依次执行函数并汇总结果。 - **代码示例(基于LangChain框架)** ```python from langchain.agents import initialize_agent, Tool from langchain.llms import OpenAI # 定义工具函数 def fetch_financial_data(company: str) -> dict: # 模拟API调用 return {"2019": 100, "2020": 120, "2021": 150} def calculate_growth(data: dict) -> float: return (data["2021"] - data["2019"]) / data["2019"] # 创建工具列表 tools = [ Tool(name="FinancialDataFetcher", func=fetch_financial_data, description="获取公司财务数据"), Tool(name="GrowthCalculator", func=calculate_growth, description="计算增长率") ] # 初始化代理 agent = initialize_agent(tools, OpenAI(), agent="zero-shot-react-description", verbose=True) agent.run("请分析公司XYZ的三年营收增长率。") ``` 输出可能为: ``` 1. 调用FinancialDataFetcher获取数据 → {2019:100, 2020:120, 2021:150} 2. 调用GrowthCalculator → 增长率=(150-100)/100=50% ``` #### 3. **应用场景** - **自动化数据分析**:代理根据自然语言指令调用清洗、计算、可视化函数[^1]。 - **智能客服**:通过函数调用查询订单、生成解决方案,如“查询订单123状态 → 调用`get_order_status(123)`”。 - **科研辅助**:分解复杂问题为文献检索、公式推导、图表生成等步骤。 #### 4. **优化策略** - **精准提示设计**:明确函数调用条件和参数,例如: “若用户需要实时数据,调用`search_web(query)`;若需要计算,调用`math_solver(expression)`。” - **错误处理机制**:在提示中要求代理验证函数输出,如“检查API返回是否为空,若空则重试”。 - **多模态扩展**:结合图像处理函数,如“调用`ocr(image_path)`提取文本,再调用`translate(text)`翻译”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值