Skip to content

LLM

pipeline pipeline

LLM管道通过大型语言模型(LLM)运行提示。该管道根据模型路径自动检测LLM框架。

示例

以下展示了一个使用此管道的简单示例。

from txtai import LLM

# 创建LLM管道
llm = LLM()

# 运行提示
llm(
  """
  使用提供的上下文回答以下问题。

  问题:
  txtai有哪些应用?

  上下文:
  txtai是一个用于语义搜索和由语言模型驱动的工作流的开源平台。
  """
)

# 也支持聊天消息
llm([
  {"role": "system", "content": "你是一个友好的助手。"},
  {"role": "user", "content": "回答以下问题..."}
])

LLM管道自动检测底层LLM框架。这也可以手动设置。

有关LiteLLM模型可用的选项,请参阅LiteLLM文档。llama.cpp模型支持HF Hub上的本地和远程GGUF路径。

from txtai import LLM

# Transformers
llm = LLM("meta-llama/Meta-Llama-3.1-8B-Instruct")
llm = LLM("meta-llama/Meta-Llama-3.1-8B-Instruct", method="transformers")

# llama.cpp
llm = LLM("microsoft/Phi-3-mini-4k-instruct-gguf/Phi-3-mini-4k-instruct-gguf")
llm = LLM("microsoft/Phi-3-mini-4k-instruct-gguf/Phi-3-mini-4k-instruct-gguf",
           method="llama.cpp")

# LiteLLM
llm = LLM("ollama/llama3.1")
llm = LLM("ollama/llama3.1", method="litellm")

# 自定义Ollama端点
llm = LLM("ollama/llama3.1", api_base="http://localhost:11434")

# 自定义OpenAI兼容端点
llm = LLM("openai/llama3.1", api_base="http://localhost:4000")

# LLM API - 还必须通过环境变量设置API密钥
llm = LLM("gpt-4o")
llm = LLM("claude-3-5-sonnet-20240620")

模型可以外部加载并传递给管道。这对于Transformers尚不支持或需要特殊初始化的模型很有用。

import torch

from transformers import AutoModelForCausalLM, AutoTokenizer
from txtai import LLM

# 加载Phi 3.5-mini
path = "microsoft/Phi-3.5-mini-instruct"
model = AutoModelForCausalLM.from_pretrained(
  path,
  torch_dtype=torch.bfloat16,
)
tokenizer = AutoTokenizer.from_pretrained(path)

llm = LLM((model, tokenizer))

有关更多详细示例,请参阅以下链接。

笔记本 描述
使用LLM进行提示驱动的搜索 使用大型语言模型(LLM)进行嵌入引导和提示驱动的搜索 在Colab中打开
提示模板和任务链 构建模型提示并将任务连接在一起的工作流 在Colab中打开
使用txtai构建RAG管道 检索增强生成指南,包括如何创建引用 在Colab中打开
集成LLM框架 集成llama.cpp、LiteLLM和自定义生成框架 在Colab中打开
使用语义图和RAG生成知识 使用语义图和RAG进行知识探索和发现 在Colab中打开
使用LLM构建知识图谱 使用LLM驱动的实体提取构建知识图谱 在Colab中打开
使用图路径遍历的高级RAG 图路径遍历以收集用于高级RAG的复杂数据集 在Colab中打开
使用引导生成的高级RAG 检索增强和引导生成 在Colab中打开
使用llama.cpp和外部API服务的RAG 带有额外向量和LLM框架的RAG 在Colab中打开
txtai如何实现RAG 创建RAG流程、API服务和Docker实例 在Colab中打开

配置驱动的示例

管道可以通过Python或配置运行。管道可以使用管道的小写名称配置中实例化。配置驱动的管道通过工作流API运行。

config.yml

# 使用小写类名创建管道
llm:

# 使用工作流运行管道
workflow:
  llm:
    tasks:
      - action: llm

与上述Python示例类似,底层Hugging Face管道参数模型参数可以在管道配置中设置。

llm:
  path: microsoft/Phi-3.5-mini-instruct
  torch_dtype: torch.bfloat16

使用工作流运行

from txtai import Application

# 使用工作流创建并运行管道
app = Application("config.yml")
list(app.workflow("llm", [
  """
  使用提供的上下文回答以下问题。

  问题:
  txtai有哪些应用?

  上下文:
  txtai是一个用于语义搜索和由语言模型驱动的工作流的开源平台。
  """
]))

使用API运行

CONFIG=config.yml uvicorn "txtai.api:app" &

curl \
  -X POST "http://localhost:8000/workflow" \
  -H "Content-Type: application/json" \
  -d '{"name":"llm", "elements": ["回答以下问题..."]}'

方法

管道的Python文档。

__init__(path=None, method=None, **kwargs)

Creates a new LLM.

Parameters:

Name Type Description Default
path

model path

None
method

llm model framework, infers from path if not provided

None
kwargs

model keyword arguments

{}
Source code in txtai/pipeline/llm/llm.py
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
def __init__(self, path=None, method=None, **kwargs):
    """
    Creates a new LLM.

    Args:
        path: model path
        method: llm model framework, infers from path if not provided
        kwargs: model keyword arguments
    """

    # Default LLM if not provided
    path = path if path else "google/flan-t5-base"

    # Generation instance
    self.generator = GenerationFactory.create(path, method, **kwargs)

__call__(text, maxlength=512, stream=False, **kwargs)

Generates text. Supports the following input formats:

  • String or list of strings
  • List of dictionaries with role and content key-values or lists of lists

Parameters:

Name Type Description Default
text

text|list

required
maxlength

maximum sequence length

512
stream

stream response if True, defaults to False

False
kwargs

additional generation keyword arguments

{}

Returns:

Type Description

generated text

Source code in txtai/pipeline/llm/llm.py
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
def __call__(self, text, maxlength=512, stream=False, **kwargs):
    """
    Generates text. Supports the following input formats:

      - String or list of strings
      - List of dictionaries with `role` and `content` key-values or lists of lists

    Args:
        text: text|list
        maxlength: maximum sequence length
        stream: stream response if True, defaults to False
        kwargs: additional generation keyword arguments

    Returns:
        generated text
    """

    # Debug logging
    logger.debug(text)

    # Run LLM generation
    return self.generator(text, maxlength, stream, **kwargs)