news 2026/4/29 12:40:57

DSPy优化提示词

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DSPy优化提示词

DSPy优化提示词

1 简单介绍

DSPy(Declarative Self-improving Language Programs)是一个用于构建和优化基于大语言模型(LLM)应用的编程框架。它的核心目标是将提示工程(prompt engineering)、微调(fine-tuning)和推理流程(reasoning pipelines)从手工、经验驱动的方式转变为可声明、可组合、可自动优化的程序化方法。核心组件是签名(Signatures)、模块(Modules)、优化器(Optimization )和评估(Evaluation )。

1.1 签名(Signatures)

签名(Signature)是 DSPy 模块输入/输出行为的声明式规范。可用于指导大语言模型(LM)需要完成什么任务,而不是具体规定应该如何向模型提问来实现该任务。

在 DSPy 中,签名(Signature)可以用简短的字符串形式定义,其中包含输入和输出的参数名称,以及可选的类型注解,用于明确各字段的语义角色。

基础签名:

  1. 问答(Question Answering)"question -> answer",等价于"question: str -> answer: str",默认类型始终为str
  2. 情感分类(Sentiment Classification)"sentence -> sentiment: bool",例如,若句子情感为正面,则输出True
  3. 文本摘要(Summarization)"document -> summary"

多字段输入/输出(支持类型注解):

  1. 检索增强问答(Retrieval-Augmented Question Answering)"context: list[str], question: str -> answer: str",表示模型接收一个字符串列表(如检索到的上下文段落)和一个问题,输出答案。
  2. 带推理的多选题问答(Multiple-Choice QA with Reasoning)"question, choices: list[str] -> reasoning: str, selection: int",模型需先生成推理过程(reasoning),再返回所选选项的索引(selection,从 0 开始)。

1.2 模块(Modules)

  1. dspy.Predict:基础预测器。不修改签名本身,负责处理学习的核心形式(例如:存储指令、示例以及对语言模型的更新),是最基础的形式。
  2. dspy.ChainOfThought:引导语言模型在给出最终响应前,先进行逐步推理(即“思维链”),强调分步推理。
  3. dspy.ProgramOfThought:引导语言模型生成代码,通过执行该代码的结果来决定最终响应,用可执行代码代替自然语言推理。
  4. dspy.ReAct:一种具备工具调用能力的智能体(agent),可利用外部工具来实现指定的签名功能,支持调用外部工具,适合需要与环境交互的任务。
  5. dspy.MultiChainComparison:可运行多个 ChainOfThought 推理路径,并对它们的输出进行比较,从而生成最终预测,通过多路径推理+比较提升结果质量。

1.3 优化器(Optimization )

可以用DSPy优化器来调整程序中的提示或权重.

(1)自动少样本学习( Automatic Few-Shot Learning)

该优化器通过先将自动生成和优化后的示例包含在提示中,再发送给模型,从而扩展了提示的签名,实现了少样本学习(few-shot learning)。少样本学习包括:LabeledFewShot、BootstrapFewShot、BootstrapFewShotWithRandomSearch、KNNFewShot。

LabeledFewShot:直接从标注数据中随机选取固定数量的示例作为少样本提示;

BootstrapFewShot:利用教师模型在训练集上生成并验证示例,只保留正确的演示构建提示。

BootstrapFewShotWithRandomSearch:多次运行 BootstrapFewShot 并结合随机搜索,从中选出性能最优的提示配置。

KNNFewShot:对每个输入,基于相似度从训练集中检索最相关的示例用于构建动态少样本提示。

(2)自动指令优化(Automatic Instruction Optimization)

该优化器专注于自动优化提示中的指令(instructions),通过迭代生成、评估和改进提示内容,利用训练集、模型反馈或贝叶斯搜索等策略,提升 DSPy 程序在目标任务上的性能。

COPRO:通过坐标上升法(基于指标和训练集)迭代生成并优化每一步的提示指令,逐步提升效果。

MIPROv2:结合数据与示例信息,使用贝叶斯优化联合搜索最优的指令和少样本示例组合。

SIMBA:通过小批量采样识别高不确定性样本,引导大模型自我分析失败原因并生成改进规则或补充成功示例。

GEPA:让大模型反思程序执行轨迹,总结成败经验以提出针对性提示改进建议,并可融入领域文本反馈加速优化。

(3)自动微调(Automatic Finetuning)

该优化器用于微调底层大模型。

BootstrapFinetune:将一个基于提示(prompt-based)的 DSPy 程序实现权重更新。输出是一个具有相同步骤的 DSPy 程序,但其中每个步骤均由微调后的模型执行,而非通过提示语言模型来完成。

(4)程序变换(Program Transformations)

Ensemble:将一组 DSPy 程序进行集成,并可选择使用全部程序,或从中随机采样一个子集,组合成单个程序。

参考地址

# 官网地址 https://dspy.ai/ # Github地址 https://github.com/stanfordnlp/dspy

2 简单使用

2.1 结构化输出

代码

fromtypingimportListimportdspyfromdspyimportSignature,InputField,OutputFieldclassKeywordInfo(Signature):# 1 输入的内容text:str=InputField()# 2 输出的内容keywords:List[str]=OutputField(desc="关键词列表")entities:list[dict[str,str]]=OutputField(desc="实体信息列表")defextract_tech():llm=dspy.LM(# 注意:openai是固定的协议,llm-v1是vLLM创建的模型名称model="openai/llm-v1",api_base="http://192.168.0.106:8000/v1",api_key="Empty")# 配置大模型dspy.configure(lm=llm)# 模型预测module=dspy.Predict(KeywordInfo)# 模型内容print(module)# 执行返回值response=module(text="河南大学创立于1912年,始名河南留学欧美预备学校,首任校长为林伯襄先生,校园选建于河南贡院 旧址之上。后历经中州大学 、 国立开封中山大学 ( 又称国立第五中山大学 )、省立河南大学 等阶段 ,1942年升格为国立河南大学 。 1952年院系调整 ,部分院系或独立建校或并入兄弟高校,校本部更名为河南师范学院 。后又经开封师范学院 、河南师范大学 等阶段,1984年恢复河南大学 校名。 2008年10月,学校进入省部共建高校行列。2017年9月,学校入选首批国家“双一流”建设高校。2022年2月,学校再次入选国家“双一流”建设高校。 113年来,学校恪守“明德新民,止于至善”的校训,形成“团结、勤奋、严谨、朴实”的校风和以“百折不挠、自强不息”为核心的大学精神,培养70多万名各类人才,为教育振兴、科技创新、文化传承、社会进步和人类文明作出突出贡献。")print(response)if__name__=='__main__':extract_tech()

输出

Predict(KeywordInfo(text -> keywords, entities instructions='Given the fields `text`, produce the fields `keywords`, `entities`.' text = Field(annotation=str required=True json_schema_extra={'__dspy_field_type': 'input', 'prefix': 'Text:', 'desc': '${text}'}) keywords = Field(annotation=List[str] required=True json_schema_extra={'desc': '关键词列表', '__dspy_field_type': 'output', 'prefix': 'Keywords:'}) entities = Field(annotation=list[dict[str, str]] required=True json_schema_extra={'desc': '实体信息列表', '__dspy_field_type': 'output', 'prefix': 'Entities:'}) )) Prediction( keywords=['河南大学', '1912年', '河南留学欧美预备学校', '林伯襄', '河南贡院', '中州大学', '国立开封中山大学', '国立第五中山大学', '省立河南大学', '国立河南大学', '1952年院系调整', '河南师范学院', '开封师范学院', '河南师范大学', '1984年', '省部共建高校', '双一流建设高校', '明德新民', '止于至善', '团结勤奋严谨朴实', '百折不挠自强不息', '70多万人才'], entities=[{'name': '河南大学', 'type': 'institution'}, {'name': '河南留学欧美预备学校', 'type': 'institution'}, {'name': '林伯襄', 'type': 'person'}, {'name': '河南贡院', 'type': 'location'}, {'name': '中州大学', 'type': 'institution'}, {'name': '国立开封中山大学', 'type': 'institution'}, {'name': '国立第五中山大学', 'type': 'institution'}, {'name': '省立河南大学', 'type': 'institution'}, {'name': '国立河南大学', 'type': 'institution'}, {'name': '河南师范学院', 'type': 'institution'}, {'name': '开封师范学院', 'type': 'institution'}, {'name': '河南师范大学', 'type': 'institution'}, {'name': '1912年', 'type': 'date'}, {'name': '1942年', 'type': 'date'}, {'name': '1952年', 'type': 'date'}, {'name': '1984年', 'type': 'date'}, {'name': '2008年10月', 'type': 'date'}, {'name': '2017年9月', 'type': 'date'}, {'name': '2022年2月', 'type': 'date'}, {'name': '明德新民', 'type': 'phrase'}, {'name': '止于至善', 'type': 'phrase'}, {'name': '团结勤奋严谨朴实', 'type': 'phrase'}, {'name': '百折不挠自强不息', 'type': 'phrase'}, {'name': '70多万人才', 'type': 'statistic'}] )

2.2 思维链

代码

importdspydefresponse_answer():llm=dspy.LM(model="openai/llm-v1",api_base="http://192.168.0.106:8000/v1",api_key="Empty")# 配置大模型dspy.configure(lm=llm)# 构建模型module=dspy.ChainOfThought("context, question -> response")# 模型内容print(module)# 执行返回值text="河南大学创立于1912年,始名河南留学欧美预备学校,首任校长为林伯襄先生,校园选建于河南贡院 旧址之上。后历经中州大学 、 国立开封中山大学 ( 又称国立第五中山大学 )、省立河南大学 等阶段 ,1942年升格为国立河南大学 。 1952年院系调整 ,部分院系或独立建校或并入兄弟高校,校本部更名为河南师范学院 。后又经开封师范学院 、河南师范大学 等阶段,1984年恢复河南大学 校名。 2008年10月,学校进入省部共建高校行列。2017年9月,学校入选首批国家“双一流”建设高校。2022年2月,学校再次入选国家“双一流”建设高校。 113年来,学校恪守“明德新民,止于至善”的校训,形成“团结、勤奋、严谨、朴实”的校风和以“百折不挠、自强不息”为核心的大学精神,培养70多万名各类人才,为教育振兴、科技创新、文化传承、社会进步和人类文明作出突出贡献。"response=module(context=text,question="首先梳理河南大学的发展历史,然后分段简单介绍河南大学")# 打印返回内容print(response)print(llm.history[0])if__name__=='__main__':response_answer()

输出

predict = Predict(StringSignature(context, question -> reasoning, response instructions='Given the fields `context`, `question`, produce the fields `response`.' context = Field(annotation=str required=True json_schema_extra={'__dspy_field_type': 'input', 'prefix': 'Context:', 'desc': '${context}'}) question = Field(annotation=str required=True json_schema_extra={'__dspy_field_type': 'input', 'prefix': 'Question:', 'desc': '${question}'}) reasoning = Field(annotation=str required=True json_schema_extra={'prefix': "Reasoning: Let's think step by step in order to", 'desc': '${reasoning}', '__dspy_field_type': 'output'}) response = Field(annotation=str required=True json_schema_extra={'__dspy_field_type': 'output', 'prefix': 'Response:', 'desc': '${response}'}) )) Prediction( reasoning='根据提供的背景信息,首先需要梳理河南大学的发展脉络,从其创立到现代发展,按时间顺序进行清晰划分。河南大学起源于1912年,最初名为河南留学欧美预备学校,之后历经多个阶段,包括中州大学、国立开封中山大学、省立河南大学,1942年升格为国立河南大学。1952年院系调整后,校本部更名为河南师范学院,随后经历开封师范学院、河南师范大学等阶段,1984年恢复“河南大学”校名。2008年进入省部共建高校行列,2017年和2022年两次入选国家“双一流”建设高校。在这一过程中,学校始终秉持“明德新民,止于至善”的校训,形成了“团结、勤奋、严谨、朴实”的校风和“百折不挠、自强不息”的大学精神,培养了大量人才,为社会进步和文化传承作出贡献。随后,将这些发展历史按阶段进行分段介绍,使内容条理清晰、易于理解。', response='河南大学的发展历史可大致分为以下几个阶段:\n\n1. **创立与早期发展(1912年–1942年)** \n 河南大学创立于1912年,始名为“河南留学欧美预备学校”,首任校长为林伯襄先生。学校选址于河南贡院旧址,旨在培养赴欧美留学的人才。此后,学校历经中州大学、国立开封中山大学(又称国立第五中山大学)、省立河南大学等阶段,1942年正式升格为“国立河南大学”,标志着其在高等教育中的地位提升。\n\n2. **院系调整与转型(1952年–1984年)** \n 1952年,全国范围内开展院系调整,河南大学的部分院系被独立建校或并入其他高校,校本部因此更名为“河南师范学院”。此后,学校经历了“开封师范学院”“河南师范大学”等发展阶段,办学重点逐步转向师范教育。\n\n3. **恢复校名与现代发展(1984年至今)** \n 1984年,学校正式恢复“河南大学”校名,重新确立其综合性大学的定位。2008年10月,学校进入省部共建高校行列,办学层次和综合实力显著提升。2017年9月,学校入选首批国家“双一流”建设高校,2022年2月再次入选“双一流”建设高校,标志着其在国家高等教育体系中的重要地位。\n\n4. **精神与人才培养** \n 113年来,河南大学始终恪守“明德新民,止于至善”的校训,形成了“团结、勤奋、严谨、朴实”的校风和以“百折不挠、自强不息”为核心的大学精神。学校累计培养了70多万名各类人才,为教育振兴、科技创新、文化传承和社会进步作出了突出贡献。' ) {'prompt': None, 'messages': [{'role': 'system', 'content': 'Your input fields are:\n1. `context` (str): \n2. `question` (str):\nYour output fields are:\n1. `reasoning` (str): \n2. `response` (str):\nAll interactions will be structured in the following way, with the appropriate values filled in.\n\n[[ ## context ## ]]\n{context}\n\n[[ ## question ## ]]\n{question}\n\n[[ ## reasoning ## ]]\n{reasoning}\n\n[[ ## response ## ]]\n{response}\n\n[[ ## completed ## ]]\nIn adhering to this structure, your objective is: \n Given the fields `context`, `question`, produce the fields `response`.'}, {'role': 'user', 'content': '[[ ## context ## ]]\n河南大学创立于1912年,始名河南留学欧美预备学校,首任校长为林伯襄先生,校园选建于河南贡院 旧址之上。后历经中州大学 、 国立开封中山大学 ( 又称国立第五中山大学 )、省立河南大学 等阶段 ,1942年升格为国立河南大学 。 1952年院系调整 ,部分院系或独立建校或并入兄弟高校,校本部更名为河南师范学院 。后又经开封师范学院 、河南师范大学 等阶段,1984年恢复河南大学 校名。 2008年10月,学校进入省部共建高校行列。2017年9月,学校入选首批国家“双一流”建设高校。2022年2月,学校再次入选国家“双一流”建设高校。 113年来,学校恪守“明德新民,止于至善”的校训,形成“团结、勤奋、严谨、朴实”的校风和以“百折不挠、自强不息”为核心的大学精神,培养70多万名各类人才,为教育振兴、科技创新、文化传承、社会进步和人类文明作出突出贡献。\n\n[[ ## question ## ]]\n首先梳理河南大学的发展历史,然后分段简单介绍河南大学\n\nRespond with the corresponding output fields, starting with the field `[[ ## reasoning ## ]]`, then `[[ ## response ## ]]`, and then ending with the marker for `[[ ## completed ## ]]`.'}], 'kwargs': {}, 'response': ModelResponse(id='chatcmpl-aea5ab4ca72f448c928520461f661dc9', created=1769262917, model='llm-v1', object='chat.completion', system_fingerprint=None, choices=[Choices(finish_reason='stop', index=0, message=Message(content='[[ ## reasoning ## ]]\n根据提供的背景信息,首先需要梳理河南大学的发展脉络,从其创立到现代发展,按时间顺序进行清晰划分。河南大学起源于1912年,最初名为河南留学欧美预备学校,之后历经多个阶段,包括中州大学、国立开封中山大学、省立河南大学,1942年升格为国立河南大学。1952年院系调整后,校本部更名为河南师范学院,随后经历开封师范学院、河南师范大学等阶段,1984年恢复“河南大学”校名。2008年进入省部共建高校行列,2017年和2022年两次入选国家“双一流”建设高校。在这一过程中,学校始终秉持“明德新民,止于至善”的校训,形成了“团结、勤奋、严谨、朴实”的校风和“百折不挠、自强不息”的大学精神,培养了大量人才,为社会进步和文化传承作出贡献。随后,将这些发展历史按阶段进行分段介绍,使内容条理清晰、易于理解。\n\n[[ ## response ## ]]\n河南大学的发展历史可大致分为以下几个阶段:\n\n1. **创立与早期发展(1912年–1942年)** \n 河南大学创立于1912年,始名为“河南留学欧美预备学校”,首任校长为林伯襄先生。学校选址于河南贡院旧址,旨在培养赴欧美留学的人才。此后,学校历经中州大学、国立开封中山大学(又称国立第五中山大学)、省立河南大学等阶段,1942年正式升格为“国立河南大学”,标志着其在高等教育中的地位提升。\n\n2. **院系调整与转型(1952年–1984年)** \n 1952年,全国范围内开展院系调整,河南大学的部分院系被独立建校或并入其他高校,校本部因此更名为“河南师范学院”。此后,学校经历了“开封师范学院”“河南师范大学”等发展阶段,办学重点逐步转向师范教育。\n\n3. **恢复校名与现代发展(1984年至今)** \n 1984年,学校正式恢复“河南大学”校名,重新确立其综合性大学的定位。2008年10月,学校进入省部共建高校行列,办学层次和综合实力显著提升。2017年9月,学校入选首批国家“双一流”建设高校,2022年2月再次入选“双一流”建设高校,标志着其在国家高等教育体系中的重要地位。\n\n4. **精神与人才培养** \n 113年来,河南大学始终恪守“明德新民,止于至善”的校训,形成了“团结、勤奋、严谨、朴实”的校风和以“百折不挠、自强不息”为核心的大学精神。学校累计培养了70多万名各类人才,为教育振兴、科技创新、文化传承和社会进步作出了突出贡献。\n\n[[ ## completed ## ]]', role='assistant', tool_calls=None, function_call=None, provider_specific_fields={'refusal': None}), provider_specific_fields={'stop_reason': None, 'token_ids': None})], usage=Usage(completion_tokens=670, prompt_tokens=481, total_tokens=1151, completion_tokens_details=None, prompt_tokens_details=None), service_tier=None, prompt_logprobs=None, prompt_token_ids=None, kv_transfer_params=None), 'outputs': ['[[ ## reasoning ## ]]\n根据提供的背景信息,首先需要梳理河南大学的发展脉络,从其创立到现代发展,按时间顺序进行清晰划分。河南大学起源于1912年,最初名为河南留学欧美预备学校,之后历经多个阶段,包括中州大学、国立开封中山大学、省立河南大学,1942年升格为国立河南大学。1952年院系调整后,校本部更名为河南师范学院,随后经历开封师范学院、河南师范大学等阶段,1984年恢复“河南大学”校名。2008年进入省部共建高校行列,2017年和2022年两次入选国家“双一流”建设高校。在这一过程中,学校始终秉持“明德新民,止于至善”的校训,形成了“团结、勤奋、严谨、朴实”的校风和“百折不挠、自强不息”的大学精神,培养了大量人才,为社会进步和文化传承作出贡献。随后,将这些发展历史按阶段进行分段介绍,使内容条理清晰、易于理解。\n\n[[ ## response ## ]]\n河南大学的发展历史可大致分为以下几个阶段:\n\n1. **创立与早期发展(1912年–1942年)** \n 河南大学创立于1912年,始名为“河南留学欧美预备学校”,首任校长为林伯襄先生。学校选址于河南贡院旧址,旨在培养赴欧美留学的人才。此后,学校历经中州大学、国立开封中山大学(又称国立第五中山大学)、省立河南大学等阶段,1942年正式升格为“国立河南大学”,标志着其在高等教育中的地位提升。\n\n2. **院系调整与转型(1952年–1984年)** \n 1952年,全国范围内开展院系调整,河南大学的部分院系被独立建校或并入其他高校,校本部因此更名为“河南师范学院”。此后,学校经历了“开封师范学院”“河南师范大学”等发展阶段,办学重点逐步转向师范教育。\n\n3. **恢复校名与现代发展(1984年至今)** \n 1984年,学校正式恢复“河南大学”校名,重新确立其综合性大学的定位。2008年10月,学校进入省部共建高校行列,办学层次和综合实力显著提升。2017年9月,学校入选首批国家“双一流”建设高校,2022年2月再次入选“双一流”建设高校,标志着其在国家高等教育体系中的重要地位。\n\n4. **精神与人才培养** \n 113年来,河南大学始终恪守“明德新民,止于至善”的校训,形成了“团结、勤奋、严谨、朴实”的校风和以“百折不挠、自强不息”为核心的大学精神。学校累计培养了70多万名各类人才,为教育振兴、科技创新、文化传承和社会进步作出了突出贡献。\n\n[[ ## completed ## ]]'], 'usage': {'completion_tokens': 670, 'prompt_tokens': 481, 'total_tokens': 1151, 'completion_tokens_details': None, 'prompt_tokens_details': None}, 'cost': None, 'timestamp': '2026-01-24T21:55:29.805593', 'uuid': 'b2518834-7ea8-4c38-9638-383786c37c18', 'model': 'openai/llm-v1', 'response_model': 'llm-v1', 'model_type': 'chat'}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 13:25:47

BthPS3开源驱动完整指南:让PS3手柄在Windows平台焕发新生

BthPS3开源驱动完整指南:让PS3手柄在Windows平台焕发新生 【免费下载链接】BthPS3 Windows kernel-mode Bluetooth Profile & Filter Drivers for PS3 peripherals 项目地址: https://gitcode.com/gh_mirrors/bt/BthPS3 本文将详细介绍BthPS3开源驱动如何…

作者头像 李华
网站建设 2026/4/25 7:31:06

3大核心优势+4步实战:FungalTraits驱动的微生物功能筛选全攻略

3大核心优势4步实战:FungalTraits驱动的微生物功能筛选全攻略 【免费下载链接】microeco An R package for data analysis in microbial community ecology 项目地址: https://gitcode.com/gh_mirrors/mi/microeco 微生物功能筛选的核心价值:从数…

作者头像 李华
网站建设 2026/4/27 21:33:21

百度网盘macOS下载速度优化技术研究与实践指南

百度网盘macOS下载速度优化技术研究与实践指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 一、用户痛点分析:下载速度限制的技术成因 …

作者头像 李华
网站建设 2026/4/27 21:33:50

Z-Image-Turbo中文支持增强:字体与编码配置部署实战案例

Z-Image-Turbo中文支持增强:字体与编码配置部署实战案例 1. 中文乱码问题的直观体现:从UI界面说起 当你第一次启动Z-Image-Turbo并打开浏览器访问http://localhost:7860时,最可能遇到的不是模型不工作,而是界面上一堆方块、问号…

作者头像 李华
网站建设 2026/4/27 9:33:41

PsychoPy:面向心理学研究者的实验设计与数据采集完整解决方案

PsychoPy:面向心理学研究者的实验设计与数据采集完整解决方案 【免费下载链接】psychopy For running psychology and neuroscience experiments 项目地址: https://gitcode.com/gh_mirrors/ps/psychopy 作为一款专为心理学和神经科学研究打造的开源工具&…

作者头像 李华
网站建设 2026/4/27 11:05:54

Qwen-Image-2512部署后无响应?进程监控与日志分析实战指南

Qwen-Image-2512部署后无响应?进程监控与日志分析实战指南 1. 问题场景还原:你以为点开就能出图,结果页面一直转圈? 你兴冲冲地在算力平台部署了 Qwen-Image-2512-ComfyUI 镜像,4090D单卡也稳稳当当,双击…

作者头像 李华