更新日志#
0.25 (2025-05-04)#
新插件功能:register_fragment_loaders(register) 插件现在可以返回片段和附件的混合。 llm-video-frames 插件是第一个利用此机制的插件。 #972
新 OpenAI 模型:
gpt-4.1
、gpt-4.1-mini
、gpt-41-nano
、o3
、o4-mini
。 #945、 #965、 #976。新环境变量:
LLM_MODEL
和LLM_EMBEDDING_MODEL
,用于设置要使用的模型,无需每次指定-m model_id
。 #932新命令:
llm fragments loaders
,用于列出插件提供的所有当前可用的片段加载器前缀。 #941llm fragments
命令现在按片段首次使用的日期排序显示片段。 #973llm chat
现在包含一个!edit
命令,用于使用默认终端文本编辑器编辑提示。感谢 Benedikt Willi。 #969允许同时使用
-t
和--system
。 #916修复了通过别名访问模型时无法遵守为该模型设置的任何默认选项的错误。 #968
改进了 extra-openai-models.yaml 的文档。感谢 Rahim Nathwani 和 Dan Guido。 #950、 #957
llm -c/--continue
现在可以正确地与-d/--database
选项一起工作。llm chat
现在接受-d/--database
选项。感谢 Sukhbinder Singh。 #933
0.25a0 (2025-04-10)#
0.24.2 (2025-04-08)#
修复了 Windows 上新功能
llm -t path/to/file.yaml
的一个错误。 #901
0.24.1 (2025-04-08)#
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-github 和 llm-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'
。 #617llm logs
文件现在也接受-f
片段引用,并且只会显示使用这些片段的已记录提示。register_template_loaders() 插件钩子,允许插件注册新的
prefix:value
自定义模板加载器。 #809register_fragment_loaders() 插件钩子,允许插件注册新的
prefix:value
自定义片段加载器。 #886llm 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 list
、llm schemas list
和llm schemas show
现在都接受一个-d/--database
选项,其中包含一个可选的 SQLite 数据库路径。它们过去接受-p/--path
,但这与其他命令不一致。-p/--path
仍然有效,但已从--help
中排除,并将在未来的 LLM 版本中移除。 #857llm logs -e/--expand
选项用于展开片段。 #881llm prompt -d path-to-sqlite.db
选项现在可用于将日志写入自定义 SQLite 数据库。 #858llm similar -p/--plain
选项提供比默认 JSON 更易读的输出。 #853llm logs -s/--short
现在截断时也包含提示的末尾。感谢 Sukhbinder Singh。 #759设置
LLM_RAISE_ERRORS=1
环境变量可以在提示期间引发错误而不是抑制它们,这意味着你可以运行python -i -m llm 'prompt'
,然后在出错时使用import pdb; pdb.pm()
进入调试器。 #817llm models -m X
选项,可以多次传递模型 ID,只查看这些模型的详细信息。 #825OpenAI 模型现在接受 PDF 附件。 #834
llm prompt -q gpt -q 4o
选项 - 多次传递-q searchterm
以对匹配所有这些字符串的第一个模型执行提示 - 当您不记得完整的模型 ID 时很有用。 #841使用
extra-openai-models.yaml
配置的 OpenAI 兼容模型 现在支持supports_schema: true
、vision: true
和audio: true
选项。感谢 @adaitche 和 @giuli007。 #819, #843
0.24a1 (2025-04-06)#
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新的llm schemas 系列命令:
llm schemas list
、llm schemas show
和llm schemas dsl
,用于调试新的简洁 schema 语言。 #781现在可以使用
llm --schema X --save template-name
或通过修改模板 YAML 将 Schemas 保存到模板中。 #778llm logs 命令现在有了新选项,用于提取使用 schemas 收集的数据:
--data
、--data-key
、--data-array
、--data-ids
。 #782新的
llm logs --id-gt X
和--id-gte X
选项。 #801新的
llm models --schemas
选项,用于列出支持 schemas 的模型。 #797model.prompt(..., schema={...})
参数,用于从 Python 中指定 schema。这接受字典 JSON schema 定义或 PydanticBaseModel
子类,详见Python API 文档中的 schemas。默认的 OpenAI 插件现在在所有支持的模型上启用了 schemas。运行
llm models --schemas
获取列表。llm-anthropic 和 llm-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)))
现在可以工作了。 #784extra-openai-models.yaml
现在支持reasoning: true
选项。感谢 Kasper Primdal Lauritzen。 #766LLM 现在依赖于 Pydantic v2 或更高版本。不再支持 Pydantic v1。 #520
0.22 (2025-02-16)#
另请参阅 LLM 0.22,带注释的发布说明。
提供使用 API 密钥的模型的插件现在可以继承新的
llm.KeyModel
和llm.AsyncKeyModel
类。这将导致 API 密钥作为新的key
参数传递给它们的.execute()
方法,并且意味着 Python 用户可以将密钥作为model.prompt(..., key=)
传递 - 详见传递 API 密钥。插件开发者应查阅关于编写接受 API 密钥的模型的新文档。 #744新的 OpenAI 模型:
chatgpt-4o-latest
。此模型 ID 访问当前为 ChatGPT 提供支持的模型,该模型可能会在不发出警告的情况下更改。 #752新的
llm logs -s/--short
标志,以 YAML 格式返回匹配日志条目的极度缩短版本,其中包含截断的提示且不包含响应。 #737llm models
和llm embed-models
现在都接受多个-q
搜索片段。您现在可以使用llm models -q gemini -q exp
搜索所有匹配“gemini”和“exp”的模型。 #748新的
llm embed-multi --prepend X
选项,用于在嵌入每个值之前在其前面加上一个字符串 - 这对于像 nomic-embed-text-v2-moe 这样要求段落以"search_document: "
之类的字符串开头的模型很有用。 #745response.json()
和response.usage()
方法现在有文档了。修复了一个错误,该错误导致从数据库加载的对话无法使用
asyncio
提示继续。 #742llm-claude-3
插件已重命名为 llm-anthropic。
0.21 (2025-01-31)#
0.20 (2025-01-22)#
新模型,
o1
。此模型尚不支持流式传输。 #676o1-preview
和o1-mini
模型现在支持流式传输。新模型,
gpt-4o-audio-preview
和gpt-4o-mini-audio-preview
。 #677llm 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 和 #702llm models
命令现在在列表底部显示当前默认模型。感谢 Amjith Ramanujam。 #688插件目录 现在包括
llm-venice
、llm-bedrock
、llm-deepseek
和llm-cmd-comp
。修复了一个错误,该错误导致某些依赖版本组合可能引起
Client.__init__() got an unexpected keyword argument 'proxies'
错误。 #709OpenAI 嵌入模型现在可以使用其全名
text-embedding-ada-002
、text-embedding-3-small
和text-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_tokens
和output_tokens
整数字段以及一个token_details
JSON 字符串字段中,适用于默认的 OpenAI 模型和实现此功能的其他插件中的模型。 #610llm prompt
现在接受-u/--usage
标志,用于在响应末尾显示 token 使用情况。llm logs -u/--usage
显示日志响应的 token 使用信息。llm prompt ... --async
响应现在记录到数据库中。 #641response.usage()
和 async 响应await response.usage()
方法,返回一个Usage(input=2, output=1, details=None)
数据类。 #644response.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)#
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
现在包含模型是否支持附件的信息。 #612llm 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__
方法,适用于Response
和AsyncResponse
。
0.18a0 (2024-11-13)#
**async 模型**的 Alpha 支持。 #507
多个小改动。
0.17 (2024-10-29)#
支持**附件**,允许多模态模型接受图像、音频、视频和其他格式。 #578
默认的 OpenAI gpt-4o
和 gpt-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 set
或OPENAI_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'
#490gpt-4-turbo
别名现在是一个模型 ID,表示 OpenAI GPT-4 Turbo 文本和图像模型的最新版本。您现有的logs.db
数据库可能包含以前的模型 IDgpt-4-turbo-preview
下的记录。 #493新的
llm logs -r/--response
选项,仅输出最后捕获的响应,而不将其封装在 Markdown 中并附带提示。 #431自 0.13 版本以来的九个新插件
**llm-claude-3** 支持 Anthropic 的Claude 3 系列模型。
**llm-command-r** 支持 Cohere 的 Command R 和Command R Plus API 模型。
**llm-perplexity** 由 Alexandru Geana 开发,支持Perplexity Labs API 模型,包括可以联网搜索的
llama-3-sonar-large-32k-online
和llama-3-70b-instruct
。**llm-fireworks** 支持Fireworks AI 托管的模型。
**llm-together** 添加了对Together AI 广泛托管的开放许可模型系列的支持。
**llm-embed-onnx** 提供了七个可以使用 ONNX 模型框架执行的嵌入模型。
**llm-cmd** 接受一个 shell 命令的提示,运行该提示并将结果填充到您的 shell 中,以便您可以查看、编辑,然后按
<enter>
执行或按ctrl+c
取消,详见这篇文章。
0.13.1 (2024-01-26)#
修复了 Windows 上
No module named 'readline'
错误。 #407
0.13 (2024-01-26)#
另请参阅 LLM 0.13:带注释的发布说明。
添加了对新 OpenAI 嵌入模型的支持:
3-small
和3-large
以及具有不同维度大小的三个变体,3-small-512
、3-large-256
和3-large-1024
。详见OpenAI 嵌入模型。 #394默认的
gpt-4-turbo
模型别名现在指向gpt-4-turbo-preview
,后者使用最新的 OpenAI GPT-4 turbo 模型(目前是gpt-4-0125-preview
)。 #396新的 OpenAI 模型别名
gpt-4-1106-preview
和gpt-4-0125-preview
。OpenAI 模型现在支持一个
-o json_object 1
选项,该选项将导致其输出作为有效的 JSON 对象返回。 #373自上次发布以来新增的插件包括 llm-mistral、llm-gemini、llm-ollama 和 llm-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
命令中可以使用箭头键。 #376LLM_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-turbo
或llm 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)#
新插件:llm-python、llm-bedrock-anthropic 和 llm-embed-jina(在使用 llm-embed-jina 通过 CLI 执行 Jina 嵌入中描述)。
llm-gpt4all 现在使用新的 GGUF 模型格式。simonw/llm-gpt4all#16
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 响应。 #286llm embed-multi
命令现在有一个--batch-size X
选项,用于设置处理嵌入时使用的批处理大小 - 如果可用内存有限,这很有用。 #273collection.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
启动时加载哪些插件。 #256llm plugins --all
选项在插件列表中包含内置插件。 #259llm embed-db
命令系列已重命名为llm collections
。 #229llm embed-multi --files
现在有一个--encoding
选项,并且如果文件不能以utf-8
方式处理,则默认回退到latin-1
。 #225
0.10a1 (2023-09-11)#
0.10a0 (2023-09-04)#
0.9 (2023-09-03)#
本次发布的重大新功能是支持**嵌入**。有关更多详细信息,请参阅LLM 现在提供处理嵌入的工具。
嵌入模型接受一段文本 - 一个单词、句子、段落甚至整篇文章,并将其转换为浮点数数组。 #185
这个嵌入向量可以被认为是表示多维空间中的一个位置,其中两个向量之间的距离表示它们在语言模型内容中的语义相似程度。
嵌入可用于查找**相关文档**,也可用于实现**语义搜索** - 用户可以搜索一个短语,并获得与该短语语义相似的结果,即使它们不共享任何精确的关键字。
LLM 现在提供用于处理嵌入的 CLI 和 Python API。嵌入模型由插件定义,因此您可以使用插件机制安装附加模型。
LLM 支持的前两个嵌入模型是
OpenAI 的ada-002 嵌入模型,如果您使用
llm keys set openai
设置 OpenAI 密钥,可通过廉价的 API 获得。sentence-transformers 模型系列,可通过新的llm-sentence-transformers 插件获得。
详见使用 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)#
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
中设置的密钥,而不是环境变量。 #158llm models
、llm aliases
和llm templates
命令现在默认运行与llm models list
、llm aliases list
和llm templates list
相同的命令。 #167新的
llm keys
(即llm keys list
)命令,用于列出所有已配置密钥的名称。 #174两个新的 Python API 函数
llm.set_alias(alias, model_id)
和llm.remove_alias(alias)
可用于在 Python 代码中配置别名。 #154LLM 现在兼容 Pydantic 1 和 Pydantic 2。这意味着您可以在依赖 Pydantic 1 的项目中将
llm
作为 Python 依赖安装,而不会遇到依赖冲突。感谢 Chris Mungall。 #147llm.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
值得注意的新插件#
**llm-mlc** 可以运行MLC 项目发布的本地模型,包括可以利用 Apple Silicon M1/M2 设备上 GPU 的模型。
**llm-llama-cpp** 使用llama.cpp 运行以 GGML 格式发布的模型。详见使用 LLM 和 Homebrew 在您自己的 Mac 上运行 Llama 2。
本次发布中还包含#
0.6.1 (2023-07-24)#
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
配置文件进行配置。 #107llm 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,包含
conversations
和responses
表。如果您之前使用过旧的logs
表,它将继续存在,但不再写入数据。 #91设置模型选项(如温度)的新
-o/--option name value
语法。可用选项因模型而异。 #63llm models list --options
命令用于查看所有可用的模型选项。 #82llm "prompt" --save template
选项用于将提示直接保存到模板。 #55llm openai models
命令用于列出 OpenAI API 中所有可用的模型。 #70llm models default MODEL_ID
命令用于设置另一个模型作为默认模型,以便在使用llm
命令时省略-m/--model
选项。 #31
小的改进#
0.4.1 (2023-06-17)#
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-turbo
和 gpt-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
命令行选项传递 - 这可以是完整的密钥或先前存储的密钥的别名。
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 已更改,并且在您第一次运行命令时将自动更新。
其他更改#
新增
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)#
0.2 (2023-04-01)#
如果
~/.llm/log.db
中存在 SQLite 数据库,所有提示和响应都会记录到该文件中。可以使用llm init-db
命令创建此文件。 #2
0.1 (2023-04-01)#
初始原型发布。 #1