大模型prompt engineering api开发

2024-04-21 20:28

本文主要是介绍大模型prompt engineering api开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

项目目标

1.熟悉 LangChain,Rag等大模型开发开源知识,

2.了解llm开发的全部流程,独立开发个人的小助手。

环境配置

使用conda 独立分配一个环境

conda create -n llm-universe

conda activate llm-universe

cd 项目文件夹

pip install -r requirements.txt

llm应用开发

api参数设定

Temperature

对于不同的问题与应用场景,我们可能需要设置不同的 temperature。例如,在本次学习项目搭建的个人知识库助手项目中,我们一般将 temperature 设置为 0,从而保证助手对知识库内容的稳定使用,规避错误内容、模型幻觉;在产品智能客服、科研论文写作等场景中,我们同样更需要稳定性而不是创造性;但在个性化 AI、创意营销文案生成等场景中,我们就更需要创意性,从而更倾向于将 temperature 设置为较高的值。

system prompt

设置此参数相当于设置模型的默认设置。

{"system prompt": "你是一个幽默风趣的个人知识库助手,可以根据给定的知识库内容回答用户的提问,注意,你的回答风格应是幽默风趣的","user prompt": "我今天有什么事务?"
}

api调用示例

文心一言YB-chat,使用.env文件来存储

import qianfan
from dotenv import load_dotenv, find_dotenv# 读取本地/项目的环境变量。# find_dotenv() 寻找并定位 .env 文件的路径
# load_dotenv() 读取该 .env 文件,并将其中的环境变量加载到当前的运行环境中  
# 如果你设置的是全局的环境变量,这行代码则没有任何作用。
_ = load_dotenv(find_dotenv())
def gen_wenxin_messages(prompt):'''构造文心模型请求参数 messages请求参数:prompt: 对应的用户提示词'''messages = [{"role": "user", "content": prompt}]return messagesdef get_completion(prompt, model="Yi-34B-Chat", temperature=0.01):'''获取文心模型调用结果请求参数:prompt: 对应的提示词model: 调用的模型,默认为 ERNIE-Bot,也可以按需选择 ERNIE-Bot-4 等其他模型temperature: 模型输出的温度系数,控制输出的随机程度,取值范围是 0~1.0,且不能设置为 0。温度系数越低,输出内容越一致。'''chat_comp = qianfan.ChatCompletion()message = gen_wenxin_messages(prompt)resp = chat_comp.do(messages=message, model=model,temperature = temperature,system="你是一名个人助理-小鲸鱼")return resp["result"]
get_completion("请你告诉我该如何做prompt engineering")

返回值:

Prompt engineering 是一个相对较新的概念,它指的是设计或优化提示(prompts)以获得更好的模型输出。在自然语言处理(NLP)中,提示通常是指在训练语言模型时使用的输入文本,它们可以帮助模型理解并生成符合用户预期的响应。以下是一些提示工程的策略和技巧return:1. **明确性(Clarity)**:确保你的提示清晰明确,让模型知道你想要什么。避免歧义和模糊的表述。
2. **具体性(Specificity)**:尽量提供具体的上下文和细节,这样模型才能生成更准确和相关的回答。
3. **简洁性(Brevity)**:尽量保持提示简洁,避免冗长和无关的信息,这有助于模型专注于关键点。
4. **引导性(Directness)**:使用引导性的语言来指导模型生成你想要的输出。例如,使用“请”、“描述”、“解释”等词汇。
5. **反馈循环(Feedback Loop)**:不断迭代和优化你的提示,根据模型的输出调整提示,直到得到满意的结果。
6. **调试(Debugging)**:如果模型输出不符合预期,尝试找出问题所在,可能是提示设计不当,也可能是模型理解错误。
7. **多样化(Variety)**:对于同一个任务,尝试不同的提示,看看哪个效果最好。
8. **上下文敏感性(Context Sensitivity)**:如果你的提示需要考虑特定的背景或上下文,确保在提示中提供足够的背景信息。
9. **避免误导(Avoid Misleading)**:如果你的提示可能引导模型产生不准确或误导性的回答,尽量避免这种情况。
10. **测试和验证(Testing and Validation)**:对你的提示进行充分的测试,确保它们在实际应用中能够产生预期的结果。
11. **参考示例(Example Use)**:如果可能,提供示例或使用案例来帮助模型理解如何应用提示。
12. **适应性(Adaptability)**:根据模型的能力和限制调整提示,确保提示与模型的能力相匹配。
13. **多模态提示(Multimodal Prompts)**:对于支持多模态输入的模型,可以使用图像、声音或其他形式的数据来增强提示。
14. **伦理和敏感性(Ethics and Sensitivity)**:在处理敏感话题时,确保提示不会导致模型产生不适当或冒犯性的输出。Prompt engineering 是一个相对较新的概念,它指的是设计或优化提示(prompts)以获得更好的模型输出。在自然语言处理(NLP)中,提示通常是指在训练语言模型时使用的输入文本,它们可以帮助模型理解并生成符合用户预期的响应。提示工程是一个不断发展的领域,随着语言模型能力的增强和应用场景的扩大,提示工程师需要不断学习和创新。

提示词工程(prompt engineering)

好的提示词工程才能最大限度的发挥llm大脑的作用,高质量的提问往往才联系着高质量的回答,所以我们应该学习如何更好的写出提示词。以下的内容均基于datawhale提供的开源资料,这些是我认为在prompt-engineering中比较重要点,如果想要系统的学习prompt-engineering,请直接前往 动手学大模型应用开发 查看prompt engineering 章节

使用分隔符清晰地表示输入的不同部分

在编写 Prompt 时,我们可以使用各种标点符号作为“分隔符”,将不同的文本部分区分开来。分隔符就像是 Prompt 中的墙,将不同的指令、上下文、输入隔开,避免意外的混淆。你可以选择用 ```,“”",< >, ,: 等做分隔符,只要能明确起到隔断作用即可。

寻求结构化的输出

有时候我们需要语言模型给我们一些结构化的输出,而不仅仅是连续的文本。什么是结构化输出呢?就是按照某种格式组织的内容,例如 JSON、HTML 等。这种输出非常适合在代码中进一步解析和处理,例如,您可以在 Python 中将其读入字典或列表中。

prompt = f"""请生成包括书名、作者和类别的三本虚构的、非真实存在的中文书籍清单,\并以 JSON 格式提供,其中包含以下键:book_id、title、author、genre。"""response = get_completion(prompt)print(response)

提供少量示例 few-shot learning

“Few-shot” prompting(少样本提示),即在要求模型执行实际任务之前,给模型提供一两个参考样例,让模型了解我们的要求和期望的输出样式。

prompt = f"""你的任务是以一致的风格回答问题(注意:文言文和白话的区别)。<学生>: 请教我何为耐心。<圣贤>: 天生我材必有用,千金散尽还复来。<学生>: 请教我何为坚持。<圣贤>: 故不积跬步,无以至千里;不积小流,无以成江海。骑骥一跃,不能十步;驽马十驾,功在不舍。<学生>: 请教我何为孝顺。"""response = get_completion(prompt)print(response)
<圣贤>: 孝顺者,孝敬父母,顺从长辈,尊重家族传统,忠诚孝道,不忘家国情怀。

给模型时间思考

我们应通过 Prompt 引导语言模型进行深入思考。可以要求其先列出对问题的各种看法,说明推理依据,然后再得出最终结论。在 Prompt 中添加逐步推理的要求,能让语言模型投入更多时间逻辑思维,输出结果也将更可靠准确。

示例:

text = f"""在一个迷人的村庄里,兄妹杰克和吉尔出发去一个山顶井里打水。\他们一边唱着欢乐的歌,一边往上爬,\然而不幸降临——杰克绊了一块石头,从山上滚了下来,吉尔紧随其后。\虽然略有些摔伤,但他们还是回到了温馨的家中。\尽管出了这样的意外,他们的冒险精神依然没有减弱,继续充满愉悦地探索。"""prompt = f"""1-用一句话概括下面用<>括起来的文本。2-将摘要翻译成英语。3-在英语摘要中列出每个名称。4-输出一个 JSON 对象,其中包含以下键:English_summary,num_names。请使用以下格式:摘要:<摘要>翻译:<摘要的翻译>名称:<英语摘要中的名称列表>输出 JSON 格式:<带有 English_summary 和 num_names 的 JSON 格式>Text: <{text}>"""response = get_completion(prompt)print("response :")print(response)
response :摘要:在一个迷人的村庄里,兄妹杰克和吉尔出发去一个山顶井里打水,不幸中途发生意外,但他们仍然充满冒险精神。翻译:In a charming village, siblings Jack and Jill set out to fetch water from a well on top of a hill, unfortunately encountering an accident along the way, but their adventurous spirit remains undiminished.名称:Jack, Jill

这篇关于大模型prompt engineering api开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/923954

相关文章

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

基于Python开发批量提取Excel图片的小工具

《基于Python开发批量提取Excel图片的小工具》这篇文章主要为大家详细介绍了如何使用Python中的openpyxl库开发一个小工具,可以实现批量提取Excel图片,有需要的小伙伴可以参考一下... 目前有一个需求,就是批量读取当前目录下所有文件夹里的Excel文件,去获取出Excel文件中的图片,并

基于Python开发PDF转PNG的可视化工具

《基于Python开发PDF转PNG的可视化工具》在数字文档处理领域,PDF到图像格式的转换是常见需求,本文介绍如何利用Python的PyMuPDF库和Tkinter框架开发一个带图形界面的PDF转P... 目录一、引言二、功能特性三、技术架构1. 技术栈组成2. 系统架构javascript设计3.效果图

基于Python开发PDF转Doc格式小程序

《基于Python开发PDF转Doc格式小程序》这篇文章主要为大家详细介绍了如何基于Python开发PDF转Doc格式小程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用python实现PDF转Doc格式小程序以下是一个使用Python实现PDF转DOC格式的GUI程序,采用T