llm-universe 提示词工程 api开发 打卡笔记1 —— (datawhale)

2024-04-18 04:44

本文主要是介绍llm-universe 提示词工程 api开发 打卡笔记1 —— (datawhale),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

llm-universe 提示词工程 api开发 打卡笔记1 —— (datawhale)

项目目标

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

这篇关于llm-universe 提示词工程 api开发 打卡笔记1 —— (datawhale)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

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选择的优

基于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

mss32.dll文件丢失怎么办? 电脑提示mss32.dll丢失的多种修复方法

《mss32.dll文件丢失怎么办?电脑提示mss32.dll丢失的多种修复方法》最近,很多电脑用户可能遇到了mss32.dll文件丢失的问题,导致一些应用程序无法正常启动,那么,如何修复这个问题呢... 在电脑常年累月的使用过程中,偶尔会遇到一些问题令人头疼。像是某个程序尝试运行时,系统突然弹出一个错误提