趋近智
使用大型语言模型构建应用程序不仅仅是向API发送文本字符串。您需要管理不同的提供商API,编写有效的提示,处理各种数据格式,并安排复杂的工作流程。Kerb工具包旨在为这一过程带来结构和简便性。它的架构遵循几个主要原则,这些原则使构建、测试和维护LLM应用程序更有效率。
LLM生态系统中一个主要难题是API的多样性。OpenAI、Anthropic和Google都有各自的SDK、数据格式和认证方式。在不同提供商的模型之间切换可能需要大量代码修改,这使得测试和生产上的灵活性变得困难。
该工具包通过统一的生成界面解决此问题。generate() 函数作为与任何支持的LLM交互的单一、一致的入口点。您指定提供商和模型,工具包会在后台处理特定于提供商的实现细节。此设计使您的应用程序可移植,并允许您以最少的代码修改切换模型。
例如,使用OpenAI的GPT-4o-mini生成文本与使用Anthropic的Claude-3.5-Haiku生成文本看起来几乎一样。
from kerb.generation import generate, ModelName, LLMProvider
# 使用OpenAI生成文本
response_openai = generate(
"What is the difference between a list and a tuple in Python?",
model=ModelName.GPT_4O_MINI,
provider=LLMProvider.OPENAI
)
# 使用相同接口通过Anthropic生成文本
response_anthropic = generate(
"What is the difference between a list and a tuple in Python?",
model=ModelName.CLAUDE_35_HAIKU,
provider=LLMProvider.ANTHROPIC
)
print(f"OpenAI 响应: {response_openai.content[:70]}...")
print(f"Anthropic 响应: {response_anthropic.content[:70]}...")
这种抽象让您能够专注于应用程序的逻辑,而不是每个提供商API的具体细节。在整个文档中,您将使用这个统一的接口来完成所有文本生成任务。
现代LLM应用程序通常是复杂系统,由多个专业组件构成。例如,一个检索增强生成(RAG)系统需要用于加载文档、将其切分为块、创建嵌入、获取相关信息以及最终生成回复的组件。
该工具包被组织成独立、集中的模块,这些模块与上述逻辑组件相对应。这种模块化设计使您能够仅使用所需部分并将其组合以构建复杂的应用程序。
工具包的模块可以组合起来,构建RAG系统和自主代理等复杂工作流程。
每个模块都有特定的职责:
document & chunk: 加载、预处理和分拆文本数据。embedding: 创建文本的数值表示以进行语义搜索。retrieval: 从知识库中找到相关信息。prompt: 通过模板构造和管理动态提示。generation: 通过统一接口与LLM交互。memory: 在对话式应用程序中保持状态。agent: 构建能够推理和使用工具的自主代理。这种关注点分离使您的代码更清晰、更易于测试和维护。您可以替换分块策略或嵌入模型,而无需更改应用程序的其余部分。
将模型名称、API密钥和生成参数直接硬编码到应用程序逻辑中会导致代码僵化且不安全。该工具包提倡配置驱动的方法,其中这些设置与应用程序代码分开管理。
config 模块提供了一个 ConfigManager,它集中管理所有配置。这使您能够以结构化的方式定义模型、设置提供商详细信息和管理API密钥,通常是通过从环境变量安全地加载它们。
from kerb.config import ConfigManager, ModelConfig
from kerb.config.enums import ProviderType
# 初始化配置管理器
config = ConfigManager()
# 定义模型配置
gpt4_config = ModelConfig(
name="gpt-4o-mini",
provider=ProviderType.OPENAI,
api_key_env_var="OPENAI_API_KEY", # 从环境中安全加载密钥
max_tokens=4096,
temperature=0.7
)
# 将模型添加到中心配置
config.add_model(gpt4_config)
# 稍后在您的应用程序中,您可以获取此配置
retrieved_config = config.get_model("gpt-4o-mini")
print(f"已为 {retrieved_config.name} 加载配置,温度为 {retrieved_config.temperature}")
通过将配置与逻辑分离,您可以轻松地在开发和生产环境之间切换,无需更改代码即可更新模型参数,并使敏感凭据远离您的源代码管理。我们将在下一节中应用这一原则,届时我们将设置第一个LLM提供商。
这部分内容有帮助吗?
prompt模块涵盖。© 2026 ApX Machine Learning用心打造