A powerful Python toolkit for simplifying LLM integration and management with multi-model scheduling, fault tolerance, and load balancing support
Project description
llmakits
一个功能强大的Python工具包,用于简化大语言模型(LLM)的集成和管理。支持多模型调度、故障转移、负载均衡等功能。
功能特性
- 🚀 多模型支持: 支持OpenAI、智谱AI、DashScope、ModelScope等多个主流LLM平台;
- 🔄 智能调度: 内置模型故障转移和负载均衡机制;
- 自动切换:当模型失败时,自动切换到下个可用模型;
- 负载均衡:Token 或 请求次数 达到上限后,自动切换到下个api_key;
- API密钥用尽处理:自动检测并移除API密钥用尽的模型;
- 📊 消息处理: 强大的消息格式化、验证和提取功能;
- 🛡️ 错误处理: 完善的重试机制和异常处理;
- 📝 流式输出: 支持流式响应处理;
- 🎯 电商工具: 内置电商场景专用工具集;
- 💡 状态保持: 模型实例缓存,避免重复实例化,保持API密钥切换状态。
安装/更新
pip install --upgrade llmakits
快速开始
1. 配置模型和API密钥
创建配置文件 config/models_config.yaml:
Models_config:
# 标题生成专用模型组
generate_title:
- sdk_name: "dashscope"
model_name: "qwen3-max-preview"
# 翻译专用模型组
translate_box:
- sdk_name: "modelscope"
model_name: "Qwen/Qwen3-32B"
创建配置文件 config/keys_config.yaml:
支持多密钥配置,自动切换和负载均衡:
platform_name:
base_url: "api-endpoint-url"
api_keys:
- "api-key-1"
- "api-key-2"
配置说明
模型配置文件 (config/models_config.yaml):
- 支持按业务场景分组配置模型
- 每个组可以配置多个模型,实现故障转移
- 模型会按配置顺序依次尝试,直到成功
密钥配置文件 (config/keys_config.yaml):
- 支持多密钥配置,自动负载均衡
- 当密钥达到使用限制时,自动切换到下一个密钥
- 支持不同平台的独立配置
错误处理和故障转移
ModelDispatcher 提供了完善的错误处理机制:
- 模型级别故障转移: 当前模型失败时,自动切换到同组的下一个模型
- API密钥用尽检测: 自动检测
API_KEY_EXHAUSTED异常,并移除对应的模型 - 结果验证: 支持自定义验证函数,验证失败时自动尝试下一个模型
- 状态保持: 模型实例在dispatcher中缓存,保持API密钥切换状态
性能优化建议
- 使用模型组: 推荐使用
execute_with_group方法,避免重复实例化 - 合理配置模型顺序: 将性能更好、更稳定的模型放在前面
- 适当设置重试: 根据业务需求配置模型数量和密钥数量
- 监控切换次数: 通过
model_switch_count监控模型切换频率
2. 加载模型
from llmakits import load_models
# 加载配置好的模型
models = load_models('config/models_config.yaml', 'config/keys_config.yaml')
# 获取模型组
my_models = models['my_models']
3. 发送消息(多模型调度)
使用 ModelDispatcher(推荐)
ModelDispatcher 提供了两种使用方式,推荐使用 execute_with_group 方法:
方式一:使用模型组(推荐)
from llmakits.dispatcher import ModelDispatcher
# 创建调度器实例并加载配置
dispatcher = ModelDispatcher('config/models_config.yaml', 'config/keys_config.yaml')
# 准备消息
message_info = {
"system_prompt": "你是一个 helpful 助手",
"user_text": "请介绍一下Python编程语言"
}
# 使用模型组执行任务 - 自动管理模型状态和故障转移
result, tokens = dispatcher.execute_with_group(message_info, group_name="generate_title")
print(f"结果: {result}")
print(f"使用token数: {tokens}")
print(f"模型切换次数: {dispatcher.model_switch_count}")
消息格式说明
message_info 参数支持以下字段:
system_prompt: 系统提示词(可选)user_text: 用户输入文本(可选)include_img: 是否包含图片(可选,默认False)img_list: 图片URL列表(可选,默认为空列表)
基本使用示例:
# 简单文本对话
message_info = {
"system_prompt": "你是一个 helpful 助手",
"user_text": "请介绍一下Python编程语言"
}
# 带图片的对话
message_info = {
"system_prompt": "你是一个图像分析专家",
"user_text": "请分析这张图片",
"include_img": True,
"img_list": ["https://example.com/image.jpg"]
}
方式二:手动传入模型列表
from llmakits.dispatcher import ModelDispatcher
# 创建调度器实例
dispatcher = ModelDispatcher()
# 准备消息和模型列表
message_info = {
"system_prompt": "你是一个 helpful 助手",
"user_text": "请介绍一下Python编程语言"
}
# 执行任务
result, tokens = dispatcher.execute_task(message_info, my_models)
高级用法:结果验证和格式化
from llmakits.dispatcher import ModelDispatcher
# 创建调度器
dispatcher = ModelDispatcher('config/models_config.yaml', 'config/keys_config.yaml')
# 定义结果验证函数
def validate_result(result):
"""验证结果是否包含必要的字段"""
return "python" in result.lower() and "编程" in result
# 准备消息
message_info = {
"system_prompt": "你是一个编程专家",
"user_text": "请介绍Python语言的特点"
}
# 执行任务,启用JSON格式化和结果验证
result, tokens = dispatcher.execute_with_group(
message_info,
group_name="generate_title",
format_json=True, # 格式化为JSON
validate_func=validate_result # 验证结果
)
print(f"验证通过的结果: {result}")
print(f"使用token数: {tokens}")
4. 直接使用模型客户端
from llmakits import BaseOpenai
# 创建模型客户端
model = BaseOpenai(
platform="openai",
base_url="https://api.openai.com/v1",
api_keys=["your-api-key"],
model_name="gpt-3.5-turbo"
)
# 方法1: 使用消息列表格式(兼容OpenAI格式)
messages = [
{"role": "system", "content": "你是一个 helpful 助手"},
{"role": "user", "content": "Hello!"}
]
result, tokens = model.send_message(messages)
print(f"回复: {result}")
# 方法2: 使用message_info格式(推荐)
message_info = {
"system_prompt": "你是一个 helpful 助手",
"user_text": "Hello!"
}
result, tokens = model.send_message([], message_info)
print(f"回复: {result}")
高级功能
消息处理
from llmakits.message import prepare_messages, extract_field, convert_to_json
# 准备消息
messages = prepare_messages(system="你是一个助手", user="请帮忙", assistant="好的")
# 提取并转换为JSON
json_str = '{"name": "test"} some text'
result = convert_to_json(json_str)
# 提取字段
field_value = extract_field(json_str, "name")
print(field_value) # 输出: test
# 提取多个字段
name, age = extract_field(json_str, "name", "age")
print(name) # 输出: test
print(age) # 输出: None
电商工具
基础工具函数
from llmakits.e_commerce import contains_chinese, remove_chinese, shorten_title, validate_html
# 使用简单函数
result = contains_chinese("智能手机") # 返回 True
title = shorten_title("一个很长的商品标题", 50) # 缩减到50字符
# HTML验证
allowed_tags = {'div', 'p', 'span', 'strong', 'em'}
is_valid, error_msg = validate_html("<div>内容</div>", allowed_tags)
高级电商功能
电商工具函数现在支持使用模型组名称,更加简洁:
from llmakits.dispatcher import ModelDispatcher
from llmakits.e_commerce.kit import generate_title, predict_category, translate_options, validate_html_fix
# 创建调度器 - 加载配置
dispatcher = ModelDispatcher('config/models_config.yaml', 'config/keys_config.yaml')
# 生成优化商品标题
system_prompt = "你是一个电商标题优化专家"
title = generate_title(
dispatcher=dispatcher,
title="原始商品标题",
group_name="generate_title", # 使用模型组名称
system_prompt=system_prompt,
max_length=225,
min_length=10
)
# 预测商品类目
cat_tree = {} # 类目树数据
categories = predict_category(
dispatcher=dispatcher,
title="商品标题",
cat_tree=cat_tree,
system_prompt="预测商品类目",
group_name="generate_title" # 使用模型组名称
)
# 翻译商品选项
options = ["红色", "蓝色", "绿色"]
translated = translate_options(
dispatcher=dispatcher,
title="商品标题",
options=options,
to_lang="english",
group_name="translate_box", # 使用模型组名称
system_prompt="翻译商品选项"
)
# 验证并修复HTML
html_content = "<div>内容</div><script>alert('test')</script>"
allowed_tags = {'div', 'p', 'span'}
fixed_html = validate_html_fix(
dispatcher=dispatcher,
html_string=html_content,
allowed_tags=allowed_tags,
group_name="generate_title", # 使用模型组名称
prompt="修复HTML中的不允许标签"
)
许可证
Apache 2.0 License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file llmakits-0.1.6.tar.gz.
File metadata
- Download URL: llmakits-0.1.6.tar.gz
- Upload date:
- Size: 27.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ec4794641e215b190fa311e5ce5d5c19fcbb88cb52d8349ce67adbbc55ed64a3
|
|
| MD5 |
fba30509af1a6746248b821b51f4a763
|
|
| BLAKE2b-256 |
3d3c4863fdb2d0b942835dc7fca146d6cf1963627ce78bf7f871eb87cc8bd108
|
File details
Details for the file llmakits-0.1.6-py3-none-any.whl.
File metadata
- Download URL: llmakits-0.1.6-py3-none-any.whl
- Upload date:
- Size: 28.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a0a9a4ba6f888e70d0c596ea3265698146278db7b5e6a2da139cba2619b0d512
|
|
| MD5 |
1c38ad045ca35267cee279f19749f90a
|
|
| BLAKE2b-256 |
4a538be6f02a03933185f79354f6c44f6250ae57836789fb83a44e6579dd6937
|