-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmulti_provider.py
More file actions
58 lines (42 loc) · 2.22 KB
/
Copy pathmulti_provider.py
File metadata and controls
58 lines (42 loc) · 2.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
"""Pattern 16 · Multi-Provider —— 同 workflow 内混编不同 LLM provider
MAF 第一方支持 Foundry / Azure OpenAI / OpenAI / Claude / Bedrock / Gemini / Ollama。
同一个 OpenAIChatCompletionClient 基类,改 base_url + api_key + model 就切 provider。
本 demo:DeepSeek 跑 screenwriter(便宜)+ Gemini 跑 critic(多视角)
场景:
- 成本优化(小模型跑简单 agent,大模型跑关键 agent)
- 能力组合(不同 model 强项不同)
- 反 vendor-lock(一家挂了立即切)
- ensemble 提升多样性
反场景:单一 provider 已够用(多家维护成本高)
"""
from __future__ import annotations
import asyncio
from agent_framework_orchestrations import SequentialBuilder
from common import LOGLINE, banner, make_client, make_gemini_client, print_final_output, print_run_events
async def main():
banner("Pattern 16 · MULTI-PROVIDER —— 同 workflow 内 DeepSeek + Gemini 混合")
# DeepSeek 跑 screenwriter(编剧主推理用便宜的 DeepSeek)
ds_client = make_client()
screenwriter = ds_client.as_agent(
name="screenwriter-deepseek",
instructions="你是编剧。把 logline 写成开场镜头剧本片段,<150 字。",
)
# Gemini 跑 critic(不同训练分布,多视角)
gemini_client = make_gemini_client()
critic = gemini_client.as_agent(
name="critic-gemini",
instructions="你是创意总监。给读到的剧本 3 条最锋利的修订建议,每条 ≤ 30 字。",
)
# 同一个 SequentialBuilder 接 2 个不同 provider
wf = SequentialBuilder(participants=[screenwriter, critic]).build()
print(" pipeline: screenwriter(DeepSeek) → critic(Gemini)")
print(f"\n user → logline:{LOGLINE}\n")
result = await wf.run(LOGLINE)
print_run_events(result, max_payload=240)
print_final_output(result)
print("\n ── MAF 反 vendor-lock 体现 ──")
print(" - 同一 SequentialBuilder 同时接 2 个不同 provider,无胶水代码")
print(" - 切第三个 provider(Claude / Bedrock / Ollama)只换 client 工厂")
print(" - 业务 prompt + workflow 拓扑跟 provider 选型完全解耦")
if __name__ == "__main__":
asyncio.run(main())