我最近完成了吴恩达的《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,把开发中的一部分任务交给它....
备注:
徐文浩老师的AI大模型之美, 为避开广告之嫌疑, 就不给链接了....
让我们一起, 走向prompt engineering 的修炼之路....
我相信不久,提示词工程将成为我项目工程的核心部分,那么我的AI应用开发之路就正式开始了,期待,加油!