Prompt 工程已经不中用了,没有人愿意废那么大的劲来学习如何结构化提问,大家想要的就是傻瓜式提问,但是大模型的回答还是精准的、合意的;
后来,大兴 RAG 技术,做专业化的本地知识库,但是这个本地库的成本只能说是更高,如果有专业的库直接来用还行,要不然自建库、清洗数据等等,费了九牛二虎之力,那还要大模型啥事?
所以有人才说2023年大模型百模大战是原子弹,2024年大模型真的就让人一度怀疑,这不就是个茶叶蛋?
看到最近新闻说:研发出著名的Stable Diffusion模型,估值近300亿美元的明星企业Stability AI,资金链竟然要断裂了?!Crazy…
其实,大家的诉求很简单,就是“怎么简单方便怎么来”,不要 Prompt 工程、不要 RAG 本地库,只要我问了,你就直接给到我想要的答案,不能出现车轱辘话!
所以,本篇要提的新技术—— DSPy , 它来了!
编程式提问
先问一句:你觉得截止目前,谁是大模型最大的受益者?
除了炒作的、卖课的,或许目前真正能从大模型技术中获益的,莫过于程序员群体了。很多程序员都不同程度的利用上了大模型来辅助编程,大模型在编程方面表现往往比其他专业领域都好的多得多。
这是为什么?
因为 LLMs 对 prompts 的方式很敏感,它不喜欢提示词,它就喜欢编程,或者说是它更擅长编程!
DSPy,就是让提示词 Prompt 变成编程语言的一个框架。
一句话定性:它是一个旨在通过优先编程而不是 prompt 来解决基于语言模型(LM)的应用程序中的脆弱性问题的框架。
DSPy 展开是:“D declarative S self - improved Language P programs (in Python)”,读“迪斯屁儿”,它强调编程而不是提示,使构建基于 LM 的管道远离操作提示而更接近编程。
DSPy VS LangChain
一波未平、一波又起,LangChain 还没学明白,这个“屁儿”怎么又来了?区别在哪?
说白了 LangChain 的 RAG 技术是让提示词更详细、丰富,形成一个标准的提问模板,而 DSPy 则是原理提示模板,从编程的角度去跟大模型交流。
DSPy 引入编译器,更改基于 LLM 的应用程序(如 LLM 或数据)时,消除额外的 prompt 工程 或 fine-tuning 微调;发人员可以简单地重新编译程序来优化 pipelines(模型的组件构成流程) 以适应新添加的更改。
具体它是怎么做的呢?
签名
在 DSPy 程序中,每次调用语言模型时,都必须采用自然语言签名(signature),而不是传统的手写提示。
签名是一个简短的函数,用来明确说明转换的目标,而不是指导 LM 的提示方式,和我们以往命令大模型 “利用XXX回答XXX问题” 不一样。
签名包含 LLM 要解决的子任务的最小描述,输入字段的描述、输出字段的描述;结构一般类似这样:
class GenerateAnswer(dspy.Signature):
"""Answer questions with short factoid answers."""
context = dspy.InputField(desc="may contain relevant facts")
question = dspy.InputField()
answer = dspy.OutputField(desc="often between 1 and 5 words")
与常规提示语相比,签名可以通过引导示例编译成自完善和自适应管道的 prompt 或 fine-tune。
模块
有过提示经验的同学知道我们往往会引导大模型的回答,比如说:你要用 XXX 风格回答 XXX,你是 XXX 角色有 XXX 经验,不要回答 XXX …
在 DSPy 中,则通过模板化和参数化来抽象这些提示技术;通过应用提示、微调、增强和推理技术,使 DSPy 签名适应特定任务。
# Option 1 : Pass minimal signature to ChainOfThought module
generate_answer = dspy.ChainOfThought("context, question -> answer")
# Option 2 : Or pass full notation signature to ChainOfThought module
generate_answer = dspy.ChainOfThought(GenerateAnswer)
# Call the module on a particular input.
pred = generate_answer(context = "Which meant learning Lisp, since in those days Lisp was regarded as the language of AI.",
question = "What programming language did the author learn in college?")
从以上代码看,DSPy 签名传递给ChainOfThought
模块,然后使用输入字段 context
和 question
的值进行调用。
DSPy 内置如下几个模块,分别有不同的作用:
- dspy.Predict :基本预测变量
- dspy.ChainOfThought:教LM在对Signatures响应之前逐步思考
- dspy.ProgramOfThought:教LM 输出代码
- dspy.ReAct:能够实现某个Signatures功能的代理(利用工具)
- dspy.MultiChainComparison:可以比较多个 ChainOfThought 输出以产生最终预测
模块的优势在于它灵活的集成在管道之中,是参数化的,包括提示细节等,模块根据签名处理输入,返回输出。
提词器
DSPy 还有另一个武器,就是 Teleprompters 提词器。提词器使用特定度量,与编译器协同工作,学习和引导有效提示,从而优化 DSPy 程序的各个模块。
DSPy 内置5个提词器:
- dspy.LabeledFewShot
- dspy.BootstrapFewShot
- dspy.BootstrapFewShotWithRandomSearch
- dspy.BootstrapFinetune
- dspy.Ensemble
不同的提词器在优化成本和质量等方面提供了不同的平衡。
小结
以上对 DSPy 有了一个基本的认识:它把传统的提示词工程通过一些语法糖进行了优雅的封装。
它可以解决基于语言模型的应用程序脆弱性问题的框架;优先考虑编程而不是提示,允许重新编译整个流水线以优化任务。
实现原理是前文提到的:引入了签名、模块和提词器等概念来抽象提示和微调;编译器可以自动优化程序,根据任务需求生成高质量的提示。
如果感兴趣的同学可以点点关注,后续继续了解 DSPy 的 RAG 管道示例实践。
参考
如何学习大模型
现在社会上大模型越来越普及了,已经有很多人都想往这里面扎,但是却找不到适合的方法去学习。
作为一名资深码农,初入大模型时也吃了很多亏,踩了无数坑。现在我想把我的经验和知识分享给你们,帮助你们学习AI大模型,能够解决你们学习中的困难。
我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。
![](https://img-blog.csdnimg.cn/img_convert/7fd5e8598256b103282f8fd14941d693.png)
一、AGI大模型系统学习路线
很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。
二、AI大模型视频教程
三、AI大模型各大学习书籍
四、AI大模型各大场景实战案例
五、结束语
学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。
再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。
因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。