提示技術系列(12)——程序輔助語言模型

什么是提示技術?

? ? ? ? 提示技術是實現提示工程目標的具體技術手段,是提示工程中的“工具庫”

什么又是提示工程?

????????提示工程是指通過設計、優化和迭代輸入到大語言模型(LLM)的提示(Prompt),系統性提升模型輸出質量(如相關性、準確性、可控性)的實踐領域。它是一個覆蓋全流程方法論,包括:

  • 明確目標任務(如生成教學內容、問答、翻譯);
  • 設計提示結構(如指令、上下文、示例);
  • 選擇模型與參數(如溫度、top_p);
  • 驗證與迭代(根據輸出調整提示)。

其核心是“通過工程化方法控制大語言模型(LLM)的行為”


概念

????????使用大語言模型讀取自然語言問題生成程序作為中間推理步驟的方法,被稱為程序輔助語言模型(Program-Aided Language Models, PAL)。

概念圖解

應用場景

  1. 數學與邏輯推理:解決復雜數學問題,如微積分、代數方程、幾何證明等;
  2. 數據分析與處理:自動化數據分析,生成可視化圖表,計算統計指標等;
  3. 編程輔助:為開發者生成代碼片段,解決實際問題,如生成特定功能的 Python代碼等;
  4. 教育與學習:幫助學生理解數學或編程問題,并通過代碼提供具體步驟等;
  5. ……

案例實操

使用工具:扣子

實現方式:扣子工作流

完整工作流如下:

工作流節點配置信息:

開始節點:

生成 Python代碼節點:

正則提取 Python代碼節點:

里面的代碼是 Python 語言,具體如下:

# 在這里,您可以通過 'args'  獲取節點中的輸入變量,并通過 'ret' 輸出結果
# 'args' 已經被正確地注入到環境中
# 下面是一個示例,首先獲取節點的全部輸入參數params,其次獲取其中參數名為'input'的值:
# params = args.params; 
# input = params['input'];
# 下面是一個示例,輸出一個包含多種數據類型的 'ret' 對象:
# ret: Output =  { "name": '小明', "hobbies": ["看書", "旅游"] };async def main(args: Args) -> Output:params = args.paramscode_param = params['input']import recode_match = re.search(r"```python(.*?)```", code_param, re.DOTALL)if not code_match:raise ValueError("無法從模型輸出中提取Python代碼")generated_code = code_match.group(1).strip()# 構建輸出對象ret: Output = {"key0":  generated_code}return ret

CodeRunner插件節點:

結束節點:

測試輸入:

小明有5個蘋果,7個香蕉。吃了2個香蕉,又買了3個蘋果,請問現在有幾個水果?

運行結果:

大家若有編程基礎的話,可以參考下面的代碼案例來實現與體驗不同場景下使用程序輔助語言模型提示。

代碼實現程序輔助語言提示

技術棧:Python;LangChain

代碼實現引用包導入:

pip install langchain_experimental==0.3.4;
pip install langchain_core==0.3.66;
pip install langchain_community==0.3.26;

具體代碼:

import os
import refrom dotenv import load_dotenv
from langchain_community.chat_models import ChatZhipuAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_experimental.utilities.python import PythonREPL# 加載環境變量
load_dotenv()# 1. 初始化智譜AI模型(GLM-4)
zhipu_chat = ChatZhipuAI(model="glm-4",api_key=os.getenv("ZHIPUAI_API_KEY")
)# 2. 創建Python代碼執行環境
python_repl = PythonREPL()  # 實例化 REPL 工具# 3. 設計PAL提示模板
pal_prompt = ChatPromptTemplate.from_messages([("system","""你是一名數學教師助手,必須通過生成可執行的Python代碼來解決問題。步驟:1. 先理解題目中的數學關系2. 生成能解決問題的Python代碼3. 代碼必須包含print輸出最終答案4. 不要直接給出數學計算結果"""),("human", "題目:{question}"),]
)# 4. 創建PAL工作流
def solve_math_problem(question: str):# 生成Python代碼code_generation = zhipu_chat.invoke(pal_prompt.format_messages(question=question))# 提取生成的代碼(實際應用中需要更嚴謹的代碼提取邏輯)code_match = re.search(r"```python(.*?)```", code_generation.content, re.DOTALL)if not code_match:raise ValueError("無法從模型輸出中提取Python代碼")generated_code = code_match.group(1).strip()# 執行代碼try:result = python_repl.run(generated_code)except Exception as e:return {"error": f"代碼執行失敗: {str(e)}","generated_code": generated_code}return {"generated_code": generated_code,"execution_result": result}# 5. 測試案例
math_question = "小明有5個蘋果,7個香蕉。吃了2個香蕉,又買了3個蘋果,請問現在有幾個水果?"print("正在處理中,請等待...")
solution = solve_math_problem(math_question)print("=== 生成的Python代碼 ===")
print(solution["generated_code"])
print("\n=== 執行結果 ===")
if "error" in solution:print(f"錯誤: {solution['error']}")
else:print(solution["execution_result"])

總結與思考

? ? ? ? 自動推理并使用工具(ART),是讓 LLM 自主規劃任務并判斷是否要調用工具,工具是已存在的(當工具是函數時,也就是代碼),這與程序輔助語言模型(PAL)有明顯的不同,具體的不同可以對比分析來看:

維度

自動推理并使用工具(ART)

程序輔助語言模型(PAL)

核心思想

利用大語言模型(LLM)自動生成推理步驟,并結合外部工具(如API、數據庫)執行復雜任務。

讓LLM生成可執行的程序代碼作為中間推理步驟,調用解釋器完成計算或邏輯推理。

是否依賴程序生成

否,但可調用現成程序/工具。

是,LLM直接生成可運行的程序代碼(如Python腳本)。

是否調用外部工具

是,主動選擇和調用外部工具(如搜索、計算器、數據庫查詢)。

否,僅生成程序,不涉及真實外部系統交互。

推理方式

基于自然語言的多步推理 + 工具調用鏈。

基于編程語言的符號推理,借助代碼實現邏輯運算。

輸出形式

自然語言推理路徑 + 工具調用結果。

程序代碼 + 解釋器執行結果。

是否需要訓練

不需微調模型,僅通過提示工程實現。

不需微調模型,僅通過提示工程實現。

是否支持動態交互

是,可根據中間結果調整后續推理路徑。

是,根據問題結構動態生成不同代碼段。

是否適合非結構化任務

是,適用于自然語言理解+工具調用結合的任務。

否,更適合結構化數學/邏輯任務。

資源消耗

高(需調用多個外部工具,可能有網絡延遲)。

中等(僅需執行輕量級代碼片段)。

可解釋性

高,推理路徑清晰,工具調用過程透明。

高,程序代碼明確,執行流程可見。

典型指令示例

“請一步步思考如何解決這個問題,必要時調用計算器或搜索最新數據。”

“請用Python代碼解決以下數學題:...”

一句話總結來說:? ? ? ??

????????ART 更強調“推理+工具調用”的聯動,適用于現實世界中需要訪問外部數據服務的復雜任務;而 PAL 更專注于“用程序代碼輔助推理”,在結構化邏輯和數學問題上表現出色。

?好了,到此。


提示技術系列,接下來分享:ReAct 框架等等

為了方便大家學習,這里給出專欄鏈接:https://blog.csdn.net/quf2zy/category_12995183.html

歡迎大家一起來學習與交流……

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87707.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87707.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87707.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

明遠智睿H618:開啟多場景智慧生活新時代

在數字化浪潮的推動下,智能設備正深刻地改變著我們的生活方式。明遠智睿H618以其強大的功能和卓越的性能,在家庭娛樂、商業展示、教育培訓和智能家居控制等多個領域展現出巨大的應用潛力,開啟了多場景智慧生活的新時代。 家庭娛樂&#xff1…

探秘展銷編輯器:相較于傳統展銷的卓越優勢與甄選指南?

在競爭激烈的商業環境中,企業期望通過展銷活動提升品牌知名度、推廣產品和拓展市場,但傳統展銷方式存在諸多難題。一是場地限制,優質場地稀缺、租金貴、檔期緊,場地空間和布局也不一定合適;二是展示形式單一,多為靜態展…

第31篇:塊設備與字符設備管理深度解析(基于OpenEuler 24.03)

塊設備與字符設備管理深度解析(基于OpenEuler 24.03) 文章目錄 塊設備與字符設備管理深度解析(基于OpenEuler 24.03)一、設備基礎概念體系1.1 塊設備的核心特性與分類1.2 字符設備的流式數據模型1.3 設備標識系統:主設…

Django Channels WebSocket實時通信實戰:從聊天功能到消息推送

引言 在Web開發中,實時通信功能(如在線聊天、實時通知、數據推送)已成為許多應用的核心需求。傳統的HTTP協議由于其請求-響應模式的限制,無法高效實現實時通信。WebSocket作為一種全雙工通信協議,為實時Web應用提供了…

day52 神經網絡調參指南

目錄 隨機種子 內參的初始化 神經網絡調參指南 參數的分類 調參順序 初始化參數 batchsize的選擇 學習率調整 激活函數的選擇 損失函數的選擇 模型架構中的參數 正則化系數 其他補充 隨機種子 import torch import torch.nn as nn# 定義簡單的線性模型&#xf…

.NET9 實現斐波那契數列(FibonacciSequence)性能測試

在 .NET 平臺上實現 斐波那契數列 并使用 BenchmarkDotNet 進行性能測試&#xff0c;是評估不同算法實現方式性能表現的一種高效且標準化的方法。通過該方式&#xff0c;可以對比遞歸、迭代、記憶化遞歸以及結合高性能優化技術&#xff08;如 Span<T>、Memory<T> 和…

三、docker軟件安裝:gitlab,nexus,mysql8,redis,nacos,nginx

目錄 1.gitlab安裝 2.nexus安裝 (1)下載啟動 (2)設置中央倉庫遠程地址 (3)配置maven的settings.xml 3.mysql8安裝 4.redis安裝 5.nacos安裝 6.nginx安裝 1.gitlab安裝 #創建目錄 cd /usr/local/ mkdir docker cd docker/ mkdir gitlab_docker cd gitlab_docker…

【與AI+】SAP WEBGUI集成開發與SAP INTERNET服務的關系

前言&#xff1a;這是我的水水專欄第五篇文章&#xff0c;這個專欄呢&#xff0c;是放一些我向AI提問的問題&#xff0c;以及AI的回答。因為感覺真的好方便哈哈哈~ 我不是很確定我的專欄文章內容是否涉及版權&#xff0c;以及也不確定這些整合過的文字是否涉嫌抄襲&#xff0c…

淺談幾種js設計模式

JavaScript設計模式是開發中常用的一種解決方案&#xff0c;它們幫助開發者以一種更結構化、更易維護的方式編寫代碼。本文將深入介紹幾種常見的JavaScript設計模式&#xff0c;包括單例模式、工廠模式、觀察者模式和策略模式。 一、單例模式&#xff08;Singleton Pattern&am…

手寫 Vue 中虛擬 DOM 到真實 DOM 的完整過程

目錄 一、虛擬 DOM 的核心概念 二、虛擬 DOM 到真實 DOM 的流程 三、手寫虛擬 DOM 到真實 DOM 的實現 1. 定義虛擬 DOM 的結構&#xff08;VNode&#xff09; 2. 創建虛擬 DOM 轉真實 DOM 的函數 3. 掛載虛擬 DOM 到頁面 4. 更新虛擬 DOM 的過程&#xff08;Diff 算法簡化…

jmm--volatile

指令重排基礎概念 在現代處理器和編譯器為了提高程序執行效率&#xff0c;會對指令進行優化&#xff0c;其中一種優化方式就是指令重排序。在單線程環境下&#xff0c;指令重排序不會影響最終執行結果&#xff0c;因為處理器和編譯器會保證重排序后的執行結果與按照代碼順序執行…

【硬件開發】濾波電容的選擇:原理、計算與多電壓值應用實踐

濾波電容的選擇&#xff1a;原理、計算與多電壓值應用實踐 1. 引言 在現代電子系統中&#xff0c;穩定的電源供應是保證電路可靠運行的基礎。然而&#xff0c;電源線上往往不可避免地存在各種噪聲和紋波&#xff0c;這些干擾可能源自電源本身&#xff08;如整流后的脈動直流&…

【seismic unix數據生成-unif2】

Seismic Unix簡介 Seismic Unix&#xff08;SU&#xff09;是由科羅拉多礦業學院&#xff08;Colorado School of Mines&#xff09;開發的開源地震數據處理軟件包&#xff0c;專為地震勘探數據分析和研究設計。它提供了一系列命令行工具&#xff0c;支持從數據加載、處理到可…

【逆向思考 并集查找】P2391 白雪皚皚|省選-

本文涉及知識點 C并集查找 P2391 白雪皚皚 題目背景 “柴門聞犬吠&#xff0c;風雪夜歸人”&#xff0c;冬天&#xff0c;不期而至。千里冰封&#xff0c;萬里雪飄。空中刮起了鴨毛大雪。雪花紛紛&#xff0c;降落人間。 美能量星球&#xff08;pty 在 spore 上的一個殖民地…

一文講清楚React中setState的使用方法和機制

文章目錄 一文講清楚React中setState的使用方法和機制1. setState是什么2. setState方法詳解2.1 setState參數詳解2.2 setState同步異步問題2.2.1 setState異步更新2.2.2 setState同步更新 一文講清楚React中setState的使用方法和機制 1. setState是什么 React中&#xff0c;…

01_軟件卓越之道:功能性與需求滿足

引言 在軟件的世界里&#xff0c;功能性是產品與用戶之間的第一橋梁。一個軟件即使擁有華麗的界面和極致的性能&#xff0c;如果不能解決用戶的核心需求&#xff0c;也終將被市場淘汰。本文將深入探討如何確保軟件的功能性與用戶需求完美契合。 1. 需求理解&#xff1a;從模糊…

StarRocks × Tableau 連接器完整使用指南 | 高效數據分析從連接開始

一、導語&#xff1a;為什么選擇 StarRocks Tableau 連接器&#xff1f; 在當今數據驅動的商業環境中&#xff0c;企業不僅需要一個能夠處理海量數據的高性能分析數據庫&#xff0c;還需要一個直觀、強大的可視化工具來解讀數據背后的故事。StarRocks 作為新一代極速全場景 MP…

基于 SpringBoot+VueJS 助農生鮮銷售系統設計與實現7000字論文實現

摘要本論文設計并實現了一個基于 SpringBoot 和 VueJS 的助農生鮮銷售系統。系統采用前后端分離架構&#xff0c;前端使用 VueJS 框架實現用戶界面&#xff0c;后端使用 SpringBoot 框架構建服務&#xff0c;通過 MyBatis 實現數據持久化。系統實現了農產品展示、在線購物、訂單…

Pytest 測試發現機制詳解:自動識別測試函數與模塊

概述 在編寫自動化測試時,如何讓 Pytest 自動找到你的測試代碼 是一個非常基礎但重要的問題。Pytest 通過其強大的 測試發現(Test Discovery)機制,能夠自動掃描項目目錄、識別測試模塊和測試函數,從而大大簡化了測試流程。 本文將為你詳細講解 Pytest 的測試發現機制,包…

MySQL 時間日期函數

時間日期類型 MySQL中主要支持以下幾種時間日期類型&#xff1a; DATE - 日期類型 格式&#xff1a;YYYY-MM-DD范圍&#xff1a;1000-01-01 到 9999-12-31示例&#xff1a;2023-05-20 TIME - 時間類型 格式&#xff1a;HH:MM:SS范圍&#xff1a;-838:59:59 到 838:59:59示例&…