什么是提示技术?
提示技术是实现提示工程目标的具体技术手段,是提示工程中的“工具库”。
什么又是提示工程?
提示工程是指通过设计、优化和迭代输入到大语言模型(LLM)的提示(Prompt),系统性提升模型输出质量(如相关性、准确性、可控性)的实践领域。它是一个覆盖全流程的方法论,包括:
- 明确目标任务(如生成教学内容、问答、翻译);
- 设计提示结构(如指令、上下文、示例);
- 选择模型与参数(如温度、top_p);
- 验证与迭代(根据输出调整提示)。
其核心是“通过工程化方法控制大语言模型(LLM)的行为”。
概念
ReAct(Reasoning + Acting)是一种结合推理与行动的提示技术框架,旨在让大语言模型在复杂任务中,同时具备逻辑推理能力和外部工具/环境交互的能力。它通过动态生成推理链和行动指令,模拟人类的“思考-行动”循环,从而提升模型在多步骤任务重的表现。
核心思想:
- 推理(Reasoning):模型生成中间推理步骤,解释当前状态、目标及下一步行动的依据。
- 行动(Acting):模型调用外部工具(如搜索引擎、计算器、API)或执行特定操作(如提问、验证假设)以获取信息。
- 迭代循环:推理与行动交替进行,逐步逼近任务目标。
ReAct,类似于人类解决复杂问题时的“先思考再行动”模式。例如,在规划旅游时,你会先分析预算、时间(推理),然后查询机票、酒店价格(行动),再根据结果调整计划(推理),如此循环,直到结果满足需求。
概念图解
应用场景
- 复杂任务规划:如规划为期五天的云南旅行等;
- 财务分析:如分析公司年度财报等;
- 科学研究助手:如论文研究、验证实验设计等;
- 交互式系统:如聊天机器人、智能助手等;
- 教育领域应用:如数学解题辅导,科学实验设计,编程教学等;
- ……
案例实操
使用工具:扣子
实现方式:扣子智能体
完整智能体如下:
测试输入:
规划一次 5 天的云南旅行,预算 12000 元,出发地:广州,明天 2025 年 7 月 4 日出发
运行结果:
大家若有编程基础的话,可以参考下面的代码案例来实现与体验不同场景下使用 ReAct 提示。
代码实现ReAct提示
技术栈:Python;LangChain
代码引用包导入:
pip install langchain_community==0.3.26;
pip install langchain==0.3.26;
具体代码:
import os
import random
from typing import Dict
from dotenv import load_dotenv
from langchain.agents import initialize_agent, Tool
from langchain.prompts import PromptTemplate
from langchain_community.chat_models import ChatZhipuAI
def weather_api(input_str: str) -> Dict[str, str]:
"""处理天气查询"""
location = input_str.strip("'\" ") # 去除引号和空格
weathers = ["晴朗", "多云", "小雨", "阵雨"]
return {
"weather": random.choice(weathers),
"temperature": f"{random.randint(10, 25)}℃",
"location": location
}
def flight_api(input_str: str) -> dict[str, int | str] | dict[str, str]:
"""处理机票查询"""
try:
from_city, to_city = [c.strip("'\" ") for c in input_str.split(",")]
return {
"price": random.randint(800, 3000),
"from": from_city,
"to": to_city
}
except Exception as e:
return {"error": f"输入格式错误: {str(e)}"}
# 工具注册
tools = [
Tool(
name="weather",
description="查询城市天气(输入格式:'城市名';输出:天气和温度)",
func=weather_api,
),
Tool(
name="flight",
description="查询机票价格(输入格式:'出发地,目的地';输出:价格)",
func=flight_api
),
]
# 初始化 LLM
load_dotenv()
llm = ChatZhipuAI(
model="glm-4",
api_key=os.getenv("ZHIPUAI_API_KEY")
)
react_prefix = """你是一个智能旅行规划助手,可以调用以下工具:
{tools}
任务:{input}
请遵循以下格式进行推理和行动:
思考:首先需要做什么?
行动:调用工具名称(如 weather、flight)
观察:工具返回的结果
...(重复思考-行动-观察步骤)
最终答案:完整的旅行规划"""
react_prompt = PromptTemplate(
template=react_prefix,
input_variables=["input", "tools"],
)
from langchain.agents import AgentType
agent = initialize_agent(
tools=tools,
llm=llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
prompt=react_prompt,
verbose=True, # 打印中间步骤
max_iterations=20, # 限制最大推理步骤
)
user_input = "规划一次5天的云南旅行,预算12000元,从广州出发"
print("正在规划旅行,请稍候...")
response = agent.run(user_input)
print("最终规划结果:\n", response)
代码运行输出的中间结果,看起来就像我们在做这个任务的思考与行动过程,挺有意思的。
总结与思考
ReAct 提示与自动推理并使用工具(ART)提示,都有着让 LLM 自动规划任务,推理并使用工具的含义,那么不免产生对比的好奇。
维度 |
ReAct |
自动推理并使用工具(ART) |
核心思想 |
通过交替进行“推理(Reasoning)”和“行动(Action)”,让LLM在任务中自主选择动作并执行。 |
引导LLM自动生成多步推理链,并动态调用外部工具来完成复杂任务。 |
是否依赖工具调用 |
是,LLM需决定何时调用工具(如API、搜索)。 |
是,LLM主动选择和调用合适的工具链。 |
是否强调推理步骤 |
是,LLM需先进行逻辑推理,再决定下一步操作。 |
是,强调生成明确的推理路径以支持工具调用。 |
是否生成可执行代码 |
否,仅生成自然语言推理和动作指令。 |
否,主要生成自然语言推理和工具调用描述。 |
输出形式 |
推理步骤 + 动作选择(如调用搜索引擎、数据库查询) |
多步推理链 + 工具调用序列(如API调用、计算器) |
是否支持动态交互 |
是,根据中间结果调整后续推理路径。 |
是,根据当前状态动态调整工具调用顺序。 |
是否适合非结构化任务 |
是,适用于自然语言理解+工具调用结合的任务。 |
是,尤其适合需要实时数据或多个工具协作的任务。 |
资源消耗 |
中等(取决于调用的工具数量)。 |
高(可能涉及多次网络请求、API调用)。 |
可解释性 |
高,推理路径清晰,动作选择透明。 |
高,推理过程与工具调用逻辑分离明确。 |
典型指令示例 |
“请一步步思考如何解决这个问题,并在需要时调用计算器或搜索最新数据。” |
“请生成一个包含多步推理的思维链,并在适当位置调用相关工具完成计算或获取信息。” |
一句话总结:
ReAct 更强调“推理+动作”的交替循环,适用于模拟人类行为的交互式任务;而 ART 更注重“多步推理链+工具调用”的自动化流程,在需要访问外部数据和服务的复杂任务中表现更强。
好了,到此吧。
提示技术系列,截止到目前为止已经写了12篇,它们分别是:零样本;少样本;链式思考(CoT);自我一致性;生成知识提示;链式提示;主动提示;思维树(TOT);自动提示工程师;方向性刺激提示;自动推理并使用工具;程序辅助语言模型;
接下来分享:检索增强生成 (RAG) ?
为了方便大家学习,这里给出专栏链接:https://blog.csdn.net/quf2zy/category_12995183.html
欢迎大家一起来学习与交流……