Skip to content

使用大型语言模型(LLMs)#

概念#

选择合适的大型语言模型(LLM)是构建任何LLM应用程序时需要考虑的第一步。

LLMs是LlamaIndex的核心组件。它们可以作为独立模块使用,也可以插入其他核心的LlamaIndex模块(索引、检索器、查询引擎)。它们始终在响应合成步骤中使用(例如,在检索之后)。根据所使用的索引类型,LLMs也可能在索引构建、插入和查询遍历过程中使用。

LlamaIndex提供了一个统一的接口来定义LLM模块,无论是来自OpenAI、Hugging Face还是LangChain,这样你就不必自己编写定义LLM接口的样板代码。该接口包括以下内容(详细信息如下):

  • 支持文本补全聊天端点(详细信息如下)
  • 支持流式非流式端点
  • 支持同步异步端点

使用模式#

以下代码片段显示了如何开始使用LLMs。

如果你还没有安装它,请安装你的LLM:

pip install llama-index-llms-openai

然后:

from llama_index.llms.openai import OpenAI

# 非流式
resp = OpenAI().complete("Paul Graham is ")
print(resp)

独立使用自定义使用中找到更多详细信息。

关于标记化的说明#

默认情况下,LlamaIndex使用全局标记化器进行所有标记计数。这默认为来自tiktoken的cl100k,这是与默认的LLMgpt-3.5-turbo匹配的标记化器。

如果你更改了LLM,可能需要更新此标记化器,以确保准确的标记计数、分块和提示。

标记化器的唯一要求是它是一个可调用的函数,它接受一个字符串,并返回一个列表。

你可以这样设置全局标记化器:

from llama_index.core import Settings

# tiktoken
import tiktoken

Settings.tokenizer = tiktoken.encoding_for_model("gpt-3.5-turbo").encode

# huggingface
from transformers import AutoTokenizer

Settings.tokenizer = AutoTokenizer.from_pretrained(
    "HuggingFaceH4/zephyr-7b-beta"
)

LLM兼容性跟踪#

虽然LLMs很强大,但并非每个LLM都容易设置。此外,即使进行了适当的设置,有些LLM在执行需要严格遵循指令的任务时也会遇到困难。

LlamaIndex提供了几乎与每个LLM的集成,但往往不清楚LLM是否会很好地开箱即用,或者是否需要进一步定制。

下面的表格试图验证各种LLMs对于各种LlamaIndex功能的初始体验。这些笔记本作为评估性能的最佳尝试,以及需要多少努力和调整才能使事情正常运行的尝试。

一般来说,像OpenAI或Anthropic这样的付费API被认为更可靠。然而,由于其可定制性和透明度的方法,本地开源模型因其定制性而日益受到欢迎。

贡献: 欢迎任何人为文档贡献新的LLMs。只需复制现有的笔记本,设置和测试你的LLM,并使用你的结果打开一个PR。

如果你有改进现有笔记本设置的方法,欢迎对此进行更改的贡献!

图例

  • ✅ = 应该正常工作
  • ⚠️ = 有时不可靠,可能需要提示工程来改进
  • 🛑 = 通常不可靠,需要提示工程/微调来改进

付费LLM API#

模型名称 基本查询引擎 路由查询引擎 子问题查询引擎 Text2SQL Pydantic程序 数据代理
备注
gpt-3.5-turbo (openai)
gpt-3.5-turbo-instruct (openai) ⚠️ 数据代理中的工具使用似乎不稳定。
gpt-4 (openai)
claude-3 opus ⚠️
claude-3 sonnet ⚠️ 易于产生工具输入幻觉。
claude-2 (anthropic) ⚠️ 易于产生工具输入幻觉。
claude-instant-1.2 (anthropic) ⚠️ 易于产生工具输入幻觉。

开源LLM#

由于开源LLM需要大量资源,因此进行了量化。量化只是一种通过缩小模型内计算的精度来减小LLM大小的方法。研究表明,对于大型LLM,可以实现高达4位的量化,而不会严重影响性能。

模型名称 基本查询引擎 路由查询引擎 子问题查询引擎 Text2SQL Pydantic程序 数据代理
备注
llama2-chat-7b 4bit (huggingface) 🛑 🛑 🛑 🛑 ⚠️ Llama2似乎非常健谈,这使得解析结构化输出变得困难。可能需要进行微调和提示工程以获得更好的结构化输出性能。
llama2-13b-chat (replicate) 🛑 🛑 🛑 我们的ReAct提示期望结构化输出,而llama-13b在这方面表现不佳。
llama2-70b-chat (replicate) 🛑 ⚠️ 解析结构化输出仍然存在一些问题,特别是在处理Pydantic程序时。
Mistral-7B-instruct-v0.1 4bit (huggingface) 🛑 🛑 ⚠️ ⚠️ ⚠️ 与Llama2相比,Mistral在处理结构化输出方面似乎稍微更可靠。可能通过一些提示工程来提高性能。
zephyr-7b-alpha (huggingface) ⚠️ 总体而言,zyphyr-7b-alpha似乎比其他同等大小的开源模型更可靠。尽管仍然会有一些幻觉,特别是作为一个代理。
zephyr-7b-beta (huggingface) 🛑 zyphyr-7b-alpha相比,zyphyr-7b-beta作为代理表现良好,但在Pydantic程序方面存在问题。
stablelm-zephyr-3b (huggingface) ⚠️ 🛑 🛑 stablelm-zephyr-3b 在处理结构化输出方面表现出色(甚至超过许多更大的模型)。它在文本转SQL和工具使用方面有些困难。
starling-lm-7b-alpha (huggingface) 🛑 ⚠️ starling-lm-7b-alpha 在代理任务上表现出色。它在路由方面有些困难,并且在文本转SQL方面表现不一致。
phi-3-mini-4k-instruct (microsoft) ⚠️ ⚠️ phi-3-mini-4k-instruct 在基本的RAG、文本转SQL、Pydantic程序和查询规划任务上表现良好。它在路由和代理任务方面有些困难。

模块#

我们支持与OpenAI、Hugging Face、PaLM等的集成。

查看完整的模块列表

进一步阅读#