当前位置: 首页 > web >正文

提示技术系列——程序辅助语言模型

什么是提示技术?

        提示技术是实现提示工程目标的具体技术手段,是提示工程中的“工具库”

什么又是提示工程?

        提示工程是指通过设计、优化和迭代输入到大语言模型(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.xdnf.cn/news/14882.html

相关文章:

  • HCIA-实现VLAN间通信
  • 智能物流革命:Spring Boot+AI实现最优配送路径规划
  • 红黑树:高效平衡的秘密
  • Spring生态在Java开发
  • Android Native 之 init初始化selinux机制
  • 【Note】《深入理解Linux内核》 Chapter 5 :内存地址的表示——Linux虚拟内存体系结构详解
  • 【RHCSA-Linux考试题目笔记(自用)】servera的题目
  • mac Maven配置报错The JAVA_HOME environment variable is not defined correctly的解决方法
  • 「ECG信号处理——(20)基于心电和呼吸的因果分析模型」2025年7月2日
  • 【Python】Python / PyCharm 虚拟环境详搭建与使用详解
  • U+平台配置免密登录、安装Hadoop配置集群、Spark配置
  • FIRST携手Fortinet推出全新CORE计划,致力于提升全球网络能力
  • jQuery EasyUI 安装使用教程
  • [Python 基础课程]数字
  • 【学习笔记】Python中主函数调用的方式
  • AngularJS 安装使用教程
  • kubernetes pod调度基础
  • Ubuntu系统开发板借助windows中转上网
  • 类加载生命周期与内存区域详解
  • [特殊字符] 分享裂变新姿势:用 UniApp + Vue3 玩转小程序页面分享跳转!
  • CAU数据挖掘实验 表分析数据插件
  • AILiquid线上AMA首秀,全链AI驱动的去中心化合约平台引发关注
  • 解决 GitHub Actions 中 S3 部署文件堆积问题的完整指南
  • php数据导出pdf文件
  • Vue-16-前端框架Vue之应用基础集中式状态管理pinia(一)
  • Linux 系统管理:高效运维与性能优化
  • MySQL索引失效场景
  • OpenWrt | 使用 Docker 运行 iperf3
  • 深度解析基于贝叶斯的垃圾邮件分类
  • android BottomSheet及AlertDialog的几种material3 常见ui的用法