【LLM】LLM API 开发

news2024/12/23 10:07:47

文章目录

  • LLM API 开发
    • LLM入门基本概念
    • LLM API使用
      • 实名认证
      • 创建应用
      • 使用API
    • Prompt Engineering
    • 思考
    • 总结

参考文章
什么是提示工程(Prompt Engineering)?
ChatGPT Prompt 最佳指南一

LLM API 开发

LLM入门基本概念

  1. Prompt
    Prompt 最初是 NLP(自然语言处理)研究者为下游任务设计出来的一种任务专属的输入模板,类似于一种任务(例如:分类,聚类等)会对应一种 Prompt。在 ChatGPT 推出并获得大量应用之后,Prompt 开始被推广为给大模型的所有输入。即,我们每一次访问大模型的输入为一个 Prompt,而大模型给我们的返回结果则被称为 Completion。

  2. Temperature
    LLM 生成是具有随机性的,在模型的顶层通过选取不同预测概率的预测结果来生成最后的结果。我们一般可以通过控制 temperature 参数来控制 LLM 生成结果的随机性与创造性。

    Temperature 一般取值在 0~1 之间,当取值较低接近 0 时,预测的随机性会较低,产生更保守、可预测的文本,不太可能生成意想不到或不寻常的词。当取值较高接近 1 时,预测的随机性会较高,所有词被选择的可能性更大,会产生更有创意、多样化的文本,更有可能生成不寻常或意想不到的词。

  3. System Prompt
    System Prompt 是随着 ChatGPT API 开放并逐步得到大量使用的一个新兴概念,事实上,它并不在大模型本身训练中得到体现,而是大模型服务方为提升用户体验所设置的一种策略。

    具体来说,在使用 ChatGPT API 时,你可以设置两种 Prompt:一种是 System Prompt,该种 Prompt 内容会在整个会话过程中持久地影响模型的回复,且相比于普通 Prompt 具有更高的重要性;另一种是 User Prompt,这更偏向于我们平时提到的 Prompt,即需要模型做出回复的输入。

    我们一般设置 System Prompt 来对模型进行一些初始化设定,例如,我们可以在 System Prompt 中给模型设定我们希望它具备的人设如一个个人知识库助手等。System Prompt 一般在一个会话中仅有一个。在通过 System Prompt 设定好模型的人设或是初始设置后,我们可以通过 User Prompt 给出模型需要遵循的指令。例如,当我们需要一个幽默风趣的个人知识库助手,并向这个助手提问我今天有什么事时,可以构造如下的 Prompt:

    {
    “system prompt”: “你是一个幽默风趣的个人知识库助手,可以根据给定的知识库内容回答用户的提问,注意,你的回答风格应是幽默风趣的”,
    “user prompt”: “我今天有什么事务?”
    }
    通过如上 Prompt 的构造,我们可以让模型以幽默风趣的风格回答用户提出的问题。

LLM API使用

API 申请指引

DataWhale的API申请指南中很清楚描述了OPEN AI、文心一言、讯飞星火、智谱 GLM的API权限申请和API使用示例,大家可以移步观看。

下面小节记录了文心一言的使用过程~

实名认证

首先点击千帆大模型平台进行登录,初次登录的用户需要实名认证,这里推荐扫码登录。

创建应用

实名认证后,可以看到一下界面,点击应用接入,选择初始化的模型服务,点击确认后会生成应用相关的信息,

在这里插入图片描述

从下图中可以看到创建的应用的 API Key、Secret Key。

需要注意的是,千帆目前只有 Prompt模板、Yi-34B-Chat 和 Fuyu-8B公有云在线调用体验服务这三个服务是免费调用的,如果你想体验其他的模型服务,需要在计费管理处开通相应模型的付费服务才能体验。

在这里插入图片描述

我们将这里获取到的 API Key、Secret Key 填写至 .env 文件的 QIANFAN_AK 和 QIANFAN_SK 参数。如果你使用的是安全认证的参数校验,需要在百度智能云控制台-用户账户-安全认证页,查看 Access Key、Secret Key,并将获取到的参数相应的填写到 .env 文件的 QIANFAN_ACCESS_KEY、QIANFAN_SECRET_KEY。
( .env 文件见代码示例
在这里插入图片描述
然后执行以下代码,将密钥加载到环境变量中。

from dotenv import load_dotenv, find_dotenv

# 读取本地/项目的环境变量。

# find_dotenv() 寻找并定位 .env 文件的路径
# load_dotenv() 读取该 .env 文件,并将其中的环境变量加载到当前的运行环境中  
# 如果你设置的是全局的环境变量,这行代码则没有任何作用。
_ = load_dotenv(find_dotenv())

使用API

import qianfan

def gen_wenxin_messages(prompt):
    '''
    构造文心模型请求参数 messages

    请求参数:
        prompt: 对应的用户提示词
    '''
    messages = [{"role": "user", "content": prompt}]
    return messages


def get_completion(prompt, model="ERNIE-Bot", temperature=0.01):
    '''
    获取文心模型调用结果

    请求参数:
        prompt: 对应的提示词
        model: 调用的模型,默认为 ERNIE-Bot,也可以按需选择 Yi-34B-Chat 等其他模型
        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获取大模型的回答

get_completion("你好,介绍一下你自己", model="Yi-34B-Chat")

至此,已将上手体验了LLM的API。

Prompt Engineering

提示工程(Prompt Engineering)是指通过提示(Prompt)的开发和优化,与LLM进行交互,以引导其产生所期望的结果,而无需对模型进行更新。

提示工程可以帮助研究人员提升大型语言模型在处理复杂任务时的能力,比如问答和算术推理,或者提升生成式AI模型在特定任务场景下的性能和效果。通过合理设计和使用提示工程,可以赋能大模型,获得更加符合期待的结果,使其更好地适应各种任务和应用场景。

提示工程的基础要素
由于提示工程是通过对提示进行修改来达到目标,我们首要需要了解的就是提示。提示的写法多种多样,其中有四个重要要素:

提示工程中的提示可以包含以下要素:

  • 指令:明确说明希望语言模型执行的特定任务或指令。
  • 上下文:提供外部信息或额外的上下文,以引导语言模型更好地理解和响应。
  • 输入数据:包括用户输入的内容或问题,作为模型生成输出的依据。
  • 输出指示:指定所期望的输出类型或格式。

需要注意的是,提示的具体格式取决于所需任务类型,不是所有上述要素都是必需的。根据任务的不同,您可以选择包含适当的要素来指导语言模型的行为和输出结果。

for example

  • 写清晰的说明:GPT 没有读心术,因此如果你想要一个简短的输出,可以直接告诉它在100字左右。如果你想要一个小朋友能听懂的解释,可以直接告诉它讲给10岁的小朋友听,尽量浅显易懂些。
  • 提供参考文本:GPT 比最能侃的人还能侃,回答可能会胡编乱造,可能会南辕北辙。就像一些练习册可以帮助学生在考试中做得更好一样,你可以向GPT提供参考文本,帮助它回答的更精准可靠。
    将复杂任务分解为更简单的子任务:太复杂的任务,目前的 GPT4 处理起来还有点费劲儿,出错率比较高。因此需要你把任务拆分到 GPT4 可以处理的粒度,自己再组装每一步的结果。
  • 给GPT时间“思考”:如果被问到 17 乘以 28,人们不会立即知道答案,但可以花时间算出来。同样你需要 GPT 用推理链来一步步思考,而不是立马给出一个错误的答案。
  • 使用外部工具:人之所以成为万物主宰,很大原因就是会用工具。同样,你可以通过将其他工具的输出提供给 GPT4,来补偿 GPT4 的弱点。例如,代码执行引擎可以帮助 GPT4 做数学和运行代码。
  • 系统地测试变化:如果你能够系统地评估 GPT4 的能力,那么就能逐渐优化提高它的能力了。某些情况下,对 prompt 的修改可能会在某些个别的例子上提高表现,但在更具代表性的例子上导致整体表现下降。因此,为了确保 prompt 的改变效果是正面的,需要定义一个全面的测试套件。OpenAI开源了 evals 评测工具,

思考

1、System Prompt的妙用
每次在新建chatgpt对话时,都可以先定义System Prompt,及向gpt定义用户想要的领域、回答风格、回答模版等,这样够帮助AI更准确地理解我们的需求,并给出满足我们需求的答案。

例如需要快速解决es分组查询的问题,可以先定义好chatgpt的System Prompt:
你是有经验的es开发工程师,下面将会对你请教有关es的dsl问题。请充分思考,结合es官方文档XXX后给出回答,出现不会的问题可以回答不清楚,谢谢。

在上面的System Prompt中,用户主要对LLM说明了三个特征
1、es开发工程师
2、解决有关es的dsl
3、结合es官方文档
4、出现未知问题回答不清楚

这样LLM会在Completion中给出用户制定想要的答案(起码出现幻觉的机率变低)

总结

主要了解了LLM中的基础知识,包括输入提示词prompt、temperature(模型输出的温度系数,控制输出的随机程度,取值范围是 0~1.0,且不能设置为 0。温度系数越低,输出内容越一致。)以及Prompt Engineering中常用的调优技术,如:写清晰的说明、给LLM充足的思考时间…,只要prompt写得好,LLM回答才会更快返回符合用户的答案。
本次以百度的千帆大模型为载体,体验了LLM API的使用,从代码层面了解到LLM回答问题的过程,认识到LLM的基本输入参数:prompt、model、temperature。
偷瞄了第三节内容,知识库的搭建,选用的框架是我没接触过的Chroma,嘿嘿~期待一下吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1615462.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EelasticSearch的介绍和基于docker安装

1.概述 Elasticsearch 是一个基于 Apache Lucene 构建的开源分布式搜索引擎和分析引擎。它专为云计算环境设计,提供了一个分布式的、高可用的实时分析和搜索平台。Elasticsearch 可以处理大量数据,并且具备横向扩展能力,能够通过增加更多的硬…

AR爆发的前夜,Rokid站在了门口

文|刘俊宏 摆脱6寸的手机屏幕,栖居在300寸大屏的智慧生活是什么样子? 4月20日,Rokid在新品AR Lite空间计算套装的发布会上,“硬刚”了苹果的Vision Pro。 Rokid AR Lite空间计算套装 Rokid AR Lite与苹果Vision Pro…

必应搜索广告与谷歌搜索广告对比那个更好?

搜索引擎广告作为企业获取潜在客户的重要渠道之一,其效果直接关系到营销策略的成功与否。两大搜索引擎巨头——谷歌(Google)和必应(Bing)各自提供了广告平台,即谷歌广告(Google Ads)…

eNSP-路由引入与过滤简单配置

目录 实验要求 IP配置 配置动态路由协议 RIP OSPF 查看建邻情况 双向重发布 路由过滤 地址前缀列表 静默接口 实验要求 1、按照图示配置 IP 地址,R1,R3,R4 上使用 loopback 口模拟业务网段 2、R1 和R2 运行 RIPv2,R2&am…

Mendix是谁?作为致力于企业低代码服务平台的领头羊,它解决了哪些问题?

一、Mendix 成立的背景 Mendix的成立是为了解决软件开发中最大的问题:业务和IT之间的脱节。这一挑战在各个行业和地区都很普遍,很简单:业务需求通常被描述为IT无法正确解释并转化为软件。业务和IT之间缺乏协作的原因是传统的代码将开发过程限…

前端开发攻略---拖动归类,将元素拖拽到相应位置

1、演示 2、代码 <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"widthdevice-…

001-谷粒商城-微服务剖析

1、架构图 还是很强的&#xff0c;该有的都有 2、微服务模块 SpringCloudAlibaba组件包括 SentinelNacosRocketMQSeata 搭配SpringCloudAlibaba组件 OpenFeignGateWayRibbn gateway使用了SpringWebFlux&#xff0c;前几天研究到&#xff0c;为什么springboot不直接使用Spri…

私人密码管理储存库!Bitwarden 部署安装教程

日常生活中我们每个人都会拥有大量网站或社交平台帐号&#xff0c;时间久远了密码很容易忘记。因此&#xff0c;像 1Password 等密码管理 同步 一键登录的工具成为了很多人的首选。 然而 1Password 毕竟要付费&#xff0c;也有人会担心这类工具有隐私泄露的风险。其实&#…

【昇腾产品应用】英码科技EA500I基于昇腾Mind SDK实现实时人体关键点检测

在教育、体育、安防、交通、医疗等领域中&#xff0c;实时人体关键点检测应用发挥着至关重要的作用&#xff0c;比如在体育训练时&#xff0c;实时人体关键点检测可以精确、实时地捕捉运动员的动作&#xff0c;从而进行动作分析和优化&#xff1b;在安防应用场景中&#xff0c;…

AI边缘计算盒子+ThingSense管理平台,推动明厨亮灶智慧监管新篇章

背景随着“互联网”时代的浪潮汹涌而至&#xff0c;国家及各地政府纷纷在“十四五”规划中明确指出&#xff0c;强化食品安全管理&#xff0c;利用技术手段实现智慧监管是刻不容缓的任务。为此&#xff0c;各地正加速推进“互联网明厨亮灶”的建设步伐&#xff0c;实现系统对接…

VideoComposer: Compositional Video Synthesis with Motion Controllability

decompose videos into three distinct types of conditions: textual conditions, spatial conditions, temperal conditions 条件的内容&#xff1a; a. textual condition: coarse grained visual content and motions, 使用openclip vit-H/14的text encoder b. spatial co…

社会工程渗透测试教程(二)

原文&#xff1a;annas-archive.org/md5/db987a87e1478b8a8617c263c631b477 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第六章&#xff1a;通过有效的威胁建模确保价值 Richard Ackroyd&#xff0c;随机风暴有限公司高级安全工程师 大多数客户意识到他们需要社会…

Linux文件chattr/lsattr/Linux权限(搭建权限测试环境实战)引申到内部原理及Linux删除系统文件原理-7539字详谈

企业高薪思维: 每一个阶段什么时候是最重要的&#xff1f;&#xff08;快速定位&#xff09; 1.学习最重要的事情 &#xff08;学生阶段&#xff0c;找工作前阶段&#xff09; 2.家庭&#xff0c;女朋友 &#xff08;工作阶段/学生阶段&#xff0c;学习不受到影响&#xff09; …

网络常识!!!

网络常识!!! 一:网络的发展史二:关键的概念三:IP地址四:端口号二级目录二级目录二级目录二级目录三级目录 一:网络的发展史 从游戏方面发展历程进行理解: 从单机游戏-----游戏支持局域网对战-------游戏支持广域网对战-------移动端 (1)局域网对战:在同一个网吧里,不同的游戏…

快速部署stable diffusion@Ubuntu

Stable Diffusion可以根据文本描述生成相关的图像&#xff0c;是当前最热门的文生图模型。 在Ubuntu下&#xff0c;可以选择快速安装&#xff0c;或者手动一步步安装。 快速安装 使用文档中的方法&#xff0c;先下载一个sh文件&#xff0c;然后执行这个文件&#xff0c;就自动…

UUPSUpgradeable部署合约和升级合约

文章目录 写一个合约1. 使用代理部署 并添加拥有者2. 没有name number为103. 使用代理升级部署 填写上面代理的合约地址4. 合约地址没有变&#xff0c;但是添加了name&#xff0c;并且保存了number的属性值 写一个合约 // SPDX-License-Identifier: MIT // Compatible with Op…

GNU Radio使用Python Block实现模块运行时间间隔获取

文章目录 前言一、timestamp_sender 模块二、timestamp_receiver 模块三、测试 前言 GNU Radio 中没有实现测量两个模块之间的时间测量模块&#xff0c;本文记录一下通过 python block 制作一个很简单的测时 block。 一、timestamp_sender 模块 使用 python block 做一个发送…

pyCharm导入pyspark中的sparkconf和sparkcontext错误

背景&#xff1a;学习黑马程序员python课程的pyspark实战部分时按照下图导入pysark包时发现sparkconf和sparkcontext无法导入和运行。 首先想到是不是在CMD窗口下载的pySpark路径及安装是否正确&#xff1f; 通过下图发现第三方库都安装正确&#xff0c;然后就考虑库的路径&a…

今日arXiv最热NLP大模型论文:浙江大学:蒸一蒸,多Agent变成单一模型,效果更好

“团结就是力量”&#xff0c;面对复杂多变的现实环境&#xff0c;multi-agent应运而生。相较于单打独斗的single-agent&#xff0c;multi-agent集结了多个功能各异的LLM&#xff0c;共同攻克难关。然而&#xff0c;这种协同作战的方式也带来了沉重的推理负担&#xff0c;限制了…

那些早期的iax和SIP软电话软件界面,看看你见过几个?

目录 一些iax/sip软电话UI图片SIP软电话的界面怎么设计SIP软电话的功能有哪些 早期voip发展中&#xff0c;很多公司开发了自己的SIP软电话&#xff0c;有些已经不存在了&#xff0c;有些还在使用中&#xff0c;比如X-Lite&#xff0c;Zoiper等等&#xff0c;我们一起看看这些早…