PureAutoCodeQL 的全新 LLM 配置系统提供了灵活、通用的服务商管理方案,支持内置和自定义服务商。
服务商配置数据类,包含:
name: 内部标识符display_name: 用户友好的显示名称base_url: API 端点default_think_model: 默认推理模型default_chat_model: 默认对话模型env_keys: API Key 环境变量列表env_base_urls: Base URL 环境变量列表
服务商注册中心,管理所有服务商(内置和自定义)。
模型角色枚举:
THINK: 推理模型(用于 CodeQL 等复杂任务)CHAT: 对话模型(用于一般分析任务)
python config.py list输出示例:
╭─────────────────────── 🤖 LLM 服务商状态一览 ───────────────────────╮
│ 服务商 推理模型 对话模型 API Key 网络 状态 类型 │
├─────────────────────────────────────────────────────────────────────────┤
│ DeepSeek deepseek-reasoner deepseek-chat ✓ ✓ ✅ 可用 内置 │
│ SiliconFlow (硅基流动) deepseek-ai/DeepSeek-R1 Pro/deepseek-ai/Deep... ✓ ✓ ✅ 可用 内置 │
╰─────────────────────────────────────────────────────────────────────────╯
python config.py show siliconflowpython config.py test deepseekpython config.py setup系统内置了以下服务商(均支持 OpenAI 兼容 API):
- Base URL:
https://api.deepseek.com/v1 - 环境变量:
DEEPSEEK_API_KEY - 推理模型:
deepseek-reasoner - 对话模型:
deepseek-chat
- Base URL:
https://api.siliconflow.cn/v1 - 环境变量:
SILICONFLOW_API_KEY或SF_API_KEY - 推理模型:
deepseek-ai/DeepSeek-R1 - 对话模型:
Pro/deepseek-ai/DeepSeek-V3.2-Exp - 可用模型: 包括 MiniMax-M2, Kimi-K2, Qwen3-Coder 等
- Base URL:
https://open.bigmodel.cn/api/paas/v4/ - 环境变量:
ZHIPU_API_KEY或GLM_API_KEY - 默认模型:
glm-4.6
- Base URL:
https://api.moonshot.cn/v1 - 环境变量:
KIMI_API_KEY或MOONSHOT_API_KEY - 推理模型:
kimi-k2-thinking - 对话模型:
kimi-k2-0905-preview
- Base URL:
https://generativelanguage.googleapis.com/v1beta/openai - 环境变量:
GEMINI_API_KEY或GOOGLE_API_KEY - 默认模型:
gemini-2.5-pro
创建 my_providers.yaml:
custom_providers:
- name: "my_openai"
display_name: "我的 OpenAI 代理"
base_url: "https://my-proxy.com/v1"
default_think_model: "gpt-4"
default_chat_model: "gpt-3.5-turbo"
env_keys:
- "MY_OPENAI_KEY"
env_base_urls:
- "MY_OPENAI_BASE_URL"
description: "通过代理访问 OpenAI API"python config.py register --file my_providers.yamlfrom config import get_llm_config, LLMRole
config = get_llm_config(LLMRole.THINK, provider_name="my_openai")python config.py listpython config.py list --available-onlypython config.py show <provider_name>python config.py test <provider_name>python config.py register --file <yaml_file>python config.py setupfrom config import get_llm_config, LLMRole
# 使用默认服务商
think_config = get_llm_config(LLMRole.THINK)
chat_config = get_llm_config(LLMRole.CHAT)
# 指定服务商
config = get_llm_config(LLMRole.THINK, provider_name="siliconflow")
# 指定模型
config = get_llm_config(
LLMRole.THINK,
provider_name="siliconflow",
model_name="Qwen/Qwen3-Coder-480B-A35B-Instruct"
)
# 完全自定义
config = get_llm_config(
LLMRole.THINK,
provider_name="my_custom",
model_name="custom-model",
api_key="sk-xxx",
base_url="https://api.example.com/v1"
)from config import ProviderRegistry, display_providers_status
# 查看所有服务商
display_providers_status()
# 获取服务商信息
provider = ProviderRegistry.get("deepseek")
print(provider.display_name)
print(provider.default_think_model)
# 检查服务商状态
is_available = provider.is_configured() and provider.is_reachable()
# 列出所有可用服务商
available = ProviderRegistry.list_available()
# 注册自定义服务商
from config import ProviderConfig
ProviderRegistry.register(ProviderConfig(
name="my_llm",
display_name="My Custom LLM",
base_url="http://localhost:8000/v1",
default_think_model="model-think",
default_chat_model="model-chat",
env_keys=["MY_LLM_KEY"],
env_base_urls=["MY_LLM_URL"],
is_builtin=False
))# 启用自动切换:当首选服务商不可用时,自动切换到可用的
config = get_llm_config(
LLMRole.THINK,
auto_fallback=True # 启用自动切换
)from config import (
display_providers_status,
display_provider_detail,
display_all_providers,
validate_provider,
display_validation_result
)
# 显示所有服务商状态(表格形式)
display_providers_status()
# 显示单个服务商详情
display_provider_detail("siliconflow")
# 显示所有服务商的完整信息
display_all_providers()
# 验证服务商配置
result = validate_provider("deepseek")
print(result) # {'success': True, 'provider': 'deepseek', ...}
# 显示验证结果(美化输出)
display_validation_result("deepseek")推荐使用环境变量管理 API Key:
# 设置默认服务商
export LLM_PROVIDER=siliconflow
# 设置 API Key
export SILICONFLOW_API_KEY=sk-xxx
# 覆盖默认模型
export THINK_MODEL=deepseek-ai/DeepSeek-R1
export CHAT_MODEL=Pro/deepseek-ai/DeepSeek-V3.2-Exp在项目根目录创建 .env 文件:
LLM_PROVIDER=siliconflow
SILICONFLOW_API_KEY=sk-xxx
THINK_MODEL=deepseek-ai/DeepSeek-R1
CHAT_MODEL=Pro/deepseek-ai/DeepSeek-V3.2-Exp# 开发环境
dev_config = get_llm_config(
LLMRole.THINK,
provider_name="local_llm", # 使用本地模型
base_url="http://localhost:11434/v1"
)
# 生产环境
prod_config = get_llm_config(
LLMRole.THINK,
provider_name="siliconflow",
auto_fallback=True # 生产环境启用自动切换
)custom_providers:
- name: "prod_openai"
display_name: "生产环境 OpenAI"
base_url: "https://prod-proxy.example.com/v1"
default_think_model: "gpt-4-turbo"
default_chat_model: "gpt-3.5-turbo"
env_keys:
- "PROD_OPENAI_KEY"
env_base_urls:
- "PROD_OPENAI_URL"
description: "生产环境专用 OpenAI 代理"
custom_params:
region: "us-east-1"
tier: "premium"from config import get_llm_config, LLMRole, ProviderRegistry
try:
config = get_llm_config(LLMRole.THINK, provider_name="unknown")
except ValueError as e:
print(f"服务商不存在: {e}")
# 列出可用服务商
available = ProviderRegistry.list_all()
print(f"可用服务商: {[p.name for p in available]}")配置优先级(从高到低):
- 函数参数(
api_key,base_url,model_name) - 角色特定环境变量(
THINK_MODEL,CHAT_MODEL) - 服务商专属环境变量(如
DEEPSEEK_API_KEY) - 通用环境变量(
OPENAI_API_KEY,OPENAI_BASE_URL) - 服务商默认值
A: 设置环境变量 LLM_PROVIDER 或在代码中指定 provider_name。
A: 创建 YAML 配置文件并使用 python config.py register --file 注册。
A: 运行 python config.py setup 或 python config.py list。
A: 所有兼容 OpenAI API 格式的服务商都支持。
A: 创建自定义服务商配置,指向本地 API 端点(如 http://localhost:11434/v1)。
- ✅ 引入
ProviderConfig和ProviderRegistry架构 - ✅ 支持自定义服务商(YAML 配置)
- ✅ 使用 Rich 库实现美观的信息展示
- ✅ 完整的命令行工具
- ✅ 自动服务商切换功能
- ✅ 向后兼容旧版 API
- 基本的服务商支持(硬编码)
- 环境变量配置
- 简单的模型选择