当前位置: 首页 > news >正文

小试牛刀调整Prompt,优化Token消耗

262f84645106b2d037ba4a3dbeedc672.jpeg

在上一篇文章 荒腔走板Mac电脑本地部署 LLM 中介绍过本地部署大模型之后,可以通过定制 prompt 来实现 domain 提取等各种各样的需求。

但是实际上,部署本地大模型 这种方式对于个人开发者来说实在是不太友好。一方面需要投入大量资金确保设备的算力足够支撑LLM的训练和推理;另一方面本地部署的大模型的量级都不会太大,所以效果也不会太理想。

对于个人开发者来说,想开发一个 AI  应用,最快的方式就是集成某个大模型平台 API。这种情况下,所有的成本主要体现在 Token  花费。以下是各大 LLM 平台的 Token 价格:

通义千问

2c6ce7453e5cdfecee4d05dbc1651fc2.png

智普

9bdfda3f97fd568bad9f6d7ec6aadb81.png

百度文心Ernie

5c17e493dfb5db45fd83962f14999ba9.png

月之暗面 Kimi

6dd4ed0eb26cb98101385fcc5a007008.png

谷歌 Gemini

54d712139af2998c00ef8875079b0d78.png

Claude

925cd0de0d23654a2ad18cd834d31470.png

接下来我将使用通义千问平台实现一个伪需求,来看下具体的 Token 使用情况。

实际上各个平台都提供了一定量的免费Token,之所以采用通义千问,是因为通义千问相对便宜。

daa11af63ee58d3a734e27f1288f446d.gif

通义千问实现展览馆搜索

我将实现的伪需求是:列举某个城市的3个展览馆,并分别介绍每一个展览馆的一些藏品。

返回JSON格式

通过定制 Prompt,可以让大模型返回固定格式的数据,一种常用的格式就是 JSON。 Prompt 如下:

e305dff37e049014859f12f2bf0ae054.png

具体代码如下:

c21490446fde1988790ff148f1a1bdf5.png

返回结果如下图:

4045c9daeef9af2609beb08bd4359b9e.png

很明显,通义千问大模型返回的结果是符合我们需求的。但是请求时间使用了将近 17s,并且一次性消耗了 543 个 Token。1百万的Token量只能支持访问 1000000/543 = 1841 次请求。 

假设你开发的大模型应用比较受大众欢迎,有1000个日活用户,每个用户每天会请求10次请求。那你每天的 Token 消耗计算公式如下:

1000用户 * 10次请求 * 单次请求Token 543 = 5430000个

作为一名合格的穷人,一定要节约使用 Token。如何优化 prompt,尽量在不损失准确率的基础上,减少 token 的使用量,显得尤为重要。

精简 JSON 格式

在基于JSON格式的基础上,进行格式精简并删除非必要内容。在之前 Prompt 基础上新增如下内容:

c4b6bbd1e2ed47ca10c2e9c376e74e92.png

可以看出,Prompt新增了一行 "使用精简模式的JSON,删除一切不必要的空格和换行符号"。

具体修改代码如下:

45e54c88cbe75cc3f640edd6677e1d71.png

运行上述代码,最终返回结果如下:

090bfadd6ff7bda8bf3f6b0d354b0c39.png

明显可以看出性能有明显提升:推理耗时优化到8s,并且 Token 消耗也减少到393个。

使用自定义格式

实际上就算是精简后的JSON格式,依然是一种比较复杂的数据格式。我们可以通过自定义一种简单,进一步减少大模型推理的耗时以及Token使用。

比如以下格式:

4e472a296966f842e018031be21cc01e.png

上图中我们自定义的格式相比于JSON格式,虽然可读性很差,但是对于高性能的机器来说不算一件难事。我用 ! 符号代表一个JSON的Object,用 ? 符号代表一个字符串,最后用 # 符号代表数组对象。

具体修改代码如下:

8a1b9fcda8c7b48493fdb7fda2e75919.png

最终运行结果如下图:

f89ef25ad536c4458179432df98172df.png

通过自定义数据格式,到模型推理的时间和Token消耗被进一步优化。

Prompt Engineering 是一个不断持续优化的过程,但是也是有一些基本规则的。后面文章会尝试梳理如何写一个完善 Prompt 的基本准则。

f099f5d40af34143a5a6c77b87b7ff5f.gif

如果你喜欢本文

长按二维码关注

79fa291029eaaae72d036bc616bb2080.gif

23735b6a7674e0fb346684391753b0d0.jpeg

http://www.lryc.cn/news/525768.html

相关文章:

  • snippets router pinia axios mock
  • Visual Studio2019调试DLL
  • 深入解析:Docker 容器如何实现文件系统与资源的多维隔离?
  • vue项目中打包后的地址加载不出图片【五种解决方案】
  • 讯飞星火大模型将超越chatgpt?
  • 3D Vision--计算点到平面的距离
  • 《开源与合作:驱动鸿蒙Next系统中人工智能技术创新发展的双引擎》
  • Java 高级工程师面试高频题:JVM+Redis+ 并发 + 算法 + 框架
  • 【机器学习】嘿马机器学习(科学计算库)第11篇:Pandas,学习目标【附代码文档】
  • WordPress Fancy Product Designer插件Sql注入漏洞复现(CVE-2024-51818)(附脚本)
  • StarRocks强大的实时数据分析
  • Linux(Centos 7.6)命令详解:iconv
  • SpringBoot读取配置优先级顺序是什么?
  • VScode连接远程Linux服务器环境配置
  • 梯度下降法 (Gradient Descent) 算法详解及案例分析
  • docker 部署 java 项目详解
  • npm install 报错:Command failed: git checkout 2.2.0-c
  • Vue基础(2)
  • (长期更新)《零基础入门 ArcGIS(ArcScene) 》实验七----城市三维建模与分析(超超超详细!!!)
  • war包 | Docker部署flowable-ui
  • Java数据结构方面的面试试题以及答案解析
  • Qt 5.14.2 学习记录 —— 십구 事件
  • 国产编辑器EverEdit - 命令窗口应用详解
  • iOS开发设计模式篇第二篇MVVM设计模式
  • 【深度学习】3.损失函数的作用
  • 深入MapReduce——计算模型设计
  • 小黑日常积累:学习了CROSS APPLY字段,将sqlserver中字段通过分隔符拆分并统计
  • WebSocket知识点笔记(一)
  • 安宝特方案 | AR在供应链管理中的应用:提升效率与透明度
  • 基于Springboot + vue实现的美发门店管理系统