From 075d41f5b3cda4a19026bd295aaec947f872ec37 Mon Sep 17 00:00:00 2001 From: Blizzard Date: Fri, 26 Jun 2026 11:10:18 +0800 Subject: [PATCH] =?UTF-8?q?feat(llm):=20=E6=9C=AC=E5=9C=B0=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E6=8E=A5=E5=85=A5=20vLLM=20/=20Ollama=20+=20reasoning?= =?UTF-8?q?=20=E6=80=9D=E8=80=83=E8=BF=87=E7=A8=8B=E5=85=A5=E8=BD=A8?= =?UTF-8?q?=E8=BF=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit vLLM 与 Ollama 都暴露 OpenAI 兼容 API(底层 go-openai 请求 {base}/chat/completions), 故统一走 openai 客户端,按 provider 归一化连接参数: - Ollama/vLLM 的 OpenAI 端点固定在 /v1,BaseURL 漏写自动补全(否则打到 /chat/completions 404) - 本地后端默认不校验 api_key → 缺省补占位(ollama→"ollama",vllm→"EMPTY";openai 客户端要求非空) - 显式 key 一律尊重(vLLM --api-key 启动);在线 provider 原样不动(DeepSeek 两种都收) reasoning_content 适配:ChatStream 增 onReasoning 回调,捕获 reasoning 模型 (本地 Qwen3 思考 / DeepSeek-R1 / QwQ、在线 deepseek-v4-pro)的思考分片。思考阶段分片 Content 为空本就不污染答案;runAgent 把思考累计后 surface 到 exec 轨迹「推理过程」事件。 控制台 ModelManager 加 ollama 选项;llm 包补 normalizeBaseURL / apiKeyOrPlaceholder 单测。 四模块全绿。live:经 admin 配 ollama qwen2.5:0.5b → dispatcher 热切(日志 base 自动 .../v1) → POST /v1/chat/completions 200 端到端出答案;切回 deepseek-v4-pro → exec 轨迹现「推理过程:思考26字…」。 Co-Authored-By: Claude Opus 4.8 (1M context) --- project_analysis.md | 2 +- .../src/components/ModelManager.tsx | 3 +- sundynix-dispatcher/internal/eino/graph.go | 9 ++- .../internal/eino/integration_test.go | 2 +- sundynix-dispatcher/internal/eino/model.go | 4 +- .../internal/eino/orchestrator.go | 2 +- sundynix-dispatcher/internal/llm/pool.go | 67 ++++++++++++++++--- sundynix-dispatcher/internal/llm/pool_test.go | 45 +++++++++++++ 8 files changed, 118 insertions(+), 16 deletions(-) create mode 100644 sundynix-dispatcher/internal/llm/pool_test.go diff --git a/project_analysis.md b/project_analysis.md index 8977289..ca68218 100644 --- a/project_analysis.md +++ b/project_analysis.md @@ -204,7 +204,7 @@ Harness = 围绕 LLM 的可靠性 / 安全 / 质量治理层。4 个组件均为 | 优先级 | 项目 | 说明 | |:------:|------|------| | P0 | 真实负载 + 长稳压测,给容量曲线 | "生产级并发"需数据背书 | -| P0 | 本地模型(vLLM/Ollama) + 推理模型 reasoning_content 适配 | 对齐生产 Qwen | +| ~~P0~~ ✅ | ~~本地模型(vLLM/Ollama) + reasoning_content 适配~~:Pool provider 感知(Ollama/vLLM 自动补 /v1 + 占位 key),统一走 OpenAI 兼容路径;ChatStream 加 onReasoning,思考过程 surface 到 exec 轨迹(不污染答案)。控制台加 ollama 选项。live:Ollama qwen2.5:0.5b 端到端出答案;deepseek-v4-pro「推理过程」入轨迹 | 对齐生产 Qwen | | P1 | 高可用:网关/调度多副本 + NATS 集群 + 自愈 | 解单点 | | P1 | 备份/灾备演练(PG/Milvus/Neo4j) | 数据安全 | | ~~P1~~ ✅ | ~~优雅停机 drain~~:三 Go 服务全覆盖(gateway HTTP Shutdown / dispatcher 在途任务跑完 / mcp-go 在途工具回完),SIGTERM 后等在途至 SHUTDOWN_DRAIN_TIMEOUT(默认30s)再退;在途任务 ctx 脱离信号 ctx 不被掐断。剩 exec 轨迹 Redis 回放 | 可靠性 | diff --git a/sundynix-admin/src/components/ModelManager.tsx b/sundynix-admin/src/components/ModelManager.tsx index 268019e..dfd9b6c 100644 --- a/sundynix-admin/src/components/ModelManager.tsx +++ b/sundynix-admin/src/components/ModelManager.tsx @@ -132,8 +132,9 @@ export function ModelManager({ value={form.provider} onChange={(e) => set("provider", e.target.value)} > - + +