更新日志#

0.25 (2025-05-04)#

  • 新插件功能:register_fragment_loaders(register) 插件现在可以返回片段和附件的混合。 llm-video-frames 插件是第一个利用此机制的插件。 #972

  • 新 OpenAI 模型:gpt-4.1gpt-4.1-minigpt-41-nanoo3o4-mini#945#965#976

  • 新环境变量:LLM_MODELLLM_EMBEDDING_MODEL,用于设置要使用的模型,无需每次指定 -m model_id#932

  • 新命令:llm fragments loaders,用于列出插件提供的所有当前可用的片段加载器前缀。 #941

  • llm fragments 命令现在按片段首次使用的日期排序显示片段。 #973

  • llm chat 现在包含一个 !edit 命令,用于使用默认终端文本编辑器编辑提示。感谢 Benedikt Willi#969

  • 允许同时使用 -t--system#916

  • 修复了通过别名访问模型时无法遵守为该模型设置的任何默认选项的错误。 #968

  • 改进了 extra-openai-models.yaml 的文档。感谢 Rahim NathwaniDan Guido#950#957

  • llm -c/--continue 现在可以正确地与 -d/--database 选项一起工作。llm chat 现在接受 -d/--database 选项。感谢 Sukhbinder Singh#933

0.25a0 (2025-04-10)#

  • llm models --options 现在显示使用 API 密钥的模型的密钥和环境变量。感谢 Steve Morin#903

  • 添加了 py.typed 标记文件,因此 LLM 现在可以在使用 mypy 的项目中用作依赖项而不会出现警告。 #887

  • $ 字符现在可以在模板中通过转义为 $$ 来使用。感谢 @guspix#904

  • LLM 现在使用 pyproject.toml 而不是 setup.py#908

0.24.2 (2025-04-08)#

  • 修复了 Windows 上新功能 llm -t path/to/file.yaml 的一个错误。 #901

0.24.1 (2025-04-08)#

  • 现在可以使用 llm -t path/to/file.yaml 将模板指定为磁盘文件的路径。这使得它们与加载 -f 片段的方式保持一致。 #897

  • llm logs backup /tmp/backup.db 命令,用于备份您的 logs.db 数据库。 #879

0.24 (2025-04-07)#

支持 **片段** 以帮助为长上下文模型组装提示。改进了对 **模板** 的支持,以支持附件和片段。新的插件钩子用于为模板和片段提供自定义加载器。有关此版本的更多信息,请参阅 Long context support in LLM 0.24 using fragments and template plugins

新的 llm-docs 插件演示了这些新功能。像这样安装它

llm install llm-docs

现在你可以这样向 LLM 文档提问

llm -f docs: 'How do I save a new template?'

docs: 前缀由插件注册。该插件获取您已安装版本的 LLM 文档(来自 docs-for-llms 仓库)并将其用作提示片段以帮助回答您的问题。

另外两个新插件是 llm-templates-githubllm-templates-fabric

llm-templates-github 允许您在 GitHub 上分享和使用模板。您可以像这样针对模型运行我的 Pelican riding a bicycle 基准测试

llm install llm-templates-github
llm -t gh:simonw/pelican-svg -m o3-mini

这会执行存储在我的 simonw/llm-templates 仓库中的 此 pelican-svg.yaml 模板,使用新的仓库命名约定。

要分享您自己的模板,请在 GitHub 上您的用户帐户下创建一个名为 llm-templates 的仓库,并开始将 .yaml 文件保存到其中。

llm-templates-fabric 提供了一种类似的机制,用于从 Daniel Miessler 的 fabric collection 集合中加载模板

llm install llm-templates-fabric
curl https://simonwillison.net/2025/Apr/6/only-miffy/ | \
  llm -t f:extract_main_idea

主要新功能

  • 新的 片段功能。片段可用于从多个现有部分(URL、文件路径或先前使用的片段)组装长提示。这些片段将去重后存储在数据库中,避免浪费空间存储多个长上下文部分。使用示例:llm -f https://llm.datasette.com.cn/robots.txt 'explain this file'#617

  • llm logs 文件现在也接受 -f 片段引用,并且只会显示使用这些片段的已记录提示。

  • register_template_loaders() 插件钩子,允许插件注册新的 prefix:value 自定义模板加载器。 #809

  • register_fragment_loaders() 插件钩子,允许插件注册新的 prefix:value 自定义片段加载器。 #886

  • llm fragments 系列命令,用于浏览先前已记录到数据库的片段。

  • 新的 llm-openai plugin 插件提供对 **o1-pro** 的支持(LLM 核心使用的 OpenAI 机制不支持)。未来的 OpenAI 功能将迁移到此插件而不是 LLM 核心本身。

模板改进

  • llm -t $URL 选项现在可以接受 YAML 模板的 URL。 #856

  • 模板现在可以存储默认模型选项。 #845

  • 执行不使用 $input 变量的模板不再阻塞 LLM 等待输入,因此现在可以使用 llm -t pelican-svg -m model_id 来尝试不同的模型。 #835

  • 如果列出的模板文件之一包含无效的 YAML,llm templates 命令不再崩溃。 #880

  • 附件现在可以存储在模板中。 #826

其他更改

  • 新的 llm models options 系列命令,用于为特定模型设置默认选项。 #829

  • llm logs listllm schemas listllm schemas show 现在都接受一个 -d/--database 选项,其中包含一个可选的 SQLite 数据库路径。它们过去接受 -p/--path,但这与其他命令不一致。-p/--path 仍然有效,但已从 --help 中排除,并将在未来的 LLM 版本中移除。 #857

  • llm logs -e/--expand 选项用于展开片段。 #881

  • llm prompt -d path-to-sqlite.db 选项现在可用于将日志写入自定义 SQLite 数据库。 #858

  • llm similar -p/--plain 选项提供比默认 JSON 更易读的输出。 #853

  • llm logs -s/--short 现在截断时也包含提示的末尾。感谢 Sukhbinder Singh#759

  • 设置 LLM_RAISE_ERRORS=1 环境变量可以在提示期间引发错误而不是抑制它们,这意味着你可以运行 python -i -m llm 'prompt',然后在出错时使用 import pdb; pdb.pm() 进入调试器。 #817

  • 改进了 –help 输出,适用于 llm embed-multi#824

  • llm models -m X 选项,可以多次传递模型 ID,只查看这些模型的详细信息。 #825

  • OpenAI 模型现在接受 PDF 附件。 #834

  • llm prompt -q gpt -q 4o 选项 - 多次传递 -q searchterm 以对匹配所有这些字符串的第一个模型执行提示 - 当您不记得完整的模型 ID 时很有用。 #841

  • 使用 extra-openai-models.yaml 配置的 OpenAI 兼容模型 现在支持 supports_schema: truevision: trueaudio: true 选项。感谢 @adaitche@giuli007#819, #843

0.24a1 (2025-04-06)#

  • 新的 Fragments 功能。 #617

  • register_fragment_loaders() 插件钩子。 #809

0.24a0 (2025-02-28)#

  • Alpha 版本,带有实验性的 register_template_loaders() 插件钩子。 #809

0.23 (2025-02-28)#

支持 **schemas**,用于让支持的模型输出与指定 JSON schema 匹配的 JSON。有关此功能的背景信息,另请参阅使用 LLM schemas 从非结构化内容中提取结构化数据#776

  • 新的 llm prompt --schema '{JSON schema goes here} 选项,用于指定模型输出应使用的 schema。schemas 文档包含更多详细信息和教程。

  • Schemas 也可以使用简洁的 schema 规范来定义,例如 llm prompt --schema 'name, bio, age int'#790

  • Schemas 也可以通过传递文件名和其他几种方法来指定。 #780

  • 新的llm schemas 系列命令llm schemas listllm schemas showllm schemas dsl,用于调试新的简洁 schema 语言。 #781

  • 现在可以使用 llm --schema X --save template-name 或通过修改模板 YAML 将 Schemas 保存到模板中。 #778

  • llm logs 命令现在有了新选项,用于提取使用 schemas 收集的数据:--data--data-key--data-array--data-ids#782

  • 新的 llm logs --id-gt X--id-gte X 选项。 #801

  • 新的 llm models --schemas 选项,用于列出支持 schemas 的模型。 #797

  • model.prompt(..., schema={...}) 参数,用于从 Python 中指定 schema。这接受字典 JSON schema 定义或 Pydantic BaseModel 子类,详见Python API 文档中的 schemas

  • 默认的 OpenAI 插件现在在所有支持的模型上启用了 schemas。运行 llm models --schemas 获取列表。

  • llm-anthropicllm-gemini 插件已升级,为这些模型添加了 schema 支持。这里是如何向模型插件添加 schema 支持的文档。

其他小改动

  • GPT-4.5 preview 现在是支持的模型:llm -m gpt-4.5 'a joke about a pelican and a wolf' #795

  • 从 Python API 调用 model.prompt() 时,提示字符串现在是可选的,因此 model.prompt(attachments=llm.Attachment(url=url))) 现在可以工作了。 #784

  • extra-openai-models.yaml 现在支持 reasoning: true 选项。感谢 Kasper Primdal Lauritzen#766

  • LLM 现在依赖于 Pydantic v2 或更高版本。不再支持 Pydantic v1。 #520

0.22 (2025-02-16)#

另请参阅 LLM 0.22,带注释的发布说明

  • 提供使用 API 密钥的模型的插件现在可以继承新的 llm.KeyModelllm.AsyncKeyModel 类。这将导致 API 密钥作为新的 key 参数传递给它们的 .execute() 方法,并且意味着 Python 用户可以将密钥作为 model.prompt(..., key=) 传递 - 详见传递 API 密钥。插件开发者应查阅关于编写接受 API 密钥的模型的新文档。 #744

  • 新的 OpenAI 模型:chatgpt-4o-latest。此模型 ID 访问当前为 ChatGPT 提供支持的模型,该模型可能会在不发出警告的情况下更改。 #752

  • 新的 llm logs -s/--short 标志,以 YAML 格式返回匹配日志条目的极度缩短版本,其中包含截断的提示且不包含响应。 #737

  • llm modelsllm embed-models 现在都接受多个 -q 搜索片段。您现在可以使用 llm models -q gemini -q exp 搜索所有匹配“gemini”和“exp”的模型。 #748

  • 新的 llm embed-multi --prepend X 选项,用于在嵌入每个值之前在其前面加上一个字符串 - 这对于像 nomic-embed-text-v2-moe 这样要求段落以 "search_document: " 之类的字符串开头的模型很有用。 #745

  • response.json()response.usage() 方法现在有文档了。

  • 修复了一个错误,该错误导致从数据库加载的对话无法使用 asyncio 提示继续。 #742

  • 面向 macOS 用户的新插件:llm-mlx,它使用 Apple 的 MLX 框架为各种本地模型提供极高性能的访问

  • llm-claude-3 插件已重命名为 llm-anthropic

0.21 (2025-01-31)#

  • 新模型:o3-mini#728

  • o3-minio1 模型现在支持 reasoning_effort 选项,可设置为 lowmediumhigh

  • llm promptllm logs 现在有了 --xl/--extract-last 选项,用于提取响应中最后一个围起来的代码块 - 这是对现有 --x/--extract 选项的补充。 #717

0.20 (2025-01-22)#

  • 新模型,o1。此模型尚不支持流式传输。 #676

  • o1-previewo1-mini 模型现在支持流式传输。

  • 新模型,gpt-4o-audio-previewgpt-4o-mini-audio-preview#677

  • llm prompt -x/--extract 选项,仅返回响应中第一个围起来的代码块的内容。尝试 llm prompt -x 'Python function to reverse a string'#681

    • 使用 llm ... --save x 创建模板现在支持 -x/--extract 选项,该选项会保存到模板中。YAML 模板可以使用 extract: true 设置此选项。

    • 新的 llm logs -x/--extract 选项从匹配的日志响应中提取第一个围起来的代码块。

  • 新的 llm models -q 'search' 选项,返回不区分大小写匹配搜索查询的模型。 #700

  • 安装文档现在也包含 uv。感谢 Ariel Marcus#690#702

  • llm models 命令现在在列表底部显示当前默认模型。感谢 Amjith Ramanujam#688

  • 插件目录 现在包括 llm-venicellm-bedrockllm-deepseekllm-cmd-comp

  • 修复了一个错误,该错误导致某些依赖版本组合可能引起 Client.__init__() got an unexpected keyword argument 'proxies' 错误。 #709

  • OpenAI 嵌入模型现在可以使用其全名 text-embedding-ada-002text-embedding-3-smalltext-embedding-3-large 进行访问 - 先前的名称仍然作为别名受支持。感谢 web-sst#654

0.19.1 (2024-12-05)#

  • 修复了一个错误,该错误导致 llm.get_models()llm.get_async_models() 多次返回相同的模型。 #667

0.19 (2024-12-01)#

  • 响应使用的 token 现在记录到新的 input_tokensoutput_tokens 整数字段以及一个 token_details JSON 字符串字段中,适用于默认的 OpenAI 模型和实现此功能的其他插件中的模型。 #610

  • llm prompt 现在接受 -u/--usage 标志,用于在响应末尾显示 token 使用情况。

  • llm logs -u/--usage 显示日志响应的 token 使用信息。

  • llm prompt ... --async 响应现在记录到数据库中。 #641

  • llm.get_models()llm.get_async_models() 函数,此处有文档#640

  • response.usage() 和 async 响应 await response.usage() 方法,返回一个 Usage(input=2, output=1, details=None) 数据类。 #644

  • response.on_done(callback)await response.on_done(callback) 方法,用于指定响应完成后要执行的回调函数,此处有文档#653

  • 修复了在 Windows 11 上运行 llm chat 的错误。感谢 Sukhbinder Singh#495

0.19a2 (2024-11-20)#

0.19a1 (2024-11-19)#

  • response.usage() 和 async 响应 await response.usage() 方法,返回一个 Usage(input=2, output=1, details=None) 数据类。 #644

0.19a0 (2024-11-19)#

  • 响应使用的 token 现在记录到新的 input_tokensoutput_tokens 整数字段以及一个 token_details JSON 字符串字段中,适用于默认的 OpenAI 模型和实现此功能的其他插件中的模型。 #610

  • llm prompt 现在接受 -u/--usage 标志,用于在响应末尾显示 token 使用情况。

  • llm logs -u/--usage 显示日志响应的 token 使用信息。

  • llm prompt ... --async 响应现在记录到数据库中。 #641

0.18 (2024-11-17)#

  • 初步支持 async 模型。插件现在可以提供一个 AsyncModel 子类,可以使用新的 llm.get_async_model(model_id) 方法在 Python API 中访问。详见Python API 文档中的 async 模型在插件中实现 async 模型#507

  • 所有 OpenAI 模型现在都包含 async 模型,因此像 llm.get_async_model("gpt-4o-mini") 这样的函数调用将返回一个 async 模型。

  • gpt-4o-audio-preview 模型可用于向 GPT-4o 音频模型发送音频附件。 #608

  • 现在可以在不需要提示的情况下发送附件。 #611

  • llm models --options 现在包含模型是否支持附件的信息。 #612

  • llm models --async 显示可用的 async 模型。

  • 自定义 OpenAI 兼容模型如果不支持流式传输,现在可以在 YAML 中标记为 can_stream: false。感谢 Chris Mungall#600

  • 修复了 OpenAI 用量数据错误地序列化为 JSON 的错误。 #614

  • 音频附件的 MIME 类型标准化为 audio/wav 而不是 audio/wave#603

0.18a1 (2024-11-14)#

  • 修复了对话对于 async OpenAI 模型不起作用的错误。 #632

  • __repr__ 方法,适用于 ResponseAsyncResponse

0.18a0 (2024-11-13)#

**async 模型**的 Alpha 支持。 #507

多个小改动

0.17 (2024-10-29)#

支持**附件**,允许多模态模型接受图像、音频、视频和其他格式。 #578

默认的 OpenAI gpt-4ogpt-4o-mini 模型现在都可以使用 JPEG、GIF、PNG 和 WEBP 图像进行提示。

CLI 中的附件可以是 URL

llm -m gpt-4o "describe this image" \
  -a https://static.simonwillison.net/static/2024/pelicans.jpg

或文件路径

llm -m gpt-4o-mini "extract text" -a image1.jpg -a image2.jpg

或二进制数据,可能需要使用 --attachment-type 来指定 MIME 类型

cat image | llm -m gpt-4o-mini "extract text" --attachment-type - image/jpeg

附件也可用于Python API

model = llm.get_model("gpt-4o-mini")
response = model.prompt(
    "Describe these images",
    attachments=[
        llm.Attachment(path="pelican.jpg"),
        llm.Attachment(url="https://static.simonwillison.net/static/2024/pelicans.jpg"),
    ]
)

提供替代模型的插件可以支持附件,详见多模态模型的附件

最新的 **llm-claude-3** 插件现在支持 Anthropic 的 Claude 3 和 3.5 模型的附件。**llm-gemini** 插件支持 Google 的 Gemini 1.5 模型的附件。

本次发布中还包含:OpenAI 模型现在即使在响应进行流式传输时也会将其 "usage" 数据记录到数据库中。这些记录可以使用 llm logs --json 查看。 #591

0.17a0 (2024-10-28)#

**附件**的 Alpha 支持。 #578

0.16 (2024-09-12)#

  • OpenAI 模型现在使用内部的 self.get_key() 机制,这意味着它们可以从 Python 代码中使用,并且会拾取使用 llm keys setOPENAI_API_KEY 环境变量配置的密钥。 #552。此代码现在可以正常工作

    import llm
    print(llm.get_model("gpt-4o-mini").prompt("hi"))
    
  • 新的文档化的 API 方法:llm.get_default_model()llm.set_default_model(alias)llm.get_default_embedding_model(alias)llm.set_default_embedding_model()#553

  • 支持 OpenAI 新的 o1 系列预览模型,llm -m o1-preview "prompt"llm -m o1-mini "prompt"。这些模型目前仅供tier 5 的 OpenAI API 用户使用,不过未来可能会改变。 #570

0.15 (2024-07-18)#

  • 支持 OpenAI 新的 GPT-4o mini 模型:llm -m gpt-4o-mini 'rave about pelicans in French' #536

  • 如果您未指定自己的默认模型gpt-4o-mini 现在是默认模型,取代了 GPT-3.5 Turbo。GPT-4o mini 比 GPT-3.5 Turbo 更便宜且更好。

  • 修复了一个错误,该错误导致 llm logs -q 'flourish' -m haiku 无法同时使用 -q 搜索查询和 -m 模型指定符。 #515

0.14 (2024-05-13)#

  • 支持 OpenAI 新的 GPT-4o 模型:llm -m gpt-4o 'say hi in Spanish' #490

  • gpt-4-turbo 别名现在是一个模型 ID,表示 OpenAI GPT-4 Turbo 文本和图像模型的最新版本。您现有的 logs.db 数据库可能包含以前的模型 ID gpt-4-turbo-preview 下的记录。 #493

  • 新的 llm logs -r/--response 选项,仅输出最后捕获的响应,而不将其封装在 Markdown 中并附带提示。 #431

  • 自 0.13 版本以来的九个新插件

0.13.1 (2024-01-26)#

  • 修复了 Windows 上 No module named 'readline' 错误。 #407

0.13 (2024-01-26)#

另请参阅 LLM 0.13:带注释的发布说明

  • 添加了对新 OpenAI 嵌入模型的支持:3-small3-large 以及具有不同维度大小的三个变体,3-small-5123-large-2563-large-1024。详见OpenAI 嵌入模型#394

  • 默认的 gpt-4-turbo 模型别名现在指向 gpt-4-turbo-preview,后者使用最新的 OpenAI GPT-4 turbo 模型(目前是 gpt-4-0125-preview)。 #396

  • 新的 OpenAI 模型别名 gpt-4-1106-previewgpt-4-0125-preview

  • OpenAI 模型现在支持一个 -o json_object 1 选项,该选项将导致其输出作为有效的 JSON 对象返回。 #373

  • 自上次发布以来新增的插件包括 llm-mistralllm-geminillm-ollamallm-bedrock-meta

  • 用于存储 API 密钥的 keys.json 文件现在以 600 文件权限创建。 #351

  • 文档中记录了一种模式,用于使用 Homebrew 版本的 LLM 安装依赖于 PyTorch 的插件,尽管 Homebrew 使用 Python 3.12 而 PyTorch 尚未发布适用于该 Python 版本的稳定软件包。 #397

  • 底层 OpenAI Python 库已升级到 >1.0。这可能会导致与也依赖该库的 LLM 插件发生兼容性问题。 #325

  • 现在在 llm chat 命令中可以使用箭头键。 #376

  • LLM_OPENAI_SHOW_RESPONSES=1 环境变量现在输出更详细的 HTTP 请求和对 OpenAI(以及 OpenAI 兼容)API 发出的响应信息。 #404

  • 放弃了对 Python 3.7 的支持。

0.12 (2023-11-06)#

  • 支持 OpenAI 新的 GPT-4 Turbo 模型。尝试使用 llm chat -m gpt-4-turbollm chat -m 4t#323

  • 新的 -o seed 1 选项用于 OpenAI 模型,设置一个种子,该种子可以尝试确定性地评估提示。 #324

0.11.2 (2023-11-06)#

  • 固定到 1.0 版本之前的 OpenAI Python 库,以避免中断。 #327

0.11.1 (2023-10-31)#

0.11 (2023-09-18)#

LLM 现在支持新的 OpenAI gpt-3.5-turbo-instruct 模型,以及一般的 OpenAI completion(而不是 chat completion)模型。 #284

llm -m gpt-3.5-turbo-instruct 'Reasons to tame a wild beaver:'

像这样的 OpenAI completion 模型支持一个 -o logprobs 3 选项,该选项接受 1 到 5 之间的数字,并将在日志响应中包含对数概率(对于生成的每个 token,模型考虑的前 3 个选项是什么)。

llm -m gpt-3.5-turbo-instruct 'Say hello succinctly' -o logprobs 3

然后您可以像这样查看记录在 SQLite 日志数据库中的 logprobs

sqlite-utils "$(llm logs path)" \
  'select * from responses order by id desc limit 1' | \
  jq '.[0].response_json' -r | jq

截断的输出如下所示

  [
    {
      "text": "Hi",
      "top_logprobs": [
        {
          "Hi": -0.13706253,
          "Hello": -2.3714375,
          "Hey": -3.3714373
        }
      ]
    },
    {
      "text": " there",
      "top_logprobs": [
        {
          " there": -0.96057636,
          "!\"": -0.5855763,
          ".\"": -3.2574513
        }
      ]
    }
  ]

本次发布中还包含

  • 插件使用的 llm.user_dir() 函数现在确保目录存在后才返回。 #275

  • 新的 LLM_OPENAI_SHOW_RESPONSES=1 环境变量,用于显示 OpenAI 兼容 API 返回的完整 HTTP 响应。 #286

  • llm embed-multi 命令现在有一个 --batch-size X 选项,用于设置处理嵌入时使用的批处理大小 - 如果可用内存有限,这很有用。 #273

  • collection.embed_multi() 方法现在也接受一个可选的 batch_size=int 参数。

  • 修复了 llm embed-multi --files 中与目录处理相关的两个错误。感谢 ealvar3z#274, #280

0.10 (2023-09-12)#

本次发布的两个主要功能是 **llm chat 命令** 和对**嵌入二进制数据**的支持。

有关这些功能的更多背景信息,请参阅使用 llm-clip 构建图像搜索引擎,使用 llm chat 与模型聊天

llm chat#

新的 llm chat 命令在您的终端中与模型开始持续的聊天对话。它适用于 LLM 及其插件支持的所有模型,包括本地安装的模型,例如 Llama 2。 #231

这为本地模型提供了巨大的性能提升,因为它们无需为每个提示重新加载到内存中。

这是一个使用 llm-mlc 插件提供的 Llama 2 13B 进行聊天的示例。

llm chat -m mlc-chat-Llama-2-13b-chat-hf-q4f16_1

这开始一个聊天会话

Type 'exit' or 'quit' to exit
Type '!multi' to enter multiple lines, then '!end' to finish
Type '!edit' to open your default editor and modify the prompt.
> Who are you?
Hello! I'm just an AI, here to assist you with any questions you may have.
My name is LLaMA, and I'm a large language model trained to provide helpful
and informative responses to a wide range of questions and topics. I'm here
to help you find the information you need, while ensuring a safe and
respectful conversation. Please feel free to ask me anything, and I'll do my
best to provide a helpful and accurate response.
> Tell me a joke about otters
Sure, here's a joke about otters:

Why did the otter go to the party?

Because he heard it was a "whale" of a time!

(Get it? Whale, like a big sea mammal, but also a "wild" or "fun" time.
Otters are known for their playful and social nature, so it's a lighthearted
and silly joke.)

I hope that brought a smile to your face! Do you have any other questions or
topics you'd like to discuss?
> exit

聊天会话记录到 SQLite 中 - 使用 llm logs 查看。它们可以接受系统提示、模板和模型选项 - 详见聊天文档

二进制嵌入支持#

LLM 的嵌入功能已扩展,除了文本之外,还支持嵌入二进制数据。 #254

这使得像 CLIP 这样的模型成为可能,由新的 **llm-clip** 插件支持。

CLIP 是一种多模态嵌入模型,可以将图像和文本嵌入到相同的向量空间中。这意味着您可以使用它创建照片的嵌入索引,然后搜索“一只快乐的狗”的嵌入向量,并获取与该字符串语义最接近的图像。

要为存储在 photos 集合中的目录中的每个 JPEG 创建嵌入,运行

llm install llm-clip
llm embed-multi photos --files photos/ '*.jpg' --binary -m clip

现在您可以使用以下命令搜索浣熊的照片

llm similar photos -c 'raccoon'

这会列出图像,并根据它们与字符串“raccoon”的相似度进行排名

{"id": "IMG_4801.jpeg", "score": 0.28125139257127457, "content": null, "metadata": null}
{"id": "IMG_4656.jpeg", "score": 0.26626441704164294, "content": null, "metadata": null}
{"id": "IMG_2944.jpeg", "score": 0.2647445926996852, "content": null, "metadata": null}
...

本次发布中还包含#

  • LLM_LOAD_PLUGINS 环境变量可用于控制 llm 启动时加载哪些插件。 #256

  • llm plugins --all 选项在插件列表中包含内置插件。 #259

  • llm embed-db 命令系列已重命名为 llm collections#229

  • llm embed-multi --files 现在有一个 --encoding 选项,并且如果文件不能以 utf-8 方式处理,则默认回退到 latin-1#225

0.10a1 (2023-09-11)#

  • 支持嵌入二进制数据。 #254

  • llm chat 现在适用于带有 API 密钥的模型。 #247

  • llm chat -o 用于向模型传递选项。 #244

  • llm chat --no-stream 选项。 #248

  • LLM_LOAD_PLUGINS 环境变量。 #256

  • llm plugins --all 选项用于包含内置插件。 #259

  • llm embed-db 已重命名为 llm collections#229

  • 修复了 llm embed -c 选项被视为文件路径而不是字符串的错误。感谢 mhalle#263

0.10a0 (2023-09-04)#

  • 新的llm chat 命令,用于启动与模型的交互式终端聊天。 #231

  • llm embed-multi --files 现在有一个 --encoding 选项,并且如果文件不能以 utf-8 方式处理,则默认回退到 latin-1#225

0.9 (2023-09-03)#

本次发布的重大新功能是支持**嵌入**。有关更多详细信息,请参阅LLM 现在提供处理嵌入的工具

嵌入模型接受一段文本 - 一个单词、句子、段落甚至整篇文章,并将其转换为浮点数数组。 #185

这个嵌入向量可以被认为是表示多维空间中的一个位置,其中两个向量之间的距离表示它们在语言模型内容中的语义相似程度。

嵌入可用于查找**相关文档**,也可用于实现**语义搜索** - 用户可以搜索一个短语,并获得与该短语语义相似的结果,即使它们不共享任何精确的关键字。

LLM 现在提供用于处理嵌入的 CLI 和 Python API。嵌入模型由插件定义,因此您可以使用插件机制安装附加模型。

LLM 支持的前两个嵌入模型是

详见使用 CLI 嵌入,了解使用 LLM 处理嵌入的详细说明。

用于处理嵌入的新命令是

  • **llm embed** - 计算内容的嵌入,并将其返回到控制台或存储到 SQLite 数据库中。

  • **llm embed-multi** - 对多个字符串执行批量嵌入,使用来自 CSV、TSV 或 JSON 文件、SQLite 数据库中的数据或通过扫描文件系统找到的数据作为输入。 #215

  • **llm similar** - 对您存储的嵌入运行相似性搜索 - 可以从搜索短语开始,或查找与先前存储的向量相关的内容。 #190

  • **llm embed-models** - 列出可用的嵌入模型。

  • llm embed-db - 用于检查和使用默认嵌入 SQLite 数据库的命令。

还有一个新的llm.Collection 类,用于从 Python 代码创建和搜索嵌入集合,以及一个llm.get_embedding_model() 接口,用于直接嵌入字符串。 #191

0.8.1 (2023-08-31)#

  • 修复了一个错误,该错误导致如果 io.datasette.llm 目录尚未创建,则第一个提示会显示错误。 #193

  • 更新了文档,推荐使用另一个 llm-gpt4all 模型,因为我们之前使用的模型不再可用。 #195

0.8 (2023-08-20)#

  • llm logs 的输出格式已更改。以前是 JSON 格式 - 现在是更易读的 Markdown 格式,适合粘贴到其他文档中。 #160

    • 新的 llm logs --json 选项可用于获取旧的 JSON 格式。

    • 传递 llm logs --conversation ID--cid ID 可以查看特定对话的完整日志。

  • 您现在可以在单个命令中结合管道输入和提示:cat script.py | llm 'explain this code'。即使对于不支持系统提示的模型,这也有效。 #153

  • 现在可以使用自定义 HTTP 头配置额外的OpenAI 兼容模型。这使得像openrouter.ai 这样的平台可以与 LLM 一起使用,即使没有 Anthropic API 密钥也可以提供 Claude 访问。

  • 现在优先使用在 keys.json 中设置的密钥,而不是环境变量。 #158

  • 文档现在包含一个插件目录,列出了所有可用的 LLM 插件。 #173

  • 文档中新增了相关工具部分,描述了 ttokstrip-tagssymbex#111

  • llm modelsllm aliasesllm templates 命令现在默认运行与 llm models listllm aliases listllm templates list 相同的命令。 #167

  • 新的 llm keys(即 llm keys list)命令,用于列出所有已配置密钥的名称。 #174

  • 两个新的 Python API 函数 llm.set_alias(alias, model_id)llm.remove_alias(alias) 可用于在 Python 代码中配置别名。 #154

  • LLM 现在兼容 Pydantic 1 和 Pydantic 2。这意味着您可以在依赖 Pydantic 1 的项目中将 llm 作为 Python 依赖安装,而不会遇到依赖冲突。感谢 Chris Mungall#147

  • llm.get_model(model_id) 现在有文档记录,如果请求的模型不存在,它会引发 llm.UnknownModelError 异常。 #155

0.7.1 (2023-08-19)#

  • 修复了一个错误,该错误导致某些用户在升级到最新的 sqlite-utils 3.35 版本后,在使用此工具时会看到 AlterError: No such column: log.id 错误。 #162

0.7 (2023-08-12)#

新的模型别名命令可用于配置模型的附加别名,例如

llm aliases set turbo gpt-3.5-turbo-16k

现在您可以像这样运行 16,000 token 的 gpt-3.5-turbo-16k 模型

llm -m turbo 'An epic Greek-style saga about a cheesecake that builds a SQL database from scratch'

使用 llm aliases list 查看别名列表,使用 llm aliases remove turbo 再次删除别名。 #151

值得注意的新插件#

本次发布中还包含#

  • OpenAI 模型现在对其浮点选项进行了最小和最大值验证。感谢 Pavel Král。 #115

  • 修复了 llm templates list 在模板提示为空时引发错误的错误。感谢 Sherwin Daganato。 #132

  • 修复了 llm install --editable 选项中的错误,该错误阻止了 .[test] 的安装。 #136

  • llm install --no-cache-dir--force-reinstall 选项。 #146

0.6.1 (2023-07-24)#

  • LLM 现在可以直接从 Homebrew core 安装:brew install llm#124

  • Python API 文档现在涵盖了系统提示

  • 修复了模板文档中的错误示例。感谢 Jorge Cabello。 #125

0.6 (2023-07-18)#

  • 现在可以使用llm-replicate 插件访问托管在Replicate 上的模型,包括 Meta AI 的新 Llama 2 模型。更多详细信息请参见:使用 llm-replicate 插件从命令行访问 Llama 2

  • 暴露与 OpenAPI API 格式兼容的 API 的模型提供者,包括自托管模型服务器(如LocalAI),现在可以使用默认 OpenAI 插件的附加配置进行访问。 #106

  • LLM 尚未支持的 OpenAI 模型也可以使用新的 extra-openai-models.yaml 配置文件进行配置#107

  • llm logs 命令现在接受 -m model_id 选项,用于将日志过滤到特定模型。此处除了模型 ID 外,还可以使用别名。 #108

  • 日志现在具有针对其提示和响应的 SQLite 全文搜索索引,并且可以使用 llm logs -q SEARCH 选项返回匹配搜索词的日志。 #109

0.5 (2023-07-12)#

LLM 现在支持**额外的语言模型**,这得益于用于安装附加模型的新的插件机制

除了默认的 OpenAI 模型外,还有适用于 19 个模型的插件

  • llm-gpt4all 添加了对 17 个模型的支持,这些模型可以在您自己的设备上下载和运行,包括 Vicuna、Falcon 和 wizardLM。

  • llm-mpt30b 添加了对 MPT-30B 模型的支持,该模型需要下载 19GB。

  • llm-palm 通过 Google API 添加了对 Google PaLM 2 的支持。

一篇全面的教程,编写插件以支持新模型详细描述了如何通过构建插件添加新模型。

新功能#

  • Python API 文档,用于直接从 Python 使用 LLM 模型,包括来自插件的模型。 #75

  • 消息现在默认记录到数据库 - 不再需要运行已删除的 llm init-db 命令。相反,您可以使用 llm logs off 关闭此行为,或使用 llm logs on 再次打开。llm logs status 命令显示日志数据库的当前状态。如果日志记录已关闭,将 --log 传递给 llm prompt 命令仍将记录该提示。 #98

  • 记录消息的新数据库 schema,包含 conversationsresponses 表。如果您之前使用过旧的 logs 表,它将继续存在,但不再写入数据。 #91

  • 设置模型选项(如温度)的新 -o/--option name value 语法。可用选项因模型而异。 #63

  • llm models list --options 命令用于查看所有可用的模型选项。 #82

  • llm "prompt" --save template 选项用于将提示直接保存到模板。 #55

  • 提示模板现在可以为参数指定默认值。感谢 Chris Mungall。 #57

  • llm openai models 命令用于列出 OpenAI API 中所有可用的模型。 #70

  • llm models default MODEL_ID 命令用于设置另一个模型作为默认模型,以便在使用 llm 命令时省略 -m/--model 选项。 #31

小的改进#

  • llm -s 现在是 llm --system 的快捷方式。 #69

  • llm -m 4-32kgpt-4-32k 的别名。

  • llm install -e directory 命令用于从本地目录安装插件。

  • LLM_USER_PATH 环境变量现在控制 LLM 存储数据的目录位置。这取代了旧的 LLM_KEYS_PATHLLM_LOG_PATHLLM_TEMPLATES_PATH 变量。 #76

  • 关于插件的实用函数的文档。

  • 文档网站现在使用 Plausible 进行分析。 #79

0.4.1 (2023-06-17)#

  • 现在可以使用 Homebrew 安装 LLM:brew install simonw/llm/llm#50

  • 在文档中,llm 现在样式化为 LLM。 #45

  • 文档中的示例现在包含复制按钮。 #43

  • llm templates 命令的显示不再因换行符而中断。 #42

  • 如果设置了,llm templates 命令现在包含系统提示。 #44

0.4 (2023-06-17)#

此版本包含一些向后不兼容的更改

  • 用于 GPT-4 的 -4 选项现在是 -m 4

  • --code 选项已被移除。

  • -s 选项已被移除,因为流式传输现在是默认设置。使用 --no-stream 选项可以禁用流式传输。

提示模板#

模板是一项新功能,允许将提示保存为模板,并使用不同的变量进行重用。

可以使用 llm templates edit 命令创建模板

llm templates edit summarize

模板是 YAML 格式的 - 以下模板使用系统提示定义了摘要功能

system: Summarize this text

然后可以这样执行该模板

cat myfile.txt | llm -t summarize

模板可以包含系统提示、常规提示,并指示它们应该使用的模型。它们可以引用变量,例如用于通过管道传输到工具的内容的 $input,或使用新的 -p/--param 选项传递的其他变量。

此示例添加了一个 voice 参数

system: Summarize this text in the voice of $voice

然后运行它(通过 strip-tags 来移除输入中的 HTML 标签)

curl -s 'https://til.simonwillison.net/macos/imovie-slides-and-audio' | \
  strip-tags -m | llm -t summarize -p voice GlaDOS

示例输出

My previous test subject seemed to have learned something new about iMovie. They exported keynote slides as individual images […] Quite impressive for a human.

模板文档提供了更详细的示例。

继续之前的对话#

您现在可以使用 llm 继续与 OpenAI 聊天模型(gpt-3.5-turbogpt-4)进行先前的对话。这将在发送到 API 的提示中包含您先前的提示和响应,使模型可以在同一上下文中继续对话。

使用新的 -c/--continue 选项从上一条消息线程继续

llm "Pretend to be a witty gerbil, say hi briefly"

Greetings, dear human! I am a clever gerbil, ready to entertain you with my quick wit and endless energy.

llm "What do you think of snacks?" -c

Oh, how I adore snacks, dear human! Crunchy carrot sticks, sweet apple slices, and chewy yogurt drops are some of my favorite treats. I could nibble on them all day long!

-c 选项将从最近一条日志消息继续。

要继续不同的对话,将整数 ID 传递给 --chat 选项。这应该是先前记录的消息的 ID。您可以使用 llm logs 命令查找这些 ID。

感谢 Amjith Ramanujam 为此功能做出的贡献。 #6

存储 API 密钥的新机制#

现在可以使用新的 llm keys 系列命令保存大型语言模型(如 OpenAI 模型)的 API 密钥。

要设置用于 OpenAI API 的默认密钥,请运行以下命令

llm keys set openai

然后粘贴您的 API 密钥。

密钥也可以使用新的 --key 命令行选项传递 - 这可以是完整的密钥或先前存储的密钥的别名。

有关更多信息,请参阅API 密钥管理#13

logs.db 数据库的新位置#

存储执行的提示历史记录的 logs.db 数据库不再位于 ~/.llm/log.db - 现在可以在更符合主机操作系统约定的位置找到它,可以使用以下命令查看:

llm logs path

在 macOS 上,该位置是 ~/Library/Application Support/io.datasette.llm/logs.db

要使用 Datasette 打开该数据库,请运行此命令

datasette "$(llm logs path)"

您可以通过将现有数据库复制到新位置来升级您的安装,如下所示:

cp ~/.llm/log.db "$(llm logs path)"
rm -rf ~/.llm # To tidy up the now obsolete directory

数据库 schema 已更改,并且在您第一次运行命令时将自动更新。

该 schema 包含在文档中#35

其他更改#

  • 新增 llm logs --truncate 选项(快捷方式 -t),它会截断显示的提示内容,使日志输出更易于阅读。 #16

  • 文档现在包含多个页面,位于 https://llm.datasette.com.cn/#21

  • 默认的 llm chatgpt 命令已重命名为 llm prompt#17

  • 移除了 --code 选项,转而使用新的提示模板机制。 #24

  • 如果模型支持流式传输,响应现在默认以流式方式进行。 -s/--stream 选项已被移除。可以使用新的 --no-stream 选项来禁用流式传输。 #25

  • 移除了 -4/--gpt4 选项,转而使用 -m 4-m gpt4,这得益于一个允许模型拥有额外短名称的新机制。

  • 具有 16,000 词元上下文长度的新模型 gpt-3.5-turbo-16k 现在也可以使用 -m chatgpt-16k-m 3.5-16k 进行访问。感谢 Benjamin Kirkbride。 #37

  • 改进了 OpenAI 错误消息的显示方式。 #15

0.3 (2023-05-17)#

  • llm logs 命令用于浏览先前执行的完成记录。 #3

  • llm "Python code to output factorial 10" --code 选项设置了一个系统提示,旨在鼓励模型直接输出代码而不包含任何额外的解释性文本。 #5

  • 该工具现在可以直接通过标准输入管道接受提示。 #11

0.2 (2023-04-01)#

  • 如果 ~/.llm/log.db 中存在 SQLite 数据库,所有提示和响应都会记录到该文件中。可以使用 llm init-db 命令创建此文件。 #2

0.1 (2023-04-01)#

  • 初始原型发布。 #1