Created
Aug 14, 2024 01:47 PM
Favorite
Favorite
Priority
备注
推荐
🌟🌟🌟🌟🌟
类型
DSPy
点击上方蓝字关注我
本文:3800字 阅读10分钟
Langchain与DSPy结合,用处会非常强大。本文将探索如何将两者巧妙结合,构建一个高效、灵活的故事生成项目,本文的生成代码略加修改,也可作为情感分析、问答系统、事实核查、自动摘要、客户服务自动回复、多语言翻译等核心代码。
近日有读者询问DSPy的使用,是不是只能解决多跳问题,或许你应该这样理解:DSPy是一个机器学习的框架,抽象了一些类,在不用手写Prmopt的情况下,能根据示例直接生成内容(答案),而且准确率和能够处理的问题的复杂度比手写的Prompt运行能力要高,但缺点是没有Langchain灵活。Langchain大家很熟悉,是一个专为构建LLM应用而设计的强大库。它提供了灵活的提示模板、多样的数据格式支持、丰富的语言模型集成选项等,使开发者能够快速搭建和迭代基于语言模型的应用。
notion image
图片由DallE生成
本文的文本生成代码略加修改(dspy.signature),也可作为新闻分类、情感分析、问答系统、事实核查、自动摘要、客户服务自动回复、以及多语言翻译等核心代码。希望这篇文章能为Prompt Engineer提供新的思路和实践参考。这个项目也可以作为一个文本生成框架,不仅能够生成创意文章,还可以将训练的弱智吧数据替换为你希望训练的文章数据,短视频文案模板、广告模板等等。
这个创新项目,主要利用中文弱智吧数据集BootstrapFewShot后进行compile,从而构建一个高效、灵活的创意文章生成系统,并输出优化的Prompt。通过对项目关键组件和工作流程的剖析,我们将理解这种独特组合背后的技术原理,以及它在生成高质量、个性化文章等多方面应用的巨大潜力。
本项目的主要功能和工作流程如下:
1.定义库和类:首先要从Langchain中导入PromptTemplate,这个提示模板允许你定义一个格式化字符串,其中包含占位符,用于插入动态变量。这对于生成具有一致结构的提示非常有用。还要从Langchain中导入 `JsonOutputParser` 用于解析生成的 JSON 输出。它确保生成的文本符合预期的 JSON 格式,并将其解析为 Python 对象。最关键的是要定义一个生成故事的数据模型Pydantic,确保生成的数据结构一致,并便于验证和解析。同时要初始化Openai的客户端,你如果认真读过DSPy的Guide就应该知道,DSPy支持的LLM很少,上次有读者问我为什么不用国内的模型,我也想用,直到这个Deepseek提供了Openai的接口出现。
2.数据集加载:从ruozhi.json文件中加载弱智吧数据集,并将其转化为DSPy的Example对象。(这个数据是随机挑选的4条,也可以都跑一遍,但没有必要)
3.故事生成签名定义:使用DSPy的Signature类定义StoryGenerationSignature,明确故事生成函数的输入(prompt)和输出(story)。
4.提示模板定义:使用Langchain的PromptTemplate定义提示模板,指定输入变量和输出格式。
5.故事生成函数实现:定义generate_story_deepseek函数,接受提示作为输入,调用deepseek-chat模型生成符合要求的故事,并进行解析和验证。
6.故事生成模块封装:使用DSPy的Module类封装StoryGenerator模块,定义故事生成的输入和输出。
7.Few-shot学习:将弱智吧数据集转化为DSPy的Example对象,并使用BootstrapFewShot进行少样本学习,生成训练集。
8.故事生成模块编译:使用BootstrapFewShot的compile方法,将StoryGenerator模块与训练集进行编译,得到完整的故事生成器。你也可以用 Mipro 优化器,对整个数据集进行训练,它为流程的每个步骤创建指令和示例,并采用贝叶斯优化来更有效地导航解决方案空间。
9.测试与评估:使用测试提示调用编译后的故事生成器,生成创意故事,并使用answer_exact_match进行评估,注意这里的Metric是我自己定义的。
最后打印出优化过的Prompt,通过这个项目,我们展示了如何将Langchain和DSPy无缝结合,利用deepseek-chat模型对中文弱智吧数据集进行提示优化,构建一个强大的创意文章生成系统。
关于DSPy您也可以看下这些文章
notion image
notion image
notion image
本文这些代码示例展示了一种方法和将两种技术结合的可能,你也可代码补全,试着生成其余部分。这种方法充分利用了Langchain的提示模板功能、DSPy的数据处理和模块化能力,以及弱智吧数据集的丰富语料,实现了创意文章的生成。这里并没有对最终生成的文章调优,只是将代码跑通,建立一个可以数据调优的代码框架。图中有一些运行错误,但不影响整个程序的运行。建议你最好部署本地模型再运行代码,这是上篇文章和这篇文章燃烧(代码迭代)的Token,代码跑通花费约15万。
notion image
notion image
你还可以根据我的这段代码进行修改,我在群里为你准备了上面这段优化过的Python代码截图,你可以和我一样部署到Docker里,在浏览器上通过Jupyter运行,我会给你安装的Dockerfile 文件。另外,群里为你准备了开群以来大量的Prompt模板、模块和一些代码文件完整示例,等你来一起讨论!另外,如果你有更多关于论文里Prompt的问题也可以到群里来,我会耐心解答你的问题。
notion image
<本文完结>
转载请与本喵联系,私自抓取转载将被起诉AI已成为我洞察世界并输出想法的工具本地部署LLM成为你自己AI资源的掌控者
notion image
这份指南还包含8500条复杂Prompt,以及管理工具和方法(包含system提示词)
notion image
关于Prompt,这本手册,是你和我沟通的桥梁
notion image
🎉让我们一起创造更多美好!🎉
如果您觉得这篇文章对您有帮助或启发感谢您为我【点赞】【在看】
<您为我点赞在看,只有我能看到>
👉微信号:xiumaoprompt加我微信之前,请务必先点赞或在看这样我才能更快地识别并回应您
notion image
Loading...