https://microsoft.github.io/generative-ai-for-beginners/#/

如何学习本课程

  • Jupyter
    • 便于创建和共享程序文档,支持实时代码,数学方程,可视化和 markdown。 用途包括:数据清理和转换,数值模拟,统计建模,机器学习
  • github codespaces
    • 云开发环境
    • 配置即代码
    • wsl
  • Azure OpenAI Service

一 简介

文本输入和输出的架构

prompt completion

llms 如何工作

  • 分词器,文本到数字
  • 预测输出标记
  • 选择过程,概率分布

二 不同的 LLM

内容创建 解码器

审查内容 编码器

提升 LLM 的输出结果准确度

https://www.fiddler.ai/blog/four-ways-that-enterprises-deploy-llms

  • Prompt Engineering with Context
  • RAG
  • 微调模型
  • 训练模型

三 责任

负责任的人工智能的原则:公平、包容、可靠性/安全、安全和隐私、透明度和问责制

幻觉

四 提示工程基础

设计和优化文本输入(提示)的过程

  1. 为给定模型和目标设计初始提示
  2. 迭代优化提示,提高响应质量
    是一个反复试验的过程
  • Tokenization
    模型如何“看到”提示
  • Base LLMs
    基础模型如何“处理”提示
  • Instruction-Tuned LLMs  模型现在如何查看“任务”

为什么我们需要提示工程

模型响应是随机的

相同的提示可能会在不同的模型或模型版本中产生不同的响应。甚至在不同时间使用相同的模型,也可能产生不同的结果。提示工程技术可以帮助我们通过提供更好的引导条款,来最小化这些变化

模型可能会捏造响应

模型是用大而有限的数据集进行预训练的,这意味着他们对训练范围之外的概念缺乏了解。因此,他们可能会产生不准确的、想象出来的,或者直接与已知事实相矛盾的完成。提示工程技术帮助用户识别并缓解这样的捏造,例如,通过向 AI 索要引证或推理。

模型能力会有所不同

新的模型或模型版本将具有更丰富的能力,但也会带来独特的怪癖和在成本与复杂性上的权衡。提示工程可以帮助我们开发最佳做法和工作流程,以抽象化差异并适应模型特定的需求,实现可扩展,无缝的方式

最佳实践

  • 单独的说明和背景
    • 检查您的模型/提供商是否定义了分隔符,以更清楚地区分说明、主要内容和次要内容。这可以帮助模型更准确地为标记分配权重。
  • 具体明确
    • 更详细地说明所需的背景、结果、篇幅、格式、风格等。这将提高回复的质量和一致性。在可重复使用的模板中记录配方。
  • 要有描述性,举例说明
    • 模型可能对 ” 展示和讲述 ” 的方法反应更好。首先,你可以采用 zero-shot 的方法,给模型一个指令(但不举例说明),然后尝试 few-shot 的改进方法,提供一些所需的输出示例。使用类比。
  • 使用提示来启动完成
    • 给它一些引导词或短语,让它以这些词或短语为出发点来做出回应,从而引导它取得预期结果

五 创建高级 Prompt

Prompting 技术

  • 零样本提示

  • 少样本提示

  • 思维链

  • 从少到多

  • 自我提炼,批判结果

  • Maieutic 提示

  • 指定上下文

  • 限制输出

  • 指定内容和方式

  • 使用模板