跳转到主要内容
AI 是一种新型的编程原语。大语言模型(LLM)让我们能够编写可以以常识方式处理非结构化信息的软件。 考虑这样一个任务:编写一个程序,从以下段落中提取人名列表:
这时,阿开亚人的其他首领们都整夜安睡,唯有阿特柔斯之子阿伽门农心绪不宁,无法入眠。正像赫拉的丈夫、闪电的主宰发出雷鸣,预示着大雨、冰雹、或是让大地变白的雪灾,又或是预示着残酷战争那张开的血盆大口,阿伽门农也同样发出一声声沉重的叹息,他的内心因焦虑而战栗。当他望向特洛伊平原,他惊异于伊利昂城前点燃的重重篝火…… ——《伊利亚特》,第十卷
对于人类来说,提取名字很简单,但仅使用传统编程却非常困难。编写一个能从任意段落中提取名字的通用程序则更难。 然而,使用 LLM,这项任务变得近乎简单。我们只需向 LLM 提供以下输入:
列出以下段落中的人名,用逗号分隔:这时,阿开亚人的其他首领们都整夜安睡,唯有阿特柔斯之子阿伽门农心绪不宁,无法入眠。正像赫拉的丈夫、闪电的主宰发出雷鸣,预示着大雨、冰雹、或是让大地变白的雪灾,又或是预示着残酷战争那张开的血盆大口,阿伽门农也同样发出一声声沉重的叹息,他的内心因焦虑而战栗。当他望向特洛伊平原,他惊异于伊利昂城前点燃的重重篝火…… ——《伊利亚特》,第十卷
输出结果将准确地显示为
阿伽门农, 阿特柔斯, 赫拉
将 LLM 集成到软件应用中就像调用 API 一样简单。虽然不同 LLM 的 API 细节可能有所不同,但大多数都已趋向于一些共同的模式
  • 对 API 的调用通常由包括 model(模型)标识符和 messages(消息)列表在内的参数组成。
  • 每条 message 都有一个 role(角色)和 content(内容)。
  • system(系统)角色可以被看作是对模型的指令
  • user(用户)角色可以被看作是要处理的数据
例如,我们可以使用 AI 编写一个通用的函数,从输入文本中提取名字。
import json
import os
import openai

openai.api_key = os.getenv("OPENAI_API_KEY")

def extract_names(text: str) -> list[str]:
    system_prompt = "You are a name extractor. The user will give you text, and you must return a JSON array of names mentioned in the text. Do not include any explanation or formatting."

    response = openai.ChatCompletion.create(
        model="gpt-4o",
        messages=[
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": text}
        ]
    )

    response = response.choices[0].message["content"]
    return json.loads(response)
使用 AI 构建允许软件完成新型的工作。LLM 能够理解抽象概念并采取行动。在获得检索系统和工具的访问权限后,LLM 可以以传统软件无法实现的方式自主执行任务。