网易首页 > 网易号 > 正文 申请入驻

DSPy 3.4.0:把提示词从源代码变成构建产物

0
分享至

  每个上线的LLM功能最后都会撞上同一堵墙。一开始它只是Python文件里的一行提示词字符串,然后长出系统消息、三个示例、一段对付JSON偶尔被markdown包住的格式化补丁,最后留下一行注释:# 不要动——2026-08-14调过。没人能测它,没人能diff它,模型厂商一发更新,它就悄悄退化。

  DSPy——来自斯坦福NLP的框架,MIT许可,当前版本3.4.0——从根上拆这堵墙。你不再写提示词,而是写程序:用带类型的签名声明输入输出,用模块组合推理策略,再用优化器针对你定义的指标把整个东西编译一遍,就像编译器针对目标架构优化代码。提示词变成了构建产物,不再是源代码。

  

  一条端到端的回路

  本教程要构建的正是这样一条回路:一个客服工单分诊程序,预测紧急程度和负责团队。用签名定义它,用dspy.Evaluate测出真实基线,用BootstrapFewShot编译它,观察准确率从55.6%走到88.9%,最后把优化后的程序存成文件发出去。下面的一切都实际执行过——包括失败模式——整条流水线免费、离线,跑在一个确定性的沙盒模型上,零API开销就能复现每一个数字。

  配图:你将构建的DSPy回路——写程序、测量、编译。

  需要准备什么

  Python 3.10+ 和 pip。CPU就够,这里不需要GPU。

  DSPy 3.4.0:pip install dspy,然后用 python -c "import dspy; print(dspy.__version__)" 确认,应该输出3.4.0。

  主流水线不需要API密钥:它跑在SandboxLM上,一个下文给出的小型确定性模拟器,用来顶替真实模型。它从提示词里读取少样本示例,读不到就退回一个弱关键词启发式——故意做得平庸,就像一个真实的零样本基线。

  可选,想接真实模型时:任意模型API密钥(OpenAI、Anthropic或本地Ollama服务),一行代码就能在第一步把沙盒换成真实模型。

  第一步:安装与配置

  先安装并验证版本:

  pip install dspy
python -c "import dspy; print(dspy.__version__)" # 3.4.0

  每个DSPy程序都从告诉框架用哪个语言模型开始,通过dspy.configure完成。接真实服务商时,dspy.LM接受任何LiteLLM风格的模型字符串,密钥从环境变量读取:

  import dspy
# 真实模型路线(需要环境里有OPENAI_API_KEY):
# dspy.configure(lm=dspy.LM("openai/gpt-4o-mini"))
# 本地路线(需要Ollama在运行):dspy.LM("ollama/llama3.1", api_base="http://localhost:11434")

  本教程里配置的是沙盒。把下面这段存成sandbox_lm.py:它继承DSPy的DummyLM(来自dspy.utils.dummies),并重写_use_example钩子——这是DSPy 3.4的dummy引擎实际调用的扩展点。给定一个查询,它会找出输入内容词重叠最多的那个少样本示例,复制该示例的输出;没有重叠示例时,退回弱启发式:

  """Deterministic stand-in for a real LM. Reads few-shot demos from its prompt."""
import re
import dspy
from dspy.utils.dummies import DummyLM
HDR = re.compile(r"\[\[ ## (\w+) ## \]\]")
STOP = set("""a an the and or of to in on for with is are was were be been
it its this that these those i my we you your he she they them his her our
at as by from have has had do does did will would can could should there
their what when where which who how why not no yes if then than so such
very just about into over after before between me us him her them""".split())
def _split_fields(text):
parts = HDR.split(text)
return [(parts[i], parts[i + 1].strip())
for i in range(1, len(parts) - 1, 2)]
def _tokens(text):
return [t for t in re.findall(r"[a-z0-9]+", text.lower()) if t not in STOP]
def _heuristic(ticket):
t = ticket.lower()
if any(w in t for w in ["invoice", "charge", "charged", "billing",
"refund", "payment", "subscription", "receipt"]):
team = "billing"
elif any(w in t for w in ["package", "tracking", "delivery", "shipment",
"arrived", "parcel", "shipping"]):
team = "shipping"
else:
team = "technical"
urgency = ("high" if any(w in t for w in ["urgent", "immediately", "asap",
"locked", "down", "breach", "twice", "double", "angry",
"cancel", "fraud", "lost"]) else "low")
return {"urgency": urgency, "team": team}
class SandboxLM(DummyLM):
def __init__(self):
super().__init__([], follow_examples=True)
def _use_example(self, messages):
users = [m["content"] for m in messages if m["role"] == "user"]
assistants = [m["content"] for m in messages if m["role"] == "assistant"]
input_names = {n for n, _ in _split_fields(users[0])}
last = users[-1]
out_names = [n for n, _ in _split_fields(last) if n not in input_names]
query = " ".join(v for n, v in _split_fields(last) if n in input_names)
qtok = set(_tokens(query))
demos, ai = [], 0
for u in users[:-1]:
a = assistants[ai]; ai += 1
outs = {n: v for n, v in _split_fields(a) if n in out_names}
if outs:
demos.append((" ".join(v for n, v in _split_fields(u)
if n in input_names), outs))
best, best_score = None, 0
for dtext, outs in demos:
score = len(qtok & set(_tokens(dtext)))
if score > best_score:
best, best_score = outs, score
if best is not None and best_score >= 2:
values = {n: best.get(n, "") for n in out_names}
else:
h = _heuristic(query)
values = {n: h.get(n, "Reading the ticket and the closest examples.")
if n in h or n in ("reasoning", "rationale") else ""
for n in out_names}
return self._format_answer_fields(values)

  然后配置它:

  from sandbox_lm import SandboxLM
dspy.configure(lm=SandboxLM())

  有一点要说清楚:这个模拟器不是LLM。它只模拟真实模型的一个属性——从上下文示例中做少样本学习——好让优化回路的行为和面对真实模型时一致,下文每一次测量都(原文在此处截断)

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
把她送回哈马斯:利库德党候选人邦泽尔斥责攻击以色列士兵的人质

把她送回哈马斯:利库德党候选人邦泽尔斥责攻击以色列士兵的人质

老王说正义
2026-09-30 01:15:45
拔出萝卜带出泥!北京理工大学发布通告,3个决定!裴某彻底完了

拔出萝卜带出泥!北京理工大学发布通告,3个决定!裴某彻底完了

小鋭有话说
2026-09-29 23:15:33
突然,加息25个基点!这国央行,刚刚宣布!美联储,传出大消息

突然,加息25个基点!这国央行,刚刚宣布!美联储,传出大消息

证券时报
2026-09-29 21:22:04
中央定调!延迟退休实施,提前退或延迟退休1年,养老金差多少?

中央定调!延迟退休实施,提前退或延迟退休1年,养老金差多少?

虎哥闲聊
2026-09-29 21:02:09
中国专家早预言!美国必打伊朗,原因不止石油,下一目标也已锁定

中国专家早预言!美国必打伊朗,原因不止石油,下一目标也已锁定

蜉蝣说
2026-09-29 11:21:28
医生强烈提醒:明年开始,70岁以上长者请提前做好这3项生活准备

医生强烈提醒:明年开始,70岁以上长者请提前做好这3项生活准备

周哥一影视
2026-09-30 05:10:04
北理工裴轶事件大结局:清华教授站台也没用!学校通报字字诛心

北理工裴轶事件大结局:清华教授站台也没用!学校通报字字诛心

老赵闲聊社会
2026-09-30 00:00:05
“你不丑!”网约车内一幕感动百万网友:陪着一起流泪!

“你不丑!”网约车内一幕感动百万网友:陪着一起流泪!

环球网资讯
2026-09-30 08:51:11
中秋晚会主持翻车现场!全程躲避镜头:观众瞬间出戏,是字幕机安装错了?

中秋晚会主持翻车现场!全程躲避镜头:观众瞬间出戏,是字幕机安装错了?

乡野小珥
2026-09-29 10:30:54
炸裂!未婚夫发文感谢鸟哥,这样的女孩不娶也罢,网友:及时排雷

炸裂!未婚夫发文感谢鸟哥,这样的女孩不娶也罢,网友:及时排雷

风起见你
2026-09-25 01:57:26
27年前火遍上海的品牌,回归了!首店大排百米长队

27年前火遍上海的品牌,回归了!首店大排百米长队

看看新闻Knews
2026-09-29 10:22:33
提醒|天津毛毛虫泛滥成灾!小区、街头、学校已大范围出现!网友:比云南虫谷还厉害…

提醒|天津毛毛虫泛滥成灾!小区、街头、学校已大范围出现!网友:比云南虫谷还厉害…

天津人
2026-09-29 21:11:33
隐匿在大陆的“台独”媒体人狂言:两岸开战炸港口,就能锁死大陆

隐匿在大陆的“台独”媒体人狂言:两岸开战炸港口,就能锁死大陆

甜心猫独宠
2026-09-29 04:06:53
主办方回应歌手侯浪救场2小时演唱近20首歌曲或涉版权问题:已注意到网友讨论

主办方回应歌手侯浪救场2小时演唱近20首歌曲或涉版权问题:已注意到网友讨论

新浪财经
2026-09-29 20:44:51
日媒称白宫沉默令人不安! 中国在联合国展开攻势: 日本已进退失据

日媒称白宫沉默令人不安! 中国在联合国展开攻势: 日本已进退失据

趣文说娱
2026-09-30 03:05:31
年轻气盛,76人队的VJ毫不畏惧地向勒布朗·詹姆斯发出指令

年轻气盛,76人队的VJ毫不畏惧地向勒布朗·詹姆斯发出指令

好火子
2026-09-30 05:02:58
中日关系迎来变局,安倍心腹出山,68岁高龄,对高市早苗火力全开

中日关系迎来变局,安倍心腹出山,68岁高龄,对高市早苗火力全开

点燃好奇心
2026-09-29 20:46:26
某国防军工单位临时聘用人员张某,为在亲友面前“有面子”,偷拍正在研发的新型军事装备,发到家庭聊天群中,造成严重失泄密,获刑5年

某国防军工单位临时聘用人员张某,为在亲友面前“有面子”,偷拍正在研发的新型军事装备,发到家庭聊天群中,造成严重失泄密,获刑5年

政知新媒体
2026-09-28 09:50:34
亚洲赌王谢志乐:人称谢三哥,年入700亿美元,澳门赌场一夜输4亿

亚洲赌王谢志乐:人称谢三哥,年入700亿美元,澳门赌场一夜输4亿

疯狂的小历史
2026-09-28 10:42:13
李亚鹏首回应息影原因:“《笑傲江湖》走红后决定,巨大的获得并没有付出那么多”

李亚鹏首回应息影原因:“《笑傲江湖》走红后决定,巨大的获得并没有付出那么多”

娱乐嗑学家.
2026-09-29 20:00:09
2026-09-30 09:20:49
摸鱼算法
摸鱼算法
致力于用最前沿的AI技术,换取更多发呆时间的三十岁青年。
194文章数 71关注度
往期回顾 全部

科技要闻

82亿美元收购!李飞飞将与苏姿丰并肩做AI

头条要闻

牛弹琴:全部美军灰溜溜走了 伊拉克举国兴奋放假4天

头条要闻

牛弹琴:全部美军灰溜溜走了 伊拉克举国兴奋放假4天

体育要闻

石雨豪:亚运金牌与背后的十年

娱乐要闻

赌王四房婚礼,何超琼带三房成员现身

财经要闻

中央财政首次贴息房贷 定向支持首套刚需

汽车要闻

搭华为乾崑ADS 5/设计风格换新 2027款纵横G700售30.49万起

态度原创

艺术
家居
健康
亲子
游戏

艺术要闻

齐白石:没见过的东西,我绝不画!一句话,道出大师封神的秘密!

家居要闻

2026建博会(广州) 公装联探展交流活动

洗脸越勤,痘痘反而越多?

亲子要闻

踮着脚,嘴里含着奶嘴,把花瓶好好的抱住。责任心这块,能成大事

盘点三角洲行动这个赛季让我很闹心的事,估计不少玩家跟我一样的

无障碍浏览 进入关怀版