什么是提示技術?
? ? ? ? 提示技術是實現提示工程目標的具體技術手段,是提示工程中的“工具庫”。
什么又是提示工程?
????????提示工程是指通過設計、優化和迭代輸入到大語言模型(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 Dictfrom dotenv import load_dotenv
from langchain.agents import initialize_agent, Tool
from langchain.prompts import PromptTemplate
from langchain_community.chat_models import ChatZhipuAIdef 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 AgentTypeagent = 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
歡迎大家一起來學習與交流……