syftr 代理优化工具,帮助用户针对给定预算找到更优的代理工作流。用户提供自有数据集,从模型和组件中构建搜索空间,syftr通过先进的多目标贝叶斯优化方法和新型领域专用“帕累托修剪器”,对代理和非代理流的搜索空间进行高效采样,以估算准确性与成本、延迟、吞吐量等竞争目标之间的帕累托前沿(最优权衡曲线)。
帕累托最优解搜索:在指定预算下,平衡准确性与其他竞争目标,生成优化的工作流组合。
可选评估机制:支持对生成的工作流进行灵活评估,验证其实际表现。
多场景适配:可应用于基础模型、合成考试生成、语料库处理等多个场景。
syftr基于多个强大的开源项目构建:
Ray:用于在大型CPU和GPU集群上实现搜索的分布式扩展,提升计算效率。
Optuna:提供灵活的“定义即运行”接口(类似于PyTorch的即时执行),支持先进的多目标优化算法。
LlamaIndex:用于构建复杂的代理和非代理RAG工作流,处理自然语言相关任务。
HuggingFace Datasets:提供快速、协作且统一的数据集接口,方便数据加载和处理。
Trace:优化工作流中的文本组件,如提示词,提升文本处理效果。
1、克隆syftr代码仓库。
2、执行以下命令:
curl -LsSf https://astral.sh/uv/install.sh | sh
uv venv --python 3.12.7
source .venv/bin/activate
uv sync --extra dev
示例功能需要以下凭证:
• Azure OpenAI API密钥
• Azure OpenAI端点URL(api_url
)
• PostgreSQL服务器DSN(若未提供,将使用本地SQLite)
将config.yaml.sample
复制为config.yaml
,编辑其中需要的部分以填入凭证。
1、主配置文件:config.yaml
可指定路径、日志、数据库和Ray参数等,参考config.yaml.sample
获取详细说明和示例,重命名该文件,然后根据自身基础设施填充必要细节。
2、环境变量配置:可通过环境变量配置,如export SYFTR_PATHS__ROOT_DIR=/foo/bar
。
3、数据库设置:默认使用SQLite存储Optuna数据,database.dsn
字段可配置任意Optuna支持的关系数据库存储,分布式工作负载建议使用Postgres。
配置完成后,可正常运行examples/1-welcome.ipynb
示例。
1、运行make check
验证凭证和配置,若未为LLM连接提供配置,大多数连接可能失败。
2、尝试位于examples
目录下的Jupyter示例笔记本。
3、或通过用户API直接运行syftr研究:
from syftr import api
s = api.Study.from_file("studies/example-dr-docs.yaml")
s.run()
研究完成后获取结果:
s.wait_for_completion()
print(s.pareto_flows)
[{'metrics': {'accuracy': 0.7, 'llm_cost_mean': 0.000258675},
'params': {'response_synthesizer_llm': 'gpt-4o-mini',
'rag_mode': 'no_rag',
'template_name': 'default',
'enforce_full_evaluation': True}},
...
]
除内置LLM外,可在config.yaml
中启用其他兼容OpenAI API的端点。
示例:生成模型配置
local_models:
default_api_key: "YOUR_API_KEY_HERE"
generative:
- model_name: "microsoft/Phi-4-multimodal-instruct"
api_base: "http://phi-4-host.com/openai/v1"
max_tokens: 2000
context_window: 129072
is_function_calling_model: true
additional_kwargs:
frequency_penalty: 1.0
temperature: 0.1
- model_name: "deepseek-ai/DeepSeek-R1-Distill-Llama-70B"
api_base: "http://big-vllm-host:8000/v1"
max_tokens: 2000
context_window: 129072
is_function_calling_model: true
additional_kwargs:
temperature: 0.6
示例:嵌入模型配置
local_models:
...
embedding:
- model_name: "BAAI/bge-small-en-v1.5"
api_base: "http://vllmhost:8001/v1"
api_key: "non-default-value"
additional_kwargs:
extra_body:
truncate_prompt_tokens: 512
- model_name: "thenlper/gte-large"
api_base: "http://vllmhost:8001/v1"
additional_kwargs:
extra_body:
truncate_prompt_tokens: 512
配置文件中添加的模型会自动加入默认搜索空间,可针对特定流组件手动启用。