- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 ChatGPT API 生成许多产品的描述和简短描述。我开发了一个可以生成它的工具,但是生成和创建它需要大约 40 秒。
我想知道是否有解决方案来优化这个生成时间。我尝试了很多方法,例如并行发送两个 API 调用或使用 API 的参数(例如,温度
等)。
如果有人有任何解决方案,这是我的代码:
import openai
import random
openai.api_key = 'OPENAI-KEY'
def generateDescription(description, title):
model = "gpt-3.5-turbo"
# Generate a random word limit between 400 and 600
max_words = random.randint(400, 600)
input_text = "Reformule cette description pour qu'elle soit affichée dans un site présentant le produit" + title + \
" et qu'elle fasse entre 400 et 600 mots. Tu dois donc respecter les règles de google et du référencement naturel afin d'optimiser le référencement au maximum.Tu dois appliquer des mots clés spécifiques au produit ainsi qu'utiliser une architecture spéciale ayant 3 parties avec des balises h2: la premiere étant la présentation du produit, la deuxième étant les recommandations d'utilisations et la troisième étant les précautions lors de l'emploi du produit.Voici un exemple d'architecture d'une autre fiche produit dont tu dois t'inspirer et utiliser le même style donné dans les balises: <h2 dir=\"ltr\" style=\"text-align: center;\"><span> Les e-liquides Alfaliquid sont fabriqués en France. </span></h2> <p style=\"text-align: center;\"></p><p style=\"text-align: justify;\"><span style=\"font-family: Montserrat, sans-serif;\"> Grand acteur dans l’élaboration de e-liquide pour e-cigarette, Alfaliquid est un fabricant qui nous montre qu’il n’a pas froid aux yeux. Toujours animée de générosité et de créativité sans bornes, cette marque originaire de la France a su attirer l’attention d’un grand nombre de vapoteurs. Cette notoriété étant régulièrement mise à l’épreuve, la marque propose différentes gammes de e-liquides aux consommateurs. On retrouve notamment la gamme So Fifty qui rassemble des recettes équilibrées et savoureuses. Les e-liquides Alfaliquid sont disponibles en flacon de 10ml et 50ml. </span></p><p style=\"text-align: justify;\"><span style=\"font-family: Montserrat, sans-serif;\"><span>Les arômes utilisés sont certifiés de qualité alimentaire. Cet e-liquide ne contient ni diacétyle, ni parabène, ni ambrox.</span></span></p><p></p><h2 dir=\"ltr\" style=\"text-align: center;\"><span>Recommandation </span></h2><p style=\"text-align: center;\"></p><ul><li dir=\"ltr\" aria-level=\"1\"><p dir=\"ltr\" role=\"presentation\"><span>Pour une efficacité optimale de vos e-liquides, veillez à les stocker dans un endroit sec à l’abri de la lumière.</span></p></li><li dir=\"ltr\" aria-level=\"1\"><p dir=\"ltr\" role=\"presentation\"><span>Afin que la saveur ne s’altère pas, pensez à bien reboucher votre flacon après utilisation.</span></p></li></ul><p></p><h2 dir=\"ltr\" style=\"text-align: center;\"><span>Précaution d’emploi </span></h2><p style=\"text-align: center;\"></p><ul><li dir=\"ltr\" aria-level=\"1\"><p dir=\"ltr\" role=\"presentation\"><span>Tenir hors de portée des enfants.</span></p></li><li dir=\"ltr\" aria-level=\"1\"><p dir=\"ltr\" role=\"presentation\"><span>La nicotine liquide est toxique par contact cutané.</span></p></li><li dir=\"ltr\" aria-level=\"1\"><p dir=\"ltr\" role=\"presentation\"><span>En cas de contact avec la peau : laver abondamment à l’eau et au savon.</span></p></li><li dir=\"ltr\" aria-level=\"1\"><p dir=\"ltr\" role=\"presentation\"><span>En cas d’ingestion ou de malaise, contactez un centre antipoison ou un médecin et montrez l’étiquette du flacon d’e-liquide.</span></p></li><li dir=\"ltr\" aria-level=\"1\"> <p dir=\"ltr\" role=\"presentation\"><span>Produit destiné uniquement à la recharge de cigarette électronique.</span></p> </li> </ul>.Tu n'es également pas un magasin ni quelqu'un travaillant pour la marque de ce produit, donc pas de formules souhaitant la bienvenue ou formules de politesse. Tu dois rester neutre dans tes propos et uniquement présenter le produit avec ses saveurs (si c'est un liquide ou un arôme) et ses caractéristiques spécifiques. La description a reformulée est : " + description
response = openai.ChatCompletion.create(
model=model,
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": input_text}
],
temperature=0.2,
n=1
)
description = response['choices'][0]['message']['content'].strip()
return description
def generateShortDescription(description, title):
model = "gpt-3.5-turbo"
# Generate a random character limit between 400 and 600
max_characters = random.randint(600, 650)
input_text = "Reformule cette description pour qu'elle soit affichée dans un site présentant le produit" + title + \
" et qu'elle fasse minimum 550 caractères et maximum 650 caractères (c'est une description courte). Tu dois donc respecter les règles de google et du référencement naturel afin d'optimiser le référencement au maximum.Tu dois appliquer des mots clés spécifiques au produit ainsi qu'utiliser une architecture spéciale.Tu n'es également pas un magasin ni quelqu'un travaillant pour la marque de ce produit, donc pas de formules souhaitant la bienvenue ou formules de politesse. Tu dois rester neutre dans tes propos et uniquement présenter le produit. La description a reformulée est : " + description
response = openai.ChatCompletion.create(
model=model,
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": input_text}
],
temperature=0.2,
n=1
)
generated_text = response['choices'][0]['message']['content'].strip()
# Ensure the generated text doesn't exceed the maximum characters and ends with a complete sentence
last_sentence_end = generated_text.rfind(".", 0, max_characters)
final_description = generated_text[:last_sentence_end + 1]
return final_description
@app.route('/generationDescription', methods=['POST'])
def generate_texts():
description = request.form.get('description')
title = request.form.get('title')
shortDescription = generateShortDescription(description, title)
description = generateDescription(description, title)
response_data = {
"description": description,
"shortDescription": shortDescription
}
return jsonify(response_data)
最佳答案
为了更快地恢复完成,您唯一可以控制的是您选择的模型,但您已经选择了 gpt-3.5-turbo
,这是最快的模型之一。
但是...
如果我是你,我会做的是使用 stream
范围。如果您将其设置为 true
,您将以与 ChatGPT 相同的方式获得响应(即逐个 token )。实际上,用户可以更快地看到完成情况,因为您的聊天机器人从 OpenAI API 获取第一个 token 后会立即显示该 token ,而无需等待收到完整的完成信息。
请参阅下面的简单 Python 示例 ( source )。
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
# Example of an OpenAI ChatCompletion request with stream=True
# https://platform.openai.com/docs/guides/chat
# record the time before the request is sent
start_time = time.time()
# send a ChatCompletion request to count to 100
response = openai.ChatCompletion.create(
model='gpt-3.5-turbo',
messages=[
{'role': 'user', 'content': 'Count to 100, with a comma between each number and no newlines. E.g., 1, 2, 3, ...'}
],
temperature=0,
stream=True # again, we set stream=True
)
# create variables to collect the stream of chunks
collected_chunks = []
collected_messages = []
# iterate through the stream of events
for chunk in response:
chunk_time = time.time() - start_time # calculate the time delay of the chunk
collected_chunks.append(chunk) # save the event response
chunk_message = chunk['choices'][0]['delta'] # extract the message
collected_messages.append(chunk_message) # save the message
print(f"Message received {chunk_time:.2f} seconds after request: {chunk_message}") # print the delay and text
# print the time delay and text received
print(f"Full response received {chunk_time:.2f} seconds after request")
full_reply_content = ''.join([m.get('content', '') for m in collected_messages])
print(f"Full conversation received: {full_reply_content}")
关于python - OpenAI ChatGPT (GPT-3.5) API : How do I make the API return a completion faster?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76962144/
我并不总是编写 make 文件,但当我这样做时,我喜欢尝试并写好它们。试图使界面与其他开发人员的期望一致始终是一项艰巨的任务。我正在寻找的是所有常见的 make some clean (GNU) ma
例如,我在运行 makefile 时收到这样的错误: make[3]: *** [/home/ziga/Downloads/openwrt/rakun_openwrt/staging_dir/ho
我必须创建一个 Makefile,它从不同文件夹中的 .c 文件创建单个可执行文件。 .c 文件包含来自任何这些文件夹的头文件。根目录有3个子目录x/y、x/z、a,所有这些子目录都有一些.c和.h文
您好,我有一个简单的 MakeFile,其中包含: clean: rm -f ex1 但是当我运行命令make clean 时,出现以下错误: make: *** No rule to mak
我已经为一些软件安装了它,但现在我根本不使用那个软件,所以我需要移除MinGW才能使用Cygwin进行Android开发。。我使用的是64位Windows 7
以下是针对我遇到的问题的简化生成文件: all: /tmp/makey/../filey @echo All done /tmp/filey: @echo Filey 当我运行 mak
获取错误: make: *** No rule to make target all. Stop." 在安装nagios主机期间运行此命令make all 最佳答案 可能的常见错误: 确保将文件命名为
当使用 -jN 运行 gnu-make 规则时,make 会创建 jobserver用于管理跨子制造商的工作数量。此外,您可以通过在 make 配方前添加 + 前缀来“将作业服务器环境传递”到 mak
使用 GNU Make 4.1 概括 我调用一个子品牌 b.mk来自生成文件 a.mk .b.mk被调用以确保构建子系统。 有时我想强制一个目标为 a.mk重制: make -f a.mk --al
这个问题与问题 2543127 的精神相似。 . 我有一个带有头文件列表的 gnu makefile。每个头文件可能位于不同的目录中,例如, HEADERS = $(wildcard *.h) $(w
假设我有以下 GNU make 目标: create_dir: @mkdir objects build_asm: $(ASM_FILES) @echo
我有一个具有以下结构的 Makefile(工作示例)。 .PHONY: image flashcard put-files put-files: @echo "=== put-files" i
我想要一个这样的makefile: cudaLib : # Create shared library with nvcc ocelotLib : # Create shared li
有没有比更好的方法来获取 GNU make 变量的第一个字符 FIRST=$(shell echo $(VARIABLE) | head -c 1) (不仅笨重而且还要调用外部shell)? 最佳答案
我通常使用像 cmake 这样的高级构建系统来构建我的 C/C++ 代码。但是由于各种原因,我直接使用 GNU make。 我正在进行递归构建,其中每个目录都有一个 makefile。 我最近不得不将
我通常使用像 cmake 这样的高级构建系统来构建我的 C/C++ 代码。但是由于各种原因,我直接使用 GNU make。 我正在进行递归构建,其中每个目录都有一个 makefile。 我最近不得不将
我安装了最新的mingw,发现没有mingw32-make了。有make.exe,所以我想知道最近是否将mingw32-make重命名为make.exe。 最佳答案 我不知道您从哪里获得 MinGW,
我正在使用 CentOS,但由于一个错误,许多软件包被删除了。所以我没有 yum 和 rpm。所以我想从源代码手动制作 yum,但我也没有制作。我知道一切都会用“制作包”制作。但是 make 自己呢?
考虑这个Makefile: .PHONY: all all: main.txt main.txt: build/main.txt cp build/main.txt . %/main.txt:
假设目录输入中有 1000 个扩展名为 .xhtml 的文件,并且这些文件的某个子集(输出路径在 $(FILES) 中)需要通过 xslt 转换为目录输出中具有相同名称的文件.一个简单的 make 规
我是一名优秀的程序员,十分优秀!