成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

OpenAI前研究科學家開源面向未來的提示工程庫 ell,重新定義提示工程

發布于 2024-9-12 10:20
瀏覽
0收藏

在前面的文章里,我們介紹了很多有關提示工程的前沿技術與工具,它們都揭示了一個共識性方向,就是提示工程不僅僅是人機對話的語言藝術,更是一個持續迭代優化的系統性軟件工程。近日,OpenAI前研究科學家william對外正式開源了一個號稱面向未來的提示工程庫,名為 ell[1],它將提示視為函數,并提供了一系列強大的工具來優化和管理提示。

在這個庫中有一些核心設計理念值得大家學習借鑒。

OpenAI前研究科學家開源面向未來的提示工程庫 ell,重新定義提示工程-AI.x社區

提示是程序,而不是字符串

在傳統的提示工程中,我們通常將提示視為簡單的字符串。然而,ell 顛覆了這一觀念,將提示視為程序。通過這種方式,我們可以將提示封裝成獨立的子程序,稱為語言模型程序(Language Model Program, LMP)。這些 LMP 是完全封裝的函數,可以生成字符串提示或消息列表,發送到各種多模態語言模型。

讓我們從一個傳統的 API 調用示例開始,看看如何使用 ell 實現相同的功能。以下是使用 OpenAI Chat Completion API 的簡單示例:

import openai

openai.api_key = "your-api-key-here"

messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "Say hello to Sam Altman!"}
]

response = openai.ChatCompletion.create(
    model="gpt-4o",
    messages=messages
)

print(response['choices'][0]['message']['content'])

現在,讓我們看看如何使用 ell 實現相同的結果:

import ell

@ell.simple(model="gpt-4o")
def hello(name: str):
    """You are a helpful assistant."""  # 系統提示
    return f"Say hello to {name}!"  # 用戶提示

greeting = hello("Sam Altman")
print(greeting)

ell? 通過鼓勵你將提示定義為功能單元來簡化提示。在這個示例中,hello 函數通過文檔字符串定義系統提示,通過返回字符串定義用戶提示。提示的用戶只需調用定義的函數,而不需要手動構建消息。在此基礎上,我們可以進一步地改進提示。

import ell
import random

def get_random_adjective():
    adjectives = ["enthusiastic", "cheerful", "warm", "friendly"]
    return random.choice(adjectives)

@ell.simple(model="gpt-4o")
def hello(name: str):
    """You are a helpful assistant."""
    adjective = get_random_adjective()
    return f"Say a {adjective} hello to {name}!"

greeting = hello("Sam Altman")
print(greeting)

在這個示例中,我們的 hello? LMP 依賴于 get_random_adjective? 函數。每次調用 hello? 時,它都會生成一個不同的形容詞,創建動態、多樣的提示。顯然,ell 可使提示更具可讀性、可維護性和可重用性。

提示工程是一個優化過程

提示工程的過程類似于機器學習中的優化過程,需要多次迭代。由于 LMP 只是函數,ell 提供了豐富的工具來支持這一過程。

OpenAI前研究科學家開源面向未來的提示工程庫 ell,重新定義提示工程-AI.x社區

ell 通過靜態和動態分析,提供了提示的自動版本控制和序列化,并生成自動提交消息到本地存儲。這一過程類似于機器學習訓練中的檢查點,但不需要特殊的 IDE 或編輯器——只需使用常規的 Python 代碼即可。

import ell

ell.init(store='./logdir')  # 版本控制你的 LMP 和它們的調用

# 定義你的 LMP
hello("strawberry")  # LMP 的源代碼和調用被保存到存儲中

同時,ell 提供了一個名為 Ell Studio 的本地開源工具,可用于提示版本控制、監控和可視化。通過 Ell Studio,你可以將提示優化過程科學化,并在問題出現之前捕捉到回歸。

優雅實現測試時計算

從演示到實際應用,通常需要多次調用語言模型。這不僅僅是簡單的字符串拼接,而是一個復雜的編程過程。通過強制功能分解問題,ell 使得在可讀和模塊化的方式中實現測試時計算變得容易。

OpenAI前研究科學家開源面向未來的提示工程庫 ell,重新定義提示工程-AI.x社區

import ell

@ell.simple(model="gpt-4o-mini", temperature=1.0, n=10)
def write_ten_drafts(idea: str):
    """You are an adept story writer. The story should only be 3 paragraphs"""
    return f"Write a story about {idea}."

@ell.simple(model="gpt-4o", temperature=0.1)
def choose_the_best_draft(drafts: List[str]):
    """You are an expert fiction editor."""
    return f"Choose the best draft from the following list: {'\\n'.join(drafts)}."

drafts = write_ten_drafts(idea)
best_draft = choose_the_best_draft(drafts)  # 從10個草稿中選擇最佳草稿

測試時計算(Test-Time Computation)是機器學習和深度學習中的一個概念,指的是在模型推理階段(也就是測試時)進行額外的計算或處理,以提高模型的性能或適應性。這種方法通常用于解決訓練數據和測試數據之間存在差異的問題,或者在不重新訓練模型的情況下提高模型的泛化能力。其核心思路是不重新訓練模型,而是在模型實際使用時進行額外的處理,以提高模型的表現。類似于人類在應用所學知識時會根據具體情況做出適當靈活變通處理,而不是僵化執行。

每次調用語言模型都很重要

每次調用語言模型都非常寶貴,值得跟蹤分析。在實踐中,LLM 調用用于微調、蒸餾、k-shot 提示、從人類反饋中進行強化學習等。一個好的提示工程系統應該將這些作為一等公民概念捕捉。

OpenAI前研究科學家開源面向未來的提示工程庫 ell,重新定義提示工程-AI.x社區

除了存儲每個 LMP 的源代碼外,ell 還可以選擇性地本地保存每次調用語言模型的記錄。這使你能夠生成調用數據集,比較不同版本的 LMP 輸出,并充分利用提示工程的所有工件。

需要時復雜,不需要時簡單

使用語言模型通常只是傳遞字符串,但有時需要更復雜的輸出。ell? 提供了 @ell.simple? 和 @ell.complex 裝飾器,分別用于生成簡單字符串輸出和復雜的消息對象響應。

import ell

@ell.tool()
def scrape_website(url: str):
    return requests.get(url).text

@ell.complex(model="gpt-5-omni", tools=[scrape_website])
def get_news_story(topic: str):
    return [
        ell.system("""Use the web to find a news story about the topic"""),
        ell.user(f"Find a news story about {topic}.")
    ]

message_response = get_news_story("stock market")
if message_response.tool_calls:
    for tool_call in message_response.tool_calls:
        # 處理工具調用
        pass
if message_response.text:
    print(message_response.text)
if message_response.audio:
    # message_response.play_audio() 支持多模態輸出
    pass

多模態是一等公民

LLM 可以處理和生成各種類型的內容,包括文本、圖像、音頻和視頻。使用這些數據類型進行提示工程應該像處理文本一樣簡單。

from PIL import Image
import ell

@ell.simple(model="gpt-4o", temperature=0.1)
def describe_activity(image: Image.Image):
    return [
        ell.system("You are VisionGPT. Answer <5 words all lower case."),
        ell.user(["Describe what the person in the image is doing:", image])
    ]

# 從攝像頭捕捉圖像
describe_activity(capture_webcam_image())  # 輸出: "they are holding a book"

OpenAI前研究科學家開源面向未來的提示工程庫 ell,重新定義提示工程-AI.x社區

ell? 支持多模態輸入和輸出的豐富類型轉換。你可以在 LMP 返回的 Message 對象中內聯使用 PIL 圖像、音頻和其他多模態輸入。

提示工程庫不干擾你的工作流程

ell 設計為一個輕量級且不干擾的庫。它不要求你改變編碼風格或使用特殊的編輯器。

OpenAI前研究科學家開源面向未來的提示工程庫 ell,重新定義提示工程-AI.x社區

你可以繼續在你的 IDE 中使用常規的 Python 代碼來定義和修改提示,同時利用 ell? 的功能來可視化和分析你的提示。你可以逐步從 langchain 遷移到 ell,一次一個函數。

結語

ell? 通過將提示視為函數,并提供一系列強大的工具,重新定義了提示工程。它不僅簡化了提示的創建和管理過程,還使得提示優化變得科學化和系統化。無論你是提示工程的新手還是經驗豐富的專家,ell 都能為你提供有價值的支持。

參考資料

[1]ell: https://docs.ell.so/

本文轉載自 ??AI工程化??,作者: ully

收藏
回復
舉報
回復
相關推薦
主站蜘蛛池模板: 中文字幕一区二区三区乱码图片 | 一本在线| 久久久久久久久久一区二区 | 亚洲一区二区免费 | 一区二区在线免费观看视频 | 插插插干干干 | 99精品一级欧美片免费播放 | 天天精品在线 | 国产在线一区二区三区 | 亚洲精品第一页 | 在线中文字幕视频 | 一区二区三区欧美 | 精品久久久久久红码专区 | 久久久区 | 亚洲国产一区二区在线 | www.亚洲成人网 | 337p日本欧洲亚洲大胆鲁鲁 | 国产精品日韩欧美一区二区 | 男女在线免费观看 | 欧美一级片在线观看 | 中文字幕 在线观看 | 综合国产| 久久久91| 久久伊 | 九色在线视频 | 毛片av免费在线观看 | 99久久精品视频免费 | 亚洲成人免费观看 | 97精品超碰一区二区三区 | 精品欧美黑人一区二区三区 | 中文字幕在线观看第一页 | 欧美99 | 毛片网在线观看 | 午夜精品福利视频 | 国产精品人人做人人爽 | 性视频一区 | 欧美日韩免费在线 | 日韩在线观看一区二区三区 | 久久一区精品 | 日本中文字幕日韩精品免费 | 国产精品一区二区视频 |