深入理解Prompt Engineering:Transformers与OpenAI的实践启示

我最近完成了吴恩达的《ChatGPT提示工程师》课程的学习。这门课程如何通过精心设计的提示来引导模型生成我们想要的输出。然而,我必须承认,尽管这门课程的内容丰富且深入,但我在完成课程后并没有获得让我从提示词,上升到"工程化"的理解。

在我看来,这门课程的内容和我之前使用OpenAI API的经验相差无几。我之前已经熟悉了如何使用API,如何发送请求,以及如何处理返回的结果。我也已经理解了如何通过调整一些参数,如temperature和tokens,来影响模型的输出。但是对于prompt是打开大模型这座金矿的钥匙,课程里的prompt 设计技巧,没什么感觉....

带着这些迷茫,我投入了AI绘画炼丹,更细致的prompt,绘画专用提示词,让我感受到了prompt的效果。但是对于不搞设计的我,在绘画领域投入太多时间练习prompt工程,不会是好的方向,提示词工程的学习肯定也深入不了...

我怎么掌握提示词工程这门AI显学呢?从哪个实战项目入手呢?最近我在玩Transformers 和 OpenAI的时候,好像有了点感悟。

何为Transformers?

Transformers是由Hugging Face公司开发的一个开源库,专门用于自然语言处理(NLP)任务。它提供了大量预训练的模型和分词器,可以用于各种NLP任务,如文本分类、命名实体识别、情感分析、文本生成等。在我的上一篇文章AIGC前端工程师的Transformers 入门(一):pipeline - 掘金 (juejin.cn)中有一些demo, 建议大家也玩起来。

Transformers和OpenAI的对比

OpenAI和Transformers都是我在探索人工智能和自然语言处理(NLP)领域的重要工具。OpenAI让我感受到了人工智能生成内容(AIGC)的力量。通过使用OpenAI,我可以生成各种各样的文本,从简单的句子到复杂的文章,甚至是编程代码。这种能力让我深感震撼,也让我对人工智能的未来充满了期待。

与此同时,Transformers库让我深入了解了机器学习和NLP的底层原理。Transformers提供了大量的预训练模型,如BERT、GPT-2、RoBERTa等,这些模型在各种NLP任务上都表现出色。通过学习和使用这些模型,我对深度学习的工作原理有了更深的理解。我了解到,这些模型的强大性能并不是偶然的,而是建立在大量的数据和精心设计的架构之上。

OpenAI和Transformers的结合,让我既能感受到人工智能的魅力,也能理解其背后的科学原理。这种结合让我对AIGC的学习充满了信心,同时又可以快速开展业务。

于是我有了个想法,同类型的任务,分别用transformers 和 OpenAI,各自怎么做?

NLP任务

以下是Transformers情感分析的demo

python 复制代码
!pip install transformers # 安装huggingface开源的 transformers库 

from transformers import pipeline # pipeline是 transfromers的模块,专业安排各种NLP。 

classifier = pipeline('sentiment-analysis') #安排了情感分析任务 

result = classifier('I love you')[0] #返回情感分析结果

print(f"label: {result['label']}, with score: {round(result['score'], 4)}")

输出结果为 label: POSITIVE, with score: 0.9999 0.9999

当时学完这个NLP任务的例子后,感觉自己可以从WEB开发,走向AI功能的开发了,transformers真的简单,好用!

没想到,当我看到OpenAI的文本分析Demo后,惊喜连连....

python 复制代码
import openai

openai.api_key = "你自己的"

COMPLETION_MODEL = "text-davinci-003" #文本模型

def get_response(prompt, temperature = 1.0): 
    completions = openai.Completion.create( 
        engine=COMPLETION_MODEL, 
        prompt=prompt, 
        max_tokens=1024,
        n=1, 
        stop=None, 
        temperature=temperature, 
    ) 
    message = completions.choices[0].text 
    return message
    
 
prompts = """判断一下用户的评论情感上是正面的还是负面的
评论:买的银色版真的很好看,一天就到了,晚上就开始拿起来完系统很丝滑流畅,
做工扎实,手感细腻,很精致哦苹果一如既往的好品质

情感:正面
评论:随意降价,不予价保,服务态度差
情感:负面"""

good_case = prompts + """评论:外形外观:苹果审美一直很好,
金色非常漂亮拍照效果:14pro升级的4800万像素真的是没的说,太
好了,运行速度:苹果的反应速度好,用上三五年也不会卡顿的,
之前的7P用到现在也不卡其他特色:14pro的磨砂金真的太好看了,
不太高调,也不至于没有特点,非常耐看,很好的
情感:"""

print(get_response(good_case))
结果是正面

原来,之前在刷《提示词工程师》这门课时,内容主要以语法介绍为主,知识点为要。要感受提示词的强大power, 得来到更具体的项目实战中。

相比于transformers, openai 完成文本分类的NLP任务,不是很像low code或无代码编程吗?

在上面的这个例子中,首先使用了few Shots Learning(少样本学习)的概念,构建了样本和文本分类的上下文,接着再把要处理的分类任务,设计到Completion这个接口中....

woo, 瞬间,醍醐灌顶,这就是prompt engineering。

之前,transformers虽然很方便的用pipeline就解决了情感分析这样的NLP任务,但是OpenAI 使用prompt 就轻松搞定了NLP任务, 我们可以从低代码,无代码这个角度去思考 Prompt 设计,我只需要把之前在低代码学习中的感受迁移到prompt 这边来, 完美。

我想,我终于找到了prompt 的训练方案

prompt训练方案

  • 结合项目NLP任务实战,从原来的代码思维转向无代码思维,武器是prompt

比如以下的客服DEMO, 自然语言比代码更好用,这里的语言就是prompt....

js 复制代码
import openai
import os

openai.api_key = os.environ.get("OPENAI_API_KEY")
COMPLETION_MODEL = "text-davinci-003"

prompt = '请你用朋友的语气回复给到客户,并称他为"亲",他的订单
已经发货在路上了,预计在3天之内会送达,订单号2021AEDG,
我们很抱歉因为天气的原因物流时间比原来长,感谢他选购我们的商品。'

def get_response(prompt, temperature = 1.0):
    completions = openai.Completion.create (
        engine=COMPLETION_MODEL,
        prompt=prompt,
        max_tokens=1024,
        n=1,
        stop=None,
        temperature=temperature,
    )
    message = completions.choices[0].text
    return message
    
  • 在传统的开发流程中加入prompt过程

    我想当我接触了更多的prompt 业务后,它将进入我的开发流程。

    它会和设计数据表一样重要, 我每天的开发工作中会拿出一定的时间来设计prompt,把开发中的一部分任务交给它....

备注:

以上例子分别来自 transformers-code/01-Getting Started/02-pipeline/pipeline.ipynb at master · zyds/transformers-code (github.com)

徐文浩老师的AI大模型之美, 为避开广告之嫌疑, 就不给链接了....

让我们一起, 走向prompt engineering 的修炼之路....

我相信不久,提示词工程将成为我项目工程的核心部分,那么我的AI应用开发之路就正式开始了,期待,加油!

相关推荐
DisonTangor2 小时前
释放高级功能:Nexusflows Athene-V2-Agent在工具使用和代理用例方面超越 GPT-4o
人工智能·aigc
OptimaAI19 小时前
【 LLM论文日更|检索增强:大型语言模型是强大的零样本检索器 】
人工智能·深度学习·语言模型·自然语言处理·nlp
技术仔QAQ21 小时前
【tokenization分词】WordPiece, Byte-Pair Encoding(BPE), Byte-level BPE(BBPE)的原理和代码
人工智能·python·gpt·语言模型·自然语言处理·开源·nlp
道一云黑板报1 天前
前端搭建低代码平台,微前端如何选型?
低代码·arcgis·iframe·微前端·无界·fronts
Baihai_IDP1 天前
「混合专家模型」可视化指南:A Visual Guide to MoE
人工智能·llm·aigc
_xaboy1 天前
开源项目低代码表单设计器FcDesigner扩展自定义的容器组件.例如col
vue.js·低代码·开源·动态表单·formcreate·低代码表单·可视化表单设计器
_xaboy1 天前
开源项目低代码表单设计器FcDesigner扩展自定义组件
vue.js·低代码·开源·动态表单·formcreate·可视化表单设计器
低代码布道师1 天前
微搭低代码私有化部署搭建教程
低代码
Light601 天前
低代码牵手 AI 接口:开启智能化开发新征程
人工智能·python·深度学习·低代码·链表·线性回归
低代码布道师1 天前
微搭低代码入门03函数
低代码