feat: Phase 6.1 收尾 — 目的路由接入所有AI组件
- Orchestrator 现在接受独立的 chatAdapter 和 intentAdapter - BackgroundThinker 使用 deep_thinking purpose 适配器 - MemoryExtractor 使用 memory_extraction purpose 适配器 - Synthesizer 使用 chat purpose 适配器 - .env 回退时所有适配器共享同一 provider,完全向后兼容 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
+23
-12
@@ -70,11 +70,22 @@ func main() {
|
||||
|
||||
// 创建 ModelSelector (优先使用 models.json,回退到 .env)
|
||||
modelSelector := llm.NewModelSelector(configLoader, envFallback)
|
||||
llmAdapter := modelSelector.DefaultAdapter()
|
||||
|
||||
// 为不同用途创建独立的适配器,支持目的路由
|
||||
// 在 .env 回退模式下,所有适配器共享同一 provider
|
||||
chatAdapter := modelSelector.DefaultAdapter()
|
||||
provider, _ := modelSelector.Select(context.Background(), llm.PurposeIntentAnalysis)
|
||||
intentAdapter := llm.NewAdapter(provider)
|
||||
provider, _ = modelSelector.Select(context.Background(), llm.PurposeDeepThinking)
|
||||
thinkerAdapter := llm.NewAdapter(provider)
|
||||
provider, _ = modelSelector.Select(context.Background(), llm.PurposeMemoryExtraction)
|
||||
memoryAdapter := llm.NewAdapter(provider)
|
||||
|
||||
if configLoader != nil && configLoader.HasConfig() {
|
||||
log.Printf("LLM适配器已就绪: models.json 驱动")
|
||||
log.Printf("LLM适配器已就绪: models.json 驱动 (chat=%s, intent=%s, think=%s, memory=%s)",
|
||||
chatAdapter.ModelName(), intentAdapter.ModelName(), thinkerAdapter.ModelName(), memoryAdapter.ModelName())
|
||||
} else {
|
||||
log.Printf("LLM适配器已就绪: .env 驱动 (模型=%s)", llmAdapter.ModelName())
|
||||
log.Printf("LLM适配器已就绪: .env 驱动 (模型=%s)", chatAdapter.ModelName())
|
||||
}
|
||||
|
||||
// 初始化记忆系统
|
||||
@@ -88,9 +99,9 @@ func main() {
|
||||
|
||||
memRetriever = memory.NewRetriever(memStore, nil)
|
||||
|
||||
// 记忆提取器使用LLM
|
||||
// 记忆提取器使用 memory purpose 适配器
|
||||
memExtractor = memory.NewExtractor(memStore, func(ctx context.Context, messages []model.LLMMessage) (*model.LLMResponse, error) {
|
||||
return llmAdapter.Chat(ctx, messages)
|
||||
return memoryAdapter.Chat(ctx, messages)
|
||||
})
|
||||
log.Println("记忆提取器已就绪")
|
||||
}
|
||||
@@ -150,7 +161,7 @@ func main() {
|
||||
thinkerCfg,
|
||||
personaLoader,
|
||||
memRetriever,
|
||||
llmAdapter,
|
||||
thinkerAdapter,
|
||||
iotClient,
|
||||
memStore,
|
||||
toolRegistry,
|
||||
@@ -197,7 +208,7 @@ func main() {
|
||||
mux := http.NewServeMux()
|
||||
|
||||
// 初始化子会话管理器
|
||||
subManager := subsession.NewManager(llmAdapter)
|
||||
subManager := subsession.NewManager(chatAdapter)
|
||||
|
||||
// 注册子会话提供者
|
||||
subManager.Register(subsession.NewGeneralProvider(personaLoader))
|
||||
@@ -210,11 +221,12 @@ func main() {
|
||||
subManager.Register(subsession.NewReviewProvider())
|
||||
log.Printf("子会话管理器已就绪: %d 个提供者 (%v)", len(subManager.ListProviders()), subManager.ListProviders())
|
||||
|
||||
// 构建新的 Orchestrator (v2.0)
|
||||
// 构建新的 Orchestrator (v2.0) — 传入 purpose 专用适配器
|
||||
orch := orchestrator.NewOrchestrator(
|
||||
personaLoader,
|
||||
ctxBuilder,
|
||||
llmAdapter,
|
||||
chatAdapter,
|
||||
intentAdapter,
|
||||
subManager,
|
||||
memRetriever,
|
||||
memExtractor,
|
||||
@@ -224,7 +236,7 @@ func main() {
|
||||
|
||||
// 注册对话API端点
|
||||
mux.HandleFunc("/api/v1/chat", func(w http.ResponseWriter, r *http.Request) {
|
||||
handleChat(w, r, orch, ctxBuilder, llmAdapter, personaLoader, memRetriever, memExtractor, iotClient, thinker, toolRegistry)
|
||||
handleChat(w, r, orch, ctxBuilder, personaLoader, memRetriever, memExtractor, iotClient, thinker, toolRegistry)
|
||||
})
|
||||
|
||||
// 注册记忆API端点
|
||||
@@ -262,7 +274,7 @@ func main() {
|
||||
|
||||
mux.HandleFunc("/api/v1/health", func(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.Write([]byte(`{"status":"ok","service":"ai-core","model":"` + llmAdapter.ModelName() + `"}`))
|
||||
w.Write([]byte(`{"status":"ok","service":"ai-core","model":"` + chatAdapter.ModelName() + `"}`))
|
||||
})
|
||||
|
||||
// 启动HTTP服务
|
||||
@@ -391,7 +403,6 @@ func handleChat(
|
||||
r *http.Request,
|
||||
orch *orchestrator.Orchestrator,
|
||||
ctxBuilder *ctxbuild.Builder,
|
||||
_ *llm.Adapter,
|
||||
_ *persona.Loader,
|
||||
_ *memory.Retriever,
|
||||
_ *memory.Extractor,
|
||||
|
||||
@@ -70,11 +70,13 @@ func (o *Orchestrator) getBus() bus.Bus {
|
||||
return o.eventBus
|
||||
}
|
||||
|
||||
// NewOrchestrator 创建编排器
|
||||
// NewOrchestrator 创建编排器。
|
||||
// chatAdapter 用于对话生成 (PurposeChat),intentAdapter 用于意图分析 (PurposeIntentAnalysis)。
|
||||
func NewOrchestrator(
|
||||
personaLoader *persona.Loader,
|
||||
contextBuilder *ctxbuild.Builder,
|
||||
llmAdapter *llm.Adapter,
|
||||
chatAdapter *llm.Adapter,
|
||||
intentAdapter *llm.Adapter,
|
||||
subManager *subsession.Manager,
|
||||
memoryRetriever *memory.Retriever,
|
||||
memoryExtractor *memory.Extractor,
|
||||
@@ -82,10 +84,10 @@ func NewOrchestrator(
|
||||
return &Orchestrator{
|
||||
personaLoader: personaLoader,
|
||||
contextBuilder: contextBuilder,
|
||||
llmAdapter: llmAdapter,
|
||||
llmAdapter: chatAdapter,
|
||||
subManager: subManager,
|
||||
intentAnalyzer: NewIntentAnalyzer(llmAdapter),
|
||||
synthesizer: NewSynthesizer(llmAdapter),
|
||||
intentAnalyzer: NewIntentAnalyzer(intentAdapter),
|
||||
synthesizer: NewSynthesizer(chatAdapter),
|
||||
memoryRetriever: memoryRetriever,
|
||||
memoryExtractor: memoryExtractor,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user