编辑
2024-11-13
💥AI大模型
00
请注意,本文编写于 218 天前,最后修改于 218 天前,其中某些信息可能已经过时。

目录

什么是Prompt Engineering ?
1. Prompt Engineering的核心
2. Prompt Engineering的目的
3. Prompt Engineering的常见策略
4. Prompt Engineering的类型
5. Prompt Engineering的挑战
6. Prompt Engineering的实际应用
7. 如何提升Prompt Engineering能力
总结
大模型开发流程
搭建LLM项目的流程简析
步骤1 项目规划与需求分析
步骤2: 数据准备与向量知识库构建
步骤3:大模型集成与API连接
步骤4:核心功能实现
步骤5:核心功能迭代优化
步骤6:前端与用户交互界面开发
步骤7:部署测试与上线
步骤8: 维护与持续改进

我们将开发以大语言模型为功能核心、通过大语言模型的强大理解能力和生成能力、结合特殊的数据或业务逻辑来提供独特功能的应用称为大模型开发。

开发大模型相关应用,其技术核心点虽然在大语言模型上,但一般通过调用 API 或开源模型来实现核心的理解与生成,通过 Prompt Enginnering 来实现大语言模型的控制,因此,虽然大模型是深度学习领域的集大成之作,大模型开发却更多是一个工程问题。

以调用、发挥大模型为核心的大模型开发与传统的 AI 开发在整体思路上有着较大的不同。大语言模型的两个核心能力:指令遵循与文本生成提供了复杂业务逻辑的简单平替方案。

什么是Prompt Engineering ?

Prompt Engineering(提示工程)是与大语言模型(如GPT系列)互动时,设计和优化输入“提示”(prompt)的一门技术。通过精心设计的提示,可以更有效地引导模型生成所需的输出,无论是代码、文本、数据,还是解决问题的方案。Prompt Engineering 涉及如何构造问题、设定明确的目标、提供足够的上下文,甚至引导模型遵循特定的行为或风格,以最大化模型的输出质量和实用性。

1. Prompt Engineering的核心

  • 提示的设计:创建一个明确且有效的输入,模型依据该输入生成输出。提示可以是一个问题、指令、描述或任何对话的形式。
  • 模型的行为引导:通过不同的提示设计,引导模型生成不同类型的回答。例如,想要生成简短的答案、详细的解释、代码、文章等,提示的结构和表达会有所不同。
  • 上下文管理:提供足够的上下文信息,帮助模型理解任务背景,从而生成更符合预期的答案。

2. Prompt Engineering的目的

  • 提高准确性:通过精确的提示设计,避免模型产生模糊或不相关的回答。
  • 提高效率:优化提示,减少模型给出的无用信息,提高所需输出的质量和准确性。
  • 控制输出风格:通过指定要求,控制模型生成内容的风格、格式、语气等。例如,可以要求生成专业的文章,或者风趣的对话。
  • 解决特定任务:针对特定的任务(如代码生成、写作、语言翻译等),设计合适的提示,以便模型更好地完成这些任务。

3. Prompt Engineering的常见策略

  • 明确指令:给模型提供清晰的任务描述,避免模糊或含糊的提示。例如,请写一个Python程序来实现二分查找算法,而不是简单的问如何实现二分查找?

  • 提供上下文信息:如果是解决一个具体问题或任务,提供详细的背景信息帮助模型更好地理解任务。例如,给出代码片段、数据集、业务逻辑,或是一个特定的场景描述。

  • 分阶段提示:对于复杂的任务,可以将任务拆解为多个小任务。逐步引导模型完成每一部分。例如,先让模型生成函数的框架,再让它填充具体的代码,最后进行优化。

  • 输出格式要求:如果有特定的格式需求,可以在提示中明确。例如,如果你希望生成的代码是Python语言,或者需要模型按特定格式输出答案,可以在提示中提前声明。

  • 例子和反向示范:通过给出一些正面和反面的例子,帮助模型理解什么样的输出是正确的。例如,如果你要求模型生成代码,可以给出一个正确的示例和一个错误的示例,帮助模型更好地理解所期望的结果。

4. Prompt Engineering的类型

  • 生成式提示(Generative Prompts):用于生成内容,如文章、代码、故事、对话等。例如,请写一篇关于人工智能的文章

  • 提问式提示(Interrogative Prompts):用于向模型提问,获取具体信息或解答问题。例如,解释一下量子计算的基本原理

  • 指令式提示(Instructional Prompts):给模型具体的任务或操作指令,通常用于代码生成或任务驱动的应用。例如,编写一个Python程序,读取CSV文件并打印出其中的所有数据

  • 反向提示(Counterfactual Prompts):用于提供一些反向示例,帮助模型理解不应该生成的内容。反向提示有助于避免模型输出错误信息或偏离目标。

5. Prompt Engineering的挑战

  • 理解语言模型的局限性:尽管语言模型非常强大,但它们仍然有局限性。它们不能真正理解人类的世界,所有的“理解”都来自大量的训练数据和模式匹配。因此,设计提示时要考虑到这些模型的弱点。

  • 避免不必要的歧义:有时,模型会因为提示的不清晰或歧义而给出不相关的回答。Prompt Engineering 需要避免含糊不清的描述,确保提示尽可能明确。

  • 输出多样性和控制:有时我们希望模型的输出更具创意,或者按特定的风格生成内容,这要求对提示进行精心设计,以保证输出符合期望。

  • 长文生成:对于要求生成长文本(如文章或报告)的任务,设计有效的提示,确保模型在生成过程中保持一致性和主题连贯性,是一个挑战。

6. Prompt Engineering的实际应用

  • 自然语言处理:在对话生成、文本摘要、问答系统、翻译等任务中,Prompt Engineering 被广泛使用。通过优化提示,可以提高模型生成内容的质量。

  • 代码生成和调试:程序员使用提示设计来生成代码、修复错误或优化现有代码。比如,提供一个不完整的代码片段,让模型补全或优化。

  • 数据处理和分析:在数据科学中,设计适当的提示,帮助模型生成有效的数据处理脚本、算法或数据分析方法。

  • 创意写作和内容创作:通过设计不同的提示,可以帮助模型创作故事、剧本、广告文案等创意内容。

7. 如何提升Prompt Engineering能力

  • 多实验:尝试不同的提示设计,观察模型输出的变化,积累经验。
  • 分析和反馈:通过分析模型生成的内容,找到最有效的提示策略,不断优化。
  • 学习先进方法:了解相关的研究成果,学习业内最佳实践,不断提升设计技巧。

总结

Prompt Engineering 是一种通过精心设计和优化提示来引导大语言模型生成准确、有用和高质量输出的技术。它在多个领域中得到了广泛应用,包括自然语言处理、代码生成、数据分析等。优秀的提示设计能够显著提高模型的输出质量,帮助用户高效完成任务。

大模型开发流程

image.png

我们采用 Gradio 和 Streamlit,可以帮助个体开发者迅速搭建可视化页面实现 Demo 上线。

搭建LLM项目的流程简析

步骤1 项目规划与需求分析

  1. 项目目标:基于个人及群体的收支管理助手
  2. 核心功能
    • 将支付宝、微信的交易记录上传文档向量化,并创建知识库
    • 选择知识库,检索用户提问的知识片段
    • 提供知识片段与提问,获取大模型回答
    • 流式回复
    • 历史对话记录
  3. 确定技术架构和工具
    • 框架:LangChain
    • Embedding模型:GPT、智谱、M3E
    • 数据库:Chroma
    • 大模型:GPT、讯飞星火、文心一言、GLM
    • 前后端:Gradio和Steamlit

步骤2: 数据准备与向量知识库构建

本项目实现原理如下图所示(图片来源):加载本地文档 -> 读取文本 -> 文本分割 -> 文本向量化 -> question 向量化 -> 在文本向量中匹配出与问句向量最相似的 top k 个 -> 匹配出的文本作为上下文和问题一起添加到 Prompt 中 -> 提交给 LLM 生成回答。

image.png

步骤3:大模型集成与API连接

  1. 集成 GPT、星火、文心、GLM 等大模型,配置 API 连接。
  2. 编写代码,实现与大模型 API 的交互,以便获取问题回答。

步骤4:核心功能实现

  1. 构建 Prompt Engineering,实现大模型回答功能,根据用户提问和知识库内容生成回答。
  2. 实现流式回复,允许用户进行多轮对话。
  3. 添加历史对话记录功能,保存用户与助手的交互历史。

步骤5:核心功能迭代优化

  1. 进行验证评估,收集 Bad Case。
  2. 根据 Bad Case 迭代优化核心功能实现。

步骤6:前端与用户交互界面开发

  1. 使用 Gradio 和 Streamlit 搭建前端界面。
  2. 实现用户上传文档、创建知识库的功能。
  3. 设计用户界面,包括问题输入、知识库选择、历史记录展示等。

步骤7:部署测试与上线

  1. 部署问答助手到服务器或云平台,确保可在互联网上访问。
  2. 进行生产环境测试,确保系统稳定。
  3. 上线并向用户发布。

步骤8: 维护与持续改进

  1. 监测系统性能和用户反馈,及时处理问题。
  2. 定期更新知识库,添加新的文档和信息。
  3. 收集用户需求,进行系统改进和功能扩展。

本文作者:Eric

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!