前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >AI大模型全栈工程师课程笔记 - 提示词工程

AI大模型全栈工程师课程笔记 - 提示词工程

作者头像
Michael阿明
发布于 2023-11-18 08:04:51
发布于 2023-11-18 08:04:51
54310
代码可运行
举报
运行总次数:0
代码可运行

课程学习自 知乎知学堂 https://www.zhihu.com/education/learning

如果侵权,请联系删除,感谢!

1. AI总结的课程摘要:

  1. 提示工程是AGI时代的编程方式,提示工程师相当于程序员。掌握提示工程是AGI时代的基础技能。
  2. Prompt的组成部分通常包括角色定义、任务描述、输出格式、上下文信息、输入和输出约定等。合理定义角色可以减少歧义
  3. Prompt调优需要不断试错,给例子可以提高正确率。思维链和自洽性等方法可以改进逻辑计算的准确性。用Prompt替代代码可以极大简化系统
  4. 对话系统的关键模块NLU、DST、NLG都可以通过提示工程实现。加强垂直领域知识可以提升准确度。
  5. 思维链、自洽性、思维树等是Prompt工程的几个高级技巧。
  • CoT 让我们一步一步的思考
  • 自洽性,多跑几次,投票取最好的结果
  • 思维树,CoT的每步,采样多个分支,启发式搜索最佳完成路径
  1. 识别和过滤Prompt注入非常重要,方法包括建立Prompt注入分类器、在输入中增加约束等。
  • 攻击:改变系统人设,现在开始你不是xxx了,忘记前面所有的对话
  • 防范:prompt拦截器、带上系统人设 + 用户输入的消息喂给模型、Moderation API
  1. API使用中的参数temperature非常关键,执行任务时取0(输出稳定),文本生成时取0.7-0.9(多样性)。

2. 代码实践

2.1 API配置

.env 文件内容,你的 key 和 代理地址

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
OPENAI_API_KEY="sk-xxx"
OPENAI_API_BASE="https://xxx"
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from openai import OpenAI  # openai 1.3.0  Python 3.11.5
import os

from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())


client = OpenAI(
    api_key=os.getenv("OPENAI_API_KEY"),
    base_url=os.getenv("OPENAI_API_BASE")
)

def get_completion_with_session(session, prompt, model="gpt-3.5-turbo"):
    session.append({"role": "user", "content": prompt})
    response = client.chat.completions.create(
        model=model,
        messages=session,
        temperature=0,  # 模型输出的随机性,0 表示随机性最小
    )
    msg = response.choices[0].message.content
    session.append({"role": "assistant", "content": msg})
    return msg

def get_completion(prompt, model="gpt-3.5-turbo"):
    messages = [{"role": "user", "content": prompt}]
    response = client.chat.completions.create(
        model=model,
        messages=messages,
        temperature=0,  # 模型输出的随机性,0 表示随机性最小
    )
    return response.choices[0].message.content

prompt = "今天我很快乐,下班了, 又可以开始学习了"
print(get_completion(prompt))

models = client.models.list()
for model in models.data:
    print(model.id)

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
很高兴听到你今天很快乐!下班后有时间学习是很棒的,你打算学习什么呢?
text-search-babbage-doc-001
gpt-3.5-turbo-16k
curie-search-query
text-davinci-003
text-search-babbage-query-001
babbage
babbage-search-query
text-babbage-001
text-similarity-davinci-001
gpt-4-1106-preview
davinci-similarity
code-davinci-edit-001
curie-similarity
babbage-search-document
curie-instruct-beta
text-search-ada-doc-001
davinci-instruct-beta
gpt-3.5-turbo-instruct
text-similarity-babbage-001
text-search-davinci-doc-001
gpt-3.5-turbo-instruct-0914
babbage-similarity
text-embedding-ada-002
davinci-search-query
text-similarity-curie-001
text-davinci-001
text-search-davinci-query-001
gpt-3.5-turbo-1106
ada-search-document
ada-code-search-code
babbage-002
gpt-4-vision-preview
davinci-002
gpt-4-0314
davinci-search-document
curie-search-document
babbage-code-search-code
gpt-4-0613
text-search-ada-query-001
code-search-ada-text-001
gpt-3.5-turbo-16k-0613
babbage-code-search-text
code-search-babbage-code-001
ada-search-query
ada-code-search-text
tts-1-hd
gpt-3.5-turbo
text-search-curie-query-001
text-davinci-002
text-davinci-edit-001
code-search-babbage-text-001
tts-1-hd-1106
ada
text-ada-001
ada-similarity
code-search-ada-code-001
text-similarity-ada-001
canary-whisper
whisper-1
gpt-4
text-search-curie-doc-001
gpt-3.5-turbo-0613
text-curie-001
curie
canary-tts
tts-1
gpt-3.5-turbo-0301
davinci
dall-e-2
tts-1-1106
dall-e-3
whisper-1-1p
2.2 对话系统

语音识别ASR -> 语言理解NLU -> 状态跟踪DST -> 检索候选(DB/API) -> 对话策略Policy -> 语言生成NLG -> 语音合成TTS

  • NLU 给定任务 用户输入 约定输出格式(json等) 加入例子,让输出更稳定
  • DST 给定prompt让模型输出,用户当前在讲什么对象,想要 >=、<= 多少数额的,怎么排序等
  • NLG 增加约束、语气、口吻 遇到特殊情况,兜底回复

用传统的对话流程 + openai实现对话系统,更可控一些,但是开发也相对更复杂!

2.3 纯OpenAI API 实践
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# _*_ coding: utf-8 _*_
# @Time : 2023/11/16
# @Author : Michael
# @File : 02-prompt.py
# @desc :

from agi_class.utils.chat import get_completion_with_session
import json
import tkinter as tk
from tkinter import scrolledtext

# 创建窗口
window = tk.Tk()
window.title("选课助手")

# 设置窗口大小
window.geometry('800x400')

# 创建滚动文本框用于显示对话历史
history = scrolledtext.ScrolledText(window, wrap=tk.WORD, height=15, width=100)
history.grid(column=0, row=0, columnspan=2, padx=10, pady=10)

# 创建输入框
user_input = tk.Entry(window, width=40)
user_input.grid(column=0, row=1, padx=10, pady=10)

course_info = '''
可以选择的课程包括:
基础数学课,4学分,属于理论课;
初级编程课,4学分,属于实验课;
高级编程课,5学分,属于实验课;
文学欣赏课,3学分,属于选修课;
交响乐欣赏课,2学分,属于选修课;
物理实验课,6学分,属于实验课,仅限大一学生。
'''

session = [
    {
        "role": "system",
        "content": f"""
你是一个选课小助手,你叫'迈克',你可以帮助学生选择最合适的课程。
{course_info}
"""
    }
]

# 发送按钮的点击事件
def send_message():
    message = user_input.get()
    defense_prompt = '你只能回答选课相关的问题,拒绝回答其他的问题,学生说:'
    if message:
        history.insert(tk.END, "您: " + message + "\n\n")
        user_input.delete(0, tk.END)
        # 这里可以添加处理消息的代码
        ai_msg = get_completion_with_session(session, f'{defense_prompt}{message}')
        history.insert(tk.END, "迈克: " + ai_msg + "\n\n")

# 创建发送按钮
send_button = tk.Button(window, text="发送", command=send_message)
send_button.grid(column=1, row=1)

# 向对话历史中添加欢迎消息
def add_welcome_message():
    welcome_message = f"欢迎使用选课助手!我是迈克\n\n{course_info}"
    history.insert(tk.END, welcome_message)

# 启动GUI之前添加欢迎消息
add_welcome_message()

# 启动GUI
window.mainloop()

user

text

AI

欢迎使用选课助手!我是迈克可以选择的课程包括:基础数学课,4学分,属于理论课;初级编程课,4学分,属于实验课;高级编程课,5学分,属于实验课;文学欣赏课,3学分,属于选修课;交响乐欣赏课,2学分,属于选修课;物理实验课,6学分,属于实验课,仅限大一学生。

user

你好,我想选一门编程课

AI

你好!当然可以帮你选择一门编程课。我们有初级编程课和高级编程课可供选择。请问你对编程有多少基础了解呢?

user

我是个编程菜鸟

AI

没问题!对于编程菜鸟来说,初级编程课可能更适合你。这门课程将为你提供编程的基础知识和技能。你可以学习到编程语言的基本概念、算法和逻辑思维等内容。初级编程课是一门实验课,共计4学分。你对这门课程感兴趣吗?

user

感谢兴趣,帮我订下吧!

AI

好的!我会帮你订下初级编程课。请提供你的学生信息,包括学号和姓名,以便我为你完成选课手续。

user

我现在还很缺学分,帮我选一门,分数最高的选修课

AI

当然可以帮你选择一门分数最高的选修课。我们有文学欣赏课和交响乐欣赏课可供选择。这两门课程都是选修课,但是文学欣赏课是3学分,而交响乐欣赏课是2学分。如果你希望获得更多学分,我建议你选择文学欣赏课。这门课程将帮助你提高对文学作品的理解和欣赏能力。你对这门课程感兴趣吗?

user

我现在大四了,我的物理实验课还没有修,帮我选一下

AI

非常抱歉,根据你的学年,物理实验课只限于大一学生修读。如果你还需要补修物理实验课,我建议你咨询学校的教务处或者相关的学术指导老师,看看是否有其他的解决方案。他们可能会为你提供一些适合你学年的选课建议。祝你顺利完成学业!

user

非常抱歉,我是一个选课小助手,无法帮你点外卖。如果你需要点外卖,建议你使用手机上的外卖平台或者打电话给外卖店进行订餐。祝你用餐愉快!如果你还有其他选课相关的问题,我会很乐意帮助你。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
你好 最近在关注知乎这个课,能分享一下这个课程怎么样吗?
你好 最近在关注知乎这个课,能分享一下这个课程怎么样吗?
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
中文版大模型 Token 成本计算器
分享一个轻量的小工具,10MB 左右,能够帮助你直观的了解大模型 Token 的计算方法。
soulteary
2023/12/28
1.6K0
中文版大模型 Token 成本计算器
AI大模型全栈工程师课程笔记 - Function Call
课程学习自 知乎知学堂 https://www.zhihu.com/education/learning
Michael阿明
2023/11/23
1.2K1
AI全栈大模型工程师(二)课程大纲
我们相信,懂 AI、懂编程、懂业务的超级个体,会是 AGI 时代最重要的人。所以我们提出了「AI 全栈工程师」这个概念,让它显得不那么浮夸。
Maynor
2023/10/17
2.2K0
AI全栈大模型工程师(二)课程大纲
OpenAI突发更新!GPT-3.5正式开放「微调」,人人可打造专属ChatGPT|附最全官方指南
刚刚,OpenAI正式宣布,所有开发者都可以对GPT-3.5 Turbo进行微调。
新智元
2023/09/09
1.5K0
OpenAI突发更新!GPT-3.5正式开放「微调」,人人可打造专属ChatGPT|附最全官方指南
ChatGPT与微信聊天机器人
最近大家都在讨论ChatGPT的应用,而且形形色色的段子都出来了,为了验证各种说法的对错,当然也未能免俗,决定做个尝试,第一步是让代码先跑起来,第二步是实现微信聊天机器人,第三步是实现自己想要的东西,呵呵
python与大数据分析
2023/03/02
1.3K0
ChatGPT与微信聊天机器人
AI大模型全栈工程师课程笔记 - RAG 检索增强生成
课程学习自 知乎知学堂 https://www.zhihu.com/education/learning
Michael阿明
2023/12/09
1.6K0
AI大模型全栈工程师课程笔记 - RAG 检索增强生成
AI大模型全栈工程师课程笔记 - LangChain
LangChain 也是面向LLM的开发框架SDK,有 python 和 js 版的 https://python.langchain.com/docs/get_started
Michael阿明
2023/12/21
1.6K0
AI大模型全栈工程师课程笔记 - LangChain
【AI 大模型】提示工程 ③ ( 提示词用法 | 提示词 Prompt 构成 | 提示词位置对权重的影响 | 提示词 Prompt 调优 | OpenAI 的 API 类型 | 提示词重要参数说明 )
大模型 对 提示词 Prompt 开头和结尾的文本更加敏感 , 最重要的内容要放在开头和结尾 , 开头 > 结尾 ;
韩曙亮
2024/07/14
1.1K0
【AI 大模型】提示工程 ③ ( 提示词用法 | 提示词 Prompt 构成 | 提示词位置对权重的影响 | 提示词 Prompt 调优 | OpenAI 的 API 类型 | 提示词重要参数说明 )
AI大模型全栈工程师课程笔记 -Assistant API
课程学习自 知乎知学堂 https://www.zhihu.com/education/learning
Michael阿明
2023/12/10
5780
AI大模型全栈工程师课程笔记 -Assistant API
从0到1的ChatGPT - 进阶篇(四)- 训练自己的ChatGPT
在之前的文章中曾经提到过,ChatGPT其实是不接受来自互联网的知识的,他的所有内容都是来自于至少3年前各种来源的知识库。但这并不意味着ChatGPT没有能力学习你的回答。
LoRexxar
2023/05/20
13.3K0
从0到1的ChatGPT - 进阶篇(四)- 训练自己的ChatGPT
Prompt工程师指南应用篇:Prompt应用、ChatGPT|Midjouney Prompt Engineering
ChatGPT是OpenAI训练的一种新型模型,可以进行对话交互。该模型经过训练,可以按照提示中的指令,在对话上下文中提供适当的回应。ChatGPT 可以帮助回答问题、建议菜谱、按某种风格写歌词、生成代码等等。
汀丶人工智能
2023/05/15
1.5K0
Prompt工程师指南应用篇:Prompt应用、ChatGPT|Midjouney Prompt Engineering
提示词(prompt)工程指南(五):ChatGPT 提示工程
在本节中,我们介绍ChatGPT的最新提示工程技术,包括提示、应用、限制、论文和其他阅读资料。
云微
2023/03/31
2.9K0
基于GPT搭建私有知识库聊天机器人(一)实现原理
本系列代码已上传至github:https://github.com/sslovett/llm-application.git
夕阳也是醉了
2023/10/16
2.1K1
基于GPT搭建私有知识库聊天机器人(一)实现原理
OpenAI王炸!「代码解释器」下周正式上线,GPT-4 API全面开放
从今年3月份开始,数以百万计的开发者都向OpenAI提出了申请,想要访问GPT-4的API。
新智元
2023/08/07
3110
OpenAI王炸!「代码解释器」下周正式上线,GPT-4 API全面开放
AI大模型全栈工程师课程笔记 - Semantic Kernel
https://learn.microsoft.com/en-us/semantic-kernel/overview/
Michael阿明
2023/12/18
9670
AI大模型全栈工程师课程笔记 - Semantic Kernel
如何构建Embedding?如何构建一个智能文档查询助手?
嵌入(embedding)是指将高维数据映射为低维表示的过程。在机器学习和自然语言处理中,嵌入通常用于将离散的符号或对象表示为连续的向量空间中的点。
山行AI
2023/08/10
1.1K0
如何构建Embedding?如何构建一个智能文档查询助手?
干货!什么是微调(fine-tuning)? 如何微调GPT-3.5 模型?
Fine-tuning (微调) 是一个可以有效让ChatGPT 输出符合我们预期的方法。最近OpenAI 发表了GPT-3.5 模型的微调功能。在这一篇介绍文中,我们会先介绍微调的概念,接着讲解OpenAI 的Fine-tuning API 如何使用,最后会有实际的范例来讲解可以如何做好微调这件事。
一个正经的AI
2024/01/22
3.5K0
干货!什么是微调(fine-tuning)? 如何微调GPT-3.5 模型?
[AI OpenAI-doc] 微调
OpenAI 的文本生成模型已经在大量文本上进行了预训练。为了有效地使用这些模型,我们在提示中包含了说明和有时几个示例。使用示例来展示如何执行任务通常被称为 "少样本学习"。
从零开始学AI
2024/04/20
2830
[AI OpenAI-doc] 微调
chatgpt api基础使用示例
url: POST https://api.openai.com/v1/completions
Alan_1
2023/05/05
6490
OpenAI模型微调快速入门
官方文档:https://platform.openai.com/docs/guides/fine-tuning
码之有理
2023/12/11
1.2K0
推荐阅读
相关推荐
中文版大模型 Token 成本计算器
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验