原创 金色传说大聪明 2024-12-08 19:31 广东
看我手势
3,2,1 - 上链接!
先吐槽下:
OpenAI 鸽了周末的发布
AGI 被推迟了 4 天(毕竟俩周末)
但同时,OpenAI 最近偷偷做了个更新,还挺实用:
Predicted Outputs 预测性输出,聚焦于内容修改,而不是内容生成
简单来说:
如果要修改的文件很大(比如50页的合同),
但修改的内容很少的时候(你的银行帐号),
模型就会聚焦于修改,而不是生成,很快的出结果。
这个功能,在代码生成中,更是非常实用。
这东西有用
来,先品一品这段代码,会出现在电商系统里:
# ... (你的电商项目其他代码) ...
class 订单:
def __init__(self, 订单编号, 用户名, 商品列表, 总价, 下单时间, 优惠信息):
self.订单编号 = 订单编号
self.用户名 = 用户名
self.商品列表 = 商品列表
self.总价 = 总价
self.下单时间 = 下单时间
self.优惠信息 = 优惠信息
def 打印订单详情(self):
print(f"订单编号:{self.订单编号}")
print(f"用户名:{self.用户名}")
print("商品列表:")
for 商品 in self.商品列表:
print(f" - {商品.名称} x {商品.数量},单价:{商品.价格}")
print(f"总价:{self.总价}")
print(f"下单时间:{self.下单时间}")
if self.优惠信息:
print(f"优惠信息: {self.优惠信息}")
# ... (你的电商项目其他代码) ...
现在,运营小姐姐提了个需求:为了财务对账方便,需要在打印订单详情 的时候,把“用户名”改成“用户ID”。
可达鸭眉头一皱,事情并不简单。
整个项目里,可能有几百处,都直接或间接地用到了 用户名!思考再三,回复了句:“寄”
但无奈是小姐姐的需求,横竖都得给搞定。
比如用大家熟悉的方法:筛一下,然后把必要的内容丢给 GPT。但这有些显著问题:
累! 你还得手动去找,去挑,去组装上下文,这不还是体力活?
容易漏! 万一漏了点啥,或者上下文给错了,API 给你的结果,就可能是错的。
难维护! 项目越来越大,逻辑越来越复杂,你这手动维护的成本,噌噌往上涨。
而这时候,可以试试 Predicted Outputs。
在调用 API 的时候,附上一个“预测输出”, AI 就会基于这个进行修改,而不是从头生成。
代码说话
实用 Predicted Outputs 的时候,也不会特别复杂,参数的最后 prediction 字段就行了,比如下面这个
from openai import OpenAI
original_code = """
# ... (你的电商项目其他代码) ...
class 订单:
def __init__(self, 订单编号, 用户名, 商品列表, 总价, 下单时间):
self.订单编号 = 订单编号
self.用户名 = 用户名
self.商品列表 = 商品列表
self.总价 = 总价
self.下单时间 = 下单时间
def 打印订单详情(self):
print(f"订单编号:{self.订单编号}")
print(f"用户名:{self.用户名}")
print("商品列表:")
for 商品 in self.商品列表:
print(f" - {商品.名称} x {商品.数量},单价:{商品.价格}")
print(f"总价:{self.总价}")
print(f"下单时间:{self.下单时间}")
# ... (你的电商项目其他代码, 上百处用到了'用户名') ...
def 生成订单报表(订单列表):
for 订单 in 订单列表:
print(f"{订单.订单编号}, {订单.用户名}, {订单.总价}")
# ... (你的电商项目其他代码) ...
"""
refactor_prompt = "将代码中所有用到 '用户名' 的地方,都改成 '用户ID',并添加一个'优惠信息'字段。"
client = OpenAI()
completion = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "user", "content": refactor_prompt},
{"role": "user", "content": original_code},
],
prediction={"type": "content", "content": original_code}, # 使用原始代码作为预测
)
print(completion.choices[0].message.content)
print(completion.usage)
然后就会获得这个,返回速度相当快:
为了将代码中所有用到的“用户名”改为“用户ID”并添加一个“优惠信息”字段,你需要修改类定义和相关的方法。下面是相应的修改:
```python
# ... (你的电商项目其他代码) ...
class 订单:
def __init__(self, 订单编号, 用户ID, 商品列表, 总价, 下单时间, 优惠信息=None):
self.订单编号 = 订单编号
self.用户ID = 用户ID
self.商品列表 = 商品列表
self.总价 = 总价
self.下单时间 = 下单时间
self.优惠信息 = 优惠信息
def 打印订单详情(self):
print(f"订单编号:{self.订单编号}")
print(f"用户ID:{self.用户ID}")
print("商品列表:")
for 商品 in self.商品列表:
print(f" - {商品.名称} x {商品.数量},单价:{商品.价格}")
print(f"总价:{self.总价}")
if self.优惠信息:
print(f"优惠信息:{self.优惠信息}")
print(f"下单时间:{self.下单时间}")
# ... (你的电商项目其他代码, 上百处用到了'用户ID') ...
def 生成订单报表(订单列表):
for 订单 in 订单列表:
print(f"{订单.订单编号}, {订单.用户ID}, {订单.总价}, {订单.优惠信息}")
# ... (你的电商项目其他代码) ...
```
在这个修改版本中:
- 将所有用到“用户名”的地方替换为“用户ID”。
- 在`订单`类的初始化方法中添加了一个可选的参数“优惠信息”。
- 更新了`打印订单详情`方法,以显示“优惠信息”。
- 更新了`生成订单报表`函数以包含“优惠信息”字段。
请确保在整个代码中不同部分与“用户名”相关的逻辑都做了对应的更改。由于无法完全查看你的完整代码库,所以需要你根据此模板做同样的修改。
查看返回参数,显示如下:
CompletionUsage(
completion_tokens=671,
prompt_tokens=313,
total_tokens=984,
completion_tokens_details=CompletionTokensDetails(accepted_prediction_tokens=26,
audio_tokens=0,
reasoning_tokens=0,
rejected_prediction_tokens=198),
prompt_tokens_details=PromptTokensDetails(audio_tokens=0, cached_tokens=0)
)
文本也能用
我每天会看大量的文档,然后发现...
很多的历史文档,是被“乱翻译”了,比如下面这个:
近年来,变压器模型在深度学习领域取得了重大突破。
变压器最初是为自然语言处理任务而设计的,但现在它已被广泛应用于计算机视觉和其他领域。
大语言模型,也称为法学硕士,是基于变压器架构的。
法学硕士可以生成高质量的文本,并用于各种应用,如机器翻译和文本摘要。我们的产品使用了最新的法学硕士技术。
如果我想把它回归成正常的文本,就可以
from openai import OpenAI
original_text = """
近年来,变压器模型在深度学习领域取得了重大突破。
变压器最初是为自然语言处理任务而设计的,但现在它已被广泛应用于计算机视觉和其他领域。
大语言模型,也称为法学硕士,是基于变压器架构的。
法学硕士可以生成高质量的文本,并用于各种应用,如机器翻译和文本摘要。我们的产品使用了最新的法学硕士技术。
"""
rewrite_prompt = "请将这段文本中的“变压器”改为“Transformer”,“法学硕士”改为“LLM”,并在所有中英文之间添加空格。"
client = OpenAI()
completion = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "user", "content": rewrite_prompt},
{"role": "user", "content": original_text},
],
prediction={"type": "content", "content": original_text}, # 使用原始文本作为预测
)
print(completion.choices[0].message.content)
print(completion.usage)
然后,我得到了:
近年来, Transformer 模型在深度学习领域取得了重大突破。
Transformer 最初是为自然语言处理任务而设计的, 但现在它已被广泛应用于计算机视觉和其他领域。
大语言模型, 也称为 LLM, 是基于 Transformer 架构的。
LLM 可以生成高质量的文本, 并用于各种应用, 如机器翻译和文本摘要。我们的产品使用了最新的 LLM 技术。
非常棒!
话说回来
好的 12 days 呢?
变成 12 working days了?
说好的 AGI 呢?
说好的 Sora 呢?
说好的发布会呢?
鸽子厂实锤了!