feat(honcho): embedding 切换 SiliconFlow Qwen3-0.6B 支持 Ollama 备选

- embedding 默认走 SiliconFlow Qwen3-Embedding-0.6B(独立 base URL)
- env.cfg.example 加 Ollama 备选注释块(host.docker.internal:11434)
- stack.yml api+deriver 双服务 EMBEDDING_* 配置同步
- api 段 EMBEDDING_API_KEY 用 :- 默认空,兼容 Ollama 无 key 场景
- readme Mermaid 架构图加 siliconflow + ollama 节点
- HONCHO_DERIVER_MODEL 默认值 gpt-4o-mini → gpt-5.4-mini(与上游对齐)
This commit is contained in:
2026-06-19 15:12:50 +08:00
parent 48b52ca21c
commit 9c08233d4e
3 changed files with 40 additions and 14 deletions
+16 -4
View File
@@ -48,7 +48,17 @@ HONCHO_AUTH_USE_AUTH=false
HONCHO_NAMESPACE=honcho HONCHO_NAMESPACE=honcho
# 关闭可省 embedding 费用(但失去语义检索能力) # 关闭可省 embedding 费用(但失去语义检索能力)
HONCHO_EMBED_MESSAGES=true HONCHO_EMBED_MESSAGES=true
HONCHO_EMBEDDING_MODEL=text-embedding-3-small # Embedding 模型(默认走 SiliconFlow 兼容端点,独立 base URL
HONCHO_EMBEDDING_MODEL=Qwen/Qwen3-Embedding-0.6B
HONCHO_EMBEDDING_BASE_URL=https://api.siliconflow.cn/v1
# 替代方案 A:本地 Ollama(零成本、隐私优先)
# HONCHO_EMBEDDING_MODEL=qwen3-embedding:0.6b
# HONCHO_EMBEDDING_BASE_URL=http://host.docker.internal:11434/v1
# EMBEDDING_API_KEY 可留空(Ollama 默认无 key;如配了 OLLAMA_API_KEY 环境变量再填)
# 前置:宿主机 `ollama pull qwen3-embedding:0.6b`
# docker compose 中 host.docker.internal 在 Linux compose v2 默认可用,Windows/WSL2 自动转发
# Embedding 维度(Qwen3-Embedding-0.6B 默认 1024,必须与 DB schema 一致)
# 若 Honcho 自动推断失败,需在 stack.yml 同步设置 EMBEDDING_VECTOR_DIMENSIONS=1024
# deriver 必须用支持 tool calling 的模型 # deriver 必须用支持 tool calling 的模型
HONCHO_DERIVER_MODEL=gpt-5.4-mini HONCHO_DERIVER_MODEL=gpt-5.4-mini
HONCHO_DERIVER_WORKERS=1 HONCHO_DERIVER_WORKERS=1
@@ -61,7 +71,9 @@ HONCHO_LLM_BASE_URL=https://api.openai.com/v1
# ============================================================ # ============================================================
# 敏感值(必填,env.cfg 不提交)— 在 .gitignore 已忽略 # 敏感值(必填,env.cfg 不提交)— 在 .gitignore 已忽略
# 占位符约定:REPLACE_ME_XXX → 替换为真实值(避免使用 <...> 占位符,patch 工具链会吞)
# ============================================================ # ============================================================
# HONCHO_LLM_API_KEY=<你的 OpenAI key 或兼容端点 key> # HONCHO_LLM_API_KEY=REPLACE_ME_LLM_KEY # 你的 OpenAI key 或兼容端点 key
# HONCHO_DB_PASSWORD=<强密码,不要带特殊字符,避免 URI 编码问题> # HONCHO_EMBEDDING_API_KEY=REPLACE_ME_EMBEDDING_KEY # SiliconFlow keyhttps://cloud.siliconflow.cn/account/ak
# HONCHO_AUTH_JWT_SECRET=<仅 AUTH_USE_AUTH=true 时需要;用 python scripts/generate_jwt_secret.py 生成> # HONCHO_DB_PASSWORD=REPLACE_ME_DB_PASSWORD # 强密码,不要带特殊字符,避免 URI 编码问题
# HONCHO_AUTH_JWT_SECRET=REPLACE_ME_JWT_SECRET # 仅 AUTH_USE_AUTH=true 时需要;用 python scripts/generate_jwt_secret.py 生成
+14 -8
View File
@@ -37,6 +37,8 @@ flowchart TB
hermes["Hermes Agent<br/>memory.provider=honcho"] hermes["Hermes Agent<br/>memory.provider=honcho"]
sdk["Python / TS SDK<br/>(honcho-ai / @honcho-ai/sdk)"] sdk["Python / TS SDK<br/>(honcho-ai / @honcho-ai/sdk)"]
tools["DBeaver / psql<br/>PG 5432 直连"] tools["DBeaver / psql<br/>PG 5432 直连"]
siliconflow["SiliconFlow<br/>api.siliconflow.cn/v1<br/>Qwen3-Embedding-0.6B<br/>(云端默认)"]
ollama["本地 Ollama<br/>host.docker.internal:11434<br/>qwen3-embedding:0.6b<br/>(备选,零成本)"]
end end
source -.->|docker build<br/>首次 5-10 min| api source -.->|docker build<br/>首次 5-10 min| api
@@ -47,10 +49,12 @@ flowchart TB
tools -->|:5432| database tools -->|:5432| database
api -->|:5432| database api -->|:5432| database
deriver -->|:5432| database deriver -->|:5432| database
api -->|:6379| redis api -->|:6379| redis
deriver -->|:6379| redis deriver -->|:6379| redis
deriver -.->|轮询<br/>pending messages| api deriver -.->|轮询<br/>pending messages| api
api -->|HTTPS embedding<br/>Qwen3-0.6B| siliconflow
deriver -->|HTTPS embedding<br/>Qwen3-0.6B| siliconflow
database --- pgdata database --- pgdata
redis --- redisdata redis --- redisdata
@@ -60,7 +64,7 @@ flowchart TB
classDef data fill:#f3e5f5,stroke:#4a148c,color:#000 classDef data fill:#f3e5f5,stroke:#4a148c,color:#000
classDef host fill:#e8f5e9,stroke:#1b5e20,color:#000 classDef host fill:#e8f5e9,stroke:#1b5e20,color:#000
class hermes,sdk,tools ext class hermes,sdk,tools,siliconflow,ollama ext
class source build class source build
class api,deriver,database,redis ext class api,deriver,database,redis ext
class pgdata,redisdata data class pgdata,redisdata data
@@ -113,7 +117,8 @@ flowchart TB
| `HONCHO_AUTH_USE_AUTH` | `false` | 是否启用 JWT 鉴权(生产建议 `true` | | `HONCHO_AUTH_USE_AUTH` | `false` | 是否启用 JWT 鉴权(生产建议 `true` |
| `HONCHO_NAMESPACE` | `honcho` | 全局命名空间前缀 | | `HONCHO_NAMESPACE` | `honcho` | 全局命名空间前缀 |
| `HONCHO_EMBED_MESSAGES` | `true` | 是否对消息做向量化(关闭可省 embedding 费用) | | `HONCHO_EMBED_MESSAGES` | `true` | 是否对消息做向量化(关闭可省 embedding 费用) |
| `HONCHO_EMBEDDING_MODEL` | `text-embedding-3-small` | Embedding 模型名 | | `HONCHO_EMBEDDING_MODEL` | `Qwen/Qwen3-Embedding-0.6B` | Embedding 模型名(默认 SiliconFlow,可换本地 Ollama |
| `HONCHO_EMBEDDING_BASE_URL` | `https://api.siliconflow.cn/v1` | Embedding API Base URLOpenAI 兼容;Ollama 改 `http://host.docker.internal:11434/v1` |
| `HONCHO_DERIVER_MODEL` | `gpt-5.4-mini` | Deriver 用的 LLM 模型(必须支持 tool calling | | `HONCHO_DERIVER_MODEL` | `gpt-5.4-mini` | Deriver 用的 LLM 模型(必须支持 tool calling |
| `HONCHO_LLM_BASE_URL` | `https://api.openai.com/v1` | LLM API Base URLOpenAI 兼容端点即可) | | `HONCHO_LLM_BASE_URL` | `https://api.openai.com/v1` | LLM API Base URLOpenAI 兼容端点即可) |
| `HONCHO_DERIVER_WORKERS` | `1` | Deriver worker 数 | | `HONCHO_DERIVER_WORKERS` | `1` | Deriver worker 数 |
@@ -123,10 +128,11 @@ flowchart TB
| 变量 | 说明 | | 变量 | 说明 |
|------|------| |------|------|
| `HONCHO_LLM_API_KEY` | LLM API Key**必填**server 启动检查,没它起不来) | | `HONCHO_LLM_API_KEY` | LLM API Key**必填**server 启动检查,没它起不来) |
| `HONCHO_EMBEDDING_API_KEY` | Embedding API Key**必填**仅当走云端:SiliconFlow 在 [cloud.siliconflow.cn/account/ak](https://cloud.siliconflow.cn/account/ak) 生成;走 Ollama 时留空) |
| `HONCHO_DB_PASSWORD` | PostgreSQL 密码(**必填**,用强密码) | | `HONCHO_DB_PASSWORD` | PostgreSQL 密码(**必填**,用强密码) |
| `HONCHO_AUTH_JWT_SECRET` | JWT 密钥(仅在 `HONCHO_AUTH_USE_AUTH=true` 时需要;用 `python scripts/generate_jwt_secret.py` 生成) | | `HONCHO_AUTH_JWT_SECRET` | JWT 密钥(仅在 `HONCHO_AUTH_USE_AUTH=true` 时需要;用 `python scripts/generate_jwt_secret.py` 生成) |
**关键约束**Honcho 启动时会**校验** `HONCHO_LLM_API_KEY` 非空 — 缺失则立刻退出。这意味着 `env.cfg` 里这项**不能用占位符**(如 `sk-placeholder`),必须填真实值,否则 `docker compose up -d` 后 deriver 容器会反复重启。 **关键约束**Honcho 启动时会**校验** `HONCHO_LLM_API_KEY` `HONCHO_EMBEDDING_API_KEY`非空 — 缺失则立刻退出。这意味着 `env.cfg` 里这项**不能用占位符**(如 `***`),必须填真实值,否则 `docker compose up -d` 后 deriver/api 容器会反复重启。
## 部署步骤 ## 部署步骤
@@ -202,7 +208,7 @@ docker compose -p honcho --env-file ./honcho/env.cfg -f ./honcho/stack.yml resta
| 数据卷方案 | bind 挂载到 `${Volumes_Path}/{pgdata,redis,source}` | 直观、可直接 `rsync`/`pg_dump`、跨机迁移用 `tar` 整个目录即可 | | 数据卷方案 | bind 挂载到 `${Volumes_Path}/{pgdata,redis,source}` | 直观、可直接 `rsync`/`pg_dump`、跨机迁移用 `tar` 整个目录即可 |
| 端口绑定 | 0.0.0.0,含 DB 5432 | PVE LAN 上其他 VM 也可访问;DB 端口暴露方便外部工具(DBeaver 等)连接 | | 端口绑定 | 0.0.0.0,含 DB 5432 | PVE LAN 上其他 VM 也可访问;DB 端口暴露方便外部工具(DBeaver 等)连接 |
| 认证 | 默认 `HONCHO_AUTH_USE_AUTH=false`(dev 模式) | 本地 LAN 自用,跳过 JWT 校验;公网暴露必须改 `true` | | 认证 | 默认 `HONCHO_AUTH_USE_AUTH=false`(dev 模式) | 本地 LAN 自用,跳过 JWT 校验;公网暴露必须改 `true` |
| LLM 默认 | `gpt-5.4-mini` + `text-embedding-3-small` | OpenAI 兼容、成本低;可换 OpenRouter / vLLM / Ollama 等任意端点 | | LLM 默认 | `gpt-5.4-mini`(主 LLMOpenAI 兼容);embedding 默认 `Qwen/Qwen3-Embedding-0.6B` 走 SiliconFlow**备选** 本地 Ollama `qwen3-embedding:0.6b`(零成本、隐私优先) | LLM 走 OpenAI 兼容;embedding 双轨:SiliconFlow(云端,独立 base URL / Ollama(本地 `host.docker.internal:11434/v1` |
| Honcho 版本 | 默认 `main`(源码 build),可锁 tag 如 `v3.0.10` | 当前最新稳定版 v3.0.x,支持 peer card、dialectic、dream consolidation | | Honcho 版本 | 默认 `main`(源码 build),可锁 tag 如 `v3.0.10` | 当前最新稳定版 v3.0.x,支持 peer card、dialectic、dream consolidation |
| deriver 必须 | api + deriver 双容器 | deriver 是后台推理 worker,没它记忆功能不工作 | | deriver 必须 | api + deriver 双容器 | deriver 是后台推理 worker,没它记忆功能不工作 |
| PG 认证 | `scram-sha-256` | 比 md5 更安全,`POSTGRES_INITDB_ARGS` 同步设置 `--auth-host` | | PG 认证 | `scram-sha-256` | 比 md5 更安全,`POSTGRES_INITDB_ARGS` 同步设置 `--auth-host` |
+10 -2
View File
@@ -42,7 +42,10 @@ services:
- NAMESPACE=${HONCHO_NAMESPACE:-honcho} - NAMESPACE=${HONCHO_NAMESPACE:-honcho}
- EMBED_MESSAGES=${HONCHO_EMBED_MESSAGES:-true} - EMBED_MESSAGES=${HONCHO_EMBED_MESSAGES:-true}
- EMBEDDING_MODEL_CONFIG__TRANSPORT=openai - EMBEDDING_MODEL_CONFIG__TRANSPORT=openai
- EMBEDDING_MODEL_CONFIG__MODEL=${HONCHO_EMBEDDING_MODEL:-text-embedding-3-small} - EMBEDDING_MODEL_CONFIG__MODEL=${HONCHO_EMBEDDING_MODEL:-Qwen/Qwen3-Embedding-0.6B}
- EMBEDDING_MODEL_CONFIG__OVERRIDES__BASE_URL=${HONCHO_EMBEDDING_BASE_URL:-https://api.siliconflow.cn/v1}
- EMBEDDING_VECTOR_DIMENSIONS=1024
- EMBEDDING_API_KEY=${HONCHO_EMBEDDING_API_KEY:-}
- DERIVER_MODEL_CONFIG__TRANSPORT=openai - DERIVER_MODEL_CONFIG__TRANSPORT=openai
- DERIVER_MODEL_CONFIG__MODEL=${HONCHO_DERIVER_MODEL:-gpt-4o-mini} - DERIVER_MODEL_CONFIG__MODEL=${HONCHO_DERIVER_MODEL:-gpt-4o-mini}
- DERIVER_WORKERS=${HONCHO_DERIVER_WORKERS:-1} - DERIVER_WORKERS=${HONCHO_DERIVER_WORKERS:-1}
@@ -88,9 +91,14 @@ services:
- CACHE_ENABLED=true - CACHE_ENABLED=true
- NAMESPACE=${HONCHO_NAMESPACE:-honcho} - NAMESPACE=${HONCHO_NAMESPACE:-honcho}
- DERIVER_MODEL_CONFIG__TRANSPORT=openai - DERIVER_MODEL_CONFIG__TRANSPORT=openai
- DERIVER_MODEL_CONFIG__MODEL=${HONCHO_DERIVER_MODEL:-gpt-4o-mini} - DERIVER_MODEL_CONFIG__MODEL=${HONCHO_DERIVER_MODEL:-gpt-5.4-mini}
- DERIVER_WORKERS=${HONCHO_DERIVER_WORKERS:-1} - DERIVER_WORKERS=${HONCHO_DERIVER_WORKERS:-1}
- EMBEDDING_MODEL_CONFIG__TRANSPORT=openai
- EMBEDDING_MODEL_CONFIG__MODEL=${HONCHO_EMBEDDING_MODEL:-Qwen/Qwen3-Embedding-0.6B}
- EMBEDDING_MODEL_CONFIG__OVERRIDES__BASE_URL=${HONCHO_EMBEDDING_BASE_URL:-https://api.siliconflow.cn/v1}
- EMBEDDING_VECTOR_DIMENSIONS=1024
- LLM_OPENAI_API_KEY=${HONCHO_LLM_API_KEY:?set HONCHO_LLM_API_KEY} - LLM_OPENAI_API_KEY=${HONCHO_LLM_API_KEY:?set HONCHO_LLM_API_KEY}
- EMBEDDING_API_KEY=${HONCHO_EMBEDDING_API_KEY:-}
- MODEL_CONFIG__OVERRIDES__BASE_URL=${HONCHO_LLM_BASE_URL:-https://api.openai.com/v1} - MODEL_CONFIG__OVERRIDES__BASE_URL=${HONCHO_LLM_BASE_URL:-https://api.openai.com/v1}
volumes: volumes:
- /etc/timezone:/etc/timezone:ro - /etc/timezone:/etc/timezone:ro