Sheerwater聊天
建筑
User ──▶ Ingress (nginx) ──▶ sheerwater-chat ──▶ sheerwater-mcp (via Tailscale)
│ │ │
│ ▼ ▼
│ Anthropic API Sheerwater / Nuthatch
│ │ (GCS buckets)
▼ ▼
Keycloak (OIDC) SQLite (PVC)- 认证:Keycloak OIDC(带PKCE的机密客户端)
- LLM:Anthropic Claude API,通过此服务器代理
- 主控程序:通过SSE连接到sheerwater mcp以供工具使用
- 存储:SQLite在一个持久的VolumeClaim上用于聊天历史记录
本地开发
Docker Compose(推荐)
启动整个堆栈:Keycloak、sheerwater mcp和sheerwater chat。
# Set your Anthropic API key
export ANTHROPIC_API_KEY=sk-...
docker compose up然后打开http://localhost:8080.Keycloak管理员在http://localhost:8180(管理员/管理员)。
组合文件挂载 src/ 用于实时重新加载,并使用预配置的Keycloak领域(keycloak/realm.json).
没有Docker
uv sync --dev
pre-commit install启动sheerwater mcp服务器:
cd ../sheerwater-mcp
uv run sheerwater-mcp --transport sse --port 8000启动聊天服务器:
uv run sheerwater-chat配置
| 变量 | 描述 | 默认值 |
|---|---|---|
KEYCLOAK_URL | 密钥斗篷服务器URL(内部) | -- |
KEYCLOAK_PUBLIC_URL | 浏览器重定向的Keycloak URL | -- |
KEYCLOAK_REALM | 密钥斗篷领域名称 | -- |
KEYCLOAK_CLIENT_ID | OAuth客户端ID | -- |
KEYCLOAK_CLIENT_SECRET | OAuth客户端机密 | -- |
MCP_SERVER_URL | sheerwater mcp服务器的URL | http://localhost:8000 |
ANTHROPIC_API_KEY | 无烟煤API密钥 | - |
SECRET_KEY | 会话签名机密 | -- |
DATABASE_URL | SQLite或PostgreSQL URL | sqlite:///./sheerwater_chat.db |
BASE_URL | 应用程序基本URL | http://localhost:8080 |
部署
通过ArgoCD部署到rhiza GKE集群。
- 命名空间:
sheerwater-chat(由Terraform拥有——在应用程序部署之前,机密必须存在) - Helm图表:
chart/ - 容器图片:
ghcr.io/rhiza-research/sheerwater-chat(由GitHub Actions基于推送构建)main) - 秘密:Terraform创建了一个K8s秘密(
sheerwater-chat-secrets)包含KEYCLOAK_CLIENT_SECRET,ANTHROPIC_API_KEY,以及SECRET_KEY - 入口:通过带TLS的nginx入口公开
基础设施(在 基础设施 回购)
terraform/20-gke-cluster/sheerwater-chat.tf--命名空间、机密、ArgoCD应用程序terraform/20-gke-cluster/dns-sheerwater.tf--DNS记录terraform/modules/keycloak/main.tf--Keycloak OIDC客户端注册
