feat: 第一张真实 Eino 图 + 偏好记忆(让模型知道是我)
dispatcher 不再手搓 pool.Stream,改用编译好的 Eino 图驱动;接入用户常驻画像,
推理前召回并注入 system prompt,实现个性化(架构'心脏'首次真跳)。
Eino 图(dispatcher/internal/eino): START→recall→prompt→model→END + 全局 State
- recall(Lambda): 取 Meta[user_id] → 调 MCP memory_get → ProcessState 写画像
- prompt(ChatTemplate): {profile} 注入 system,{query} 作 user
- model: poolModel 适配 LLM Pool 为 model.BaseChatModel(Generate+Stream, schema.Pipe)
- 写回: 流排空后异步 memorize(流式节点走 OnEndWithStreamOutput 非 OnEndFn)
记忆存储(mcp-go owns): GORM Profile→sundynix_user_profile(复合主键, AutoMigrate,
遵守前缀约定), 新工具 memory_get/memory_upsert, 连不上降级
Gateway: SubmitTask 注入 Meta[user_id](X-User-ID 头), PUT /api/v1/memory→memory_upsert
shared: contract.MetaUserID; llm.Pool 拆出 StreamText
验证: 4 模块 build✓ + 3 e2e PASS; live 跑通——PUT 偏好落 sundynix_user_profile,
带 X-User-ID 提交→Eino recall 召回→注入→SSE 流出含画像的个性化回答, writeback 触发
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+11
-2
@@ -37,9 +37,18 @@ for _ in $(seq 1 30); do
|
||||
grep -q "tools ready" .bin/mcp-go.log 2>/dev/null && break || sleep 0.1
|
||||
done
|
||||
|
||||
echo "== 提交 DSL 任务 =="
|
||||
USER="wt"
|
||||
echo "== 登记用户偏好记忆 (→ mcp-go memory_upsert → sundynix_user_profile) =="
|
||||
curl -s -X PUT http://127.0.0.1:8080/api/v1/memory \
|
||||
-H 'Content-Type: application/json' -H "X-User-ID: $USER" \
|
||||
-d '{"key":"称呼","value":"老王"}'; echo
|
||||
curl -s -X PUT http://127.0.0.1:8080/api/v1/memory \
|
||||
-H 'Content-Type: application/json' -H "X-User-ID: $USER" \
|
||||
-d '{"key":"回答偏好","value":"简洁、中文、多给要点"}'; echo
|
||||
|
||||
echo "== 提交 DSL 任务 (带 X-User-ID,Dispatcher 将召回其画像) =="
|
||||
RESP=$(curl -s -X POST http://127.0.0.1:8080/api/v1/tasks \
|
||||
-H 'Content-Type: application/json' \
|
||||
-H 'Content-Type: application/json' -H "X-User-ID: $USER" \
|
||||
-d '{"nodes":[{"id":"n1","type":"agent","data":{"prompt":"hello"}}],"edges":[]}')
|
||||
echo "$RESP"
|
||||
TASK_ID=$(echo "$RESP" | sed -n 's/.*"task_id":"\([^"]*\)".*/\1/p')
|
||||
|
||||
Reference in New Issue
Block a user