关于 Fmind Freelance AI Architect Website
Fmind 的服务端渲染作品集网站包含文章,以及 LLM 托管成本和 MCP 上下文成本两个规划计算器,面向评估基础设施预算及 MCP 服务器 Token 开销的访客。
主要功能
- 01比较开放权重模型托管与托管 API 成本
- 02调整工作负载、硬件、性能和 API 假设
- 03估算每次请求及每月的 MCP Token 数
- 04查看成本方法、假设条件和注明日期的来源
适用场景
- 01估算 LLM 工作负载的托管预算
- 02比较托管 API 与 GKE 上的模型托管
- 03衡量所选 MCP 服务的上下文开销
MCP 相关
网站提供 MCP 上下文成本计算器,使用 GitHub、Filesystem、Memory 和 Playwright 等所选服务的实测计数。网站还说明了其 MCP 服务发现端点。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://www.fmind.dev/mcpclaude mcp add --transport http fmind-portfolio https://www.fmind.dev/mcp{"mcpServers":{"fmind-portfolio":{"type":"http","url":"https://www.fmind.dev/mcp"}}}在 Cursor 中打开{"servers":{"fmind-portfolio":{"type":"http","url":"https://www.fmind.dev/mcp"}}}在 VS Code 中打开{"mcpServers":{"fmind-portfolio":{"type":"http","url":"https://www.fmind.dev/mcp"}}}{"mcpServers":{"fmind-portfolio":{"serverUrl":"https://www.fmind.dev/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
10此工具无需参数。
详细介绍
www
Médéric Hurier (Fmind) 是一名自由职业 AI 架构师,专攻 AI Agent、MLOps 和安全。该网站由 Python 在服务端渲染:Litestar、strict Jinja、Tailwind CSS v4、DaisyUI v5 和 Granian。小型的页面专属 JavaScript 控制器可增强原生导航和表单。网站没有客户端框架、应用数据库或运行时 CDN;Google Analytics 4 仅在明确同意后加载(参见分析与隐私)。
LLM 托管预算工具将 GKE 上选定的开放权重模型与托管 API 进行比较。简单模式从工作负载、可选的每日调用次数、模型(按参数量排序;混合专家模型按活跃参数量排序)、定价方案和每日使用时段开始。团队默认采用 8 小时工作日,并使用始终运行的节点;文档任务和定时工作流则假定节点仅在各自的活动时段内运行。结果首先给出成本决策和取整后的预算;所有部分(包括精确成本、盈亏平衡点、设置假设、方法和来源)都保持展开,不使用折叠控件。紧凑型 4B 模型为 L4 提供了一个起步配置;Mistral Small 4 默认采用其文档所述的 NVFP4 单 G4 配置,并将上下文上限设为 16,384 个 token。高级设置提供自定义 token 预算、硬件、性能和 API 模式。容量检查会分别核算运行时长和活动时段。所有速度假设仅供说明;总额包含计算费用和 GKE 费用,不含运维及其他服务。公式、限制和来源信息请参阅注明日期的来源快照。
MCP 上下文成本计算器展示了实际 MCP 服务为每次模型请求增加的 token 数量。访问者可勾选已测量的服务(GitHub 默认工具集、Filesystem、Memory、Playwright)并输入每日模型请求数;页面会返回每次请求和每 30 天的 token 数、上下文占比,以及托管 API(以托管价格快照为准)每 1,000 次请求和每月的标准输入成本。原生 GET 表单无需 JavaScript,并会忽略 UTM 标签等无关查询键。请参阅方法和来源信息;这些参考计数并非服务提供商账单。
开发
需要 mise、带 Buildx 的 Docker Engine,以及用于首次安装工具和浏览器,以及下载镜像和扫描器的网络连接。Python 和其余工具链版本固定在 mise.toml 和 mise.lock 中;.mise/locks/ 记录浏览器工具的传递 npm 依赖项,更新锁文件时必须一并提交。
mise install
mise run install
mise run watch
打开 http://localhost:8080;如需使用其他端口,请运行 PORT=8081 mise run watch。.env.example 列出了运行时变量;.env 文件不会自动加载。默认环境为 development;生产环境将 ENVIRONMENT=production 设为 production。热重载会监视 src/、content/ 和 static/;环境或配置发生更改后请重启。
src/www/app.py 构建不可变的启动快照并定义路由。src/www/__main__.py 启动 Granian。模板作为 wheel 包数据提供;镜像会将独立的 content/ 和 static/ 目录复制到锁定环境旁。AGENTS.md 说明模块归属和不变量。
内容与设计
src/www/data.py 提供作品集事实、服务可用性、HTML、JSON/JSON-LD、vCard 和 LLM 文本。请在这些页面中保留所有者的表达风格和事实陈述。
本网站实现了 fmind/theme 中的纯浅色 Fmind DESIGN.md:白色、浅灰色、炭灰色和蓝色 #174EA6,字体采用 Google Sans。assets/css/input.css 管理界面颜色;src/www/highlighting.py 管理语法高亮颜色。测试会强制执行配色方案,但明确列出的公司品牌颜色除外。Tailwind 会扫描 src/www/templates/**/*.html。
字体为自托管的 Google Sans 和 Google Sans Code 子集。字体生成器会固定上游版本、移除保留的徽标连字,并保留时间戳。公开品牌原图为 /logo.png 和 /banner.png。请将私人肖像原图保存在 static/ 之外;build:portrait 会导出 /portrait.jpg(最长边 2048px),保留方向和 ICC 信息,并移除个人元数据。
参加活动时请分享 /connect;其中提供 LinkedIn、vCard 和完整网站的入口。/scan 是一个 noindex 二维码工具。两张联系卡都不显示 RSS 控件,并保留访问 Cookie 设置的入口;较短的屏幕会使用较小的肖像,以便二维码显示仍能完整呈现。UTF-8 vCard 3.0 根据作品集数据生成公开职业信息和经过清理的肖像,不含电话号码、街道地址、生日或精确坐标。
content/articles/ 中的文章使用严格的 TOML 前置元数据。经过验证的文章集合会提供给所有发布页面,生产环境中不包含草稿。build:images 会生成响应式 WebP 衍生图和 SHA-256 来源锁定文件;check:images 不会写入任何内容。图片适配 1280px 栏宽;第一张图片会立即加载,并采用浏览器选定的优先级,其余图片则延迟加载。文章图片不会预加载,因为引言可能会将图片推到首屏以下。代码高亮在服务端完成;只有包含代码的文章才会预加载代码字体。请遵循文章技能。
决策工具使用带类型的 Python 公式、原生 GET 表单、标注日期的来源和明确的规划限制。请在 data.py:SITE_PAGES 中注册这些工具,并遵循网站技能。
任务
mise.toml 是钩子和 CI 使用的标准约定;mise tasks 会列出所有任务和别名。
| 命令 | 用途 |
|---|---|
mise run all | 格式化、检查、构建、pytest、OCI 构建/扫描/冒烟测试、安装 Chromium、浏览器流程 |
mise run check | 元数据/锁文件、Ruff、ty、dprint、密钥、依赖项、Docker/IaC/工作流扫描、镜像来源、拼写错误 |
mise run test | 离线 pytest,分支覆盖率 ≥85%,并将警告视为错误 |
mise run check:tofu | 无后端的提供程序验证、tflint 和模拟基础设施计划测试 |
mise run check:links | 依赖网络的外部链接审计;单独定期运行,不纳入合并门禁 |
mise run test:browser | 桌面版/移动版 Chromium 流程 |
mise run test:browser:cross | 针对 Firefox/WebKit 的重点流程 |
mise run test:lighthouse:local | 临时本地服务和严格的 14 项审计作品集/计算器矩阵 |
mise run build | 生产 CSS、wheel 和源码分发包 |
mise run check:image | 构建并扫描 tmp/www-image.tar |
mise run test:image [digest-ref] | 对现有归档或指定的远程摘要进行冒烟测试 |
mise run check:image:deployed | 解析并扫描所有接收 Cloud Run 流量的镜像 |
mise run build:branding / build:fonts / build:images | 按需重新生成经审核的资源 |
mise run build:portrait <private-master.jpg> | 导出经过清理的公开肖像 |
mise run test:candidate / test:deployed | CI 发布检查:检查已标记的候选版本和已提升的流量;需要 IMAGE_REF、GITHUB_SHA 和 gcloud |
mise run deploy <digest-ref> <commit-sha> | 手动部署/回滚镜像,并设置提交标签和完整流量;会修改生产环境 |
all 按顺序运行,并复用构建产物及其镜像归档。它需要 Docker/Buildx,但不需要云凭据。资源生成器、clean、监视器、实时扫描和部署仅按需运行;clean 会删除生成的输出。
Lighthouse 单独运行:安装 Chromium,然后使用 mise run test:lighthouse -- --base-url <origin> --mode portfolio 对作品集、联系页面、隐私页面、归档索引和两个计算器执行 14 项桌面版/移动版审计。smoke 运行四项审计;默认的 full 覆盖站点地图和 48 项压力审计。运行性能审计时,不要同时进行构建或字体生成;保留每个页面的精确评分。
跨浏览器检查需要 install:browser:cross 和 Playwright 系统库,或通过 PW_TEST_CONNECT_WS_ENDPOINT 使用匹配的官方浏览器容器。每周/手动质量工作流会配置临时运行器,并将证据保留 14 天。请按顺序运行浏览器测试套件,因为它们共用本地端口 8096。设置 BROWSER_BASE_URL=https://www.fmind.dev 可运行生产环境流程;否则,本地服务会自动启动和停止。
验证已部署的提交后,使用 gh workflow run quality.yml -f target=production 触发该工作流,即可在干净的运行器上针对公开站点运行 Chromium、Firefox、WebKit 和相同的严格 Lighthouse 测试矩阵。默认的 local 目标用于验证当前检出版本;生产模式不会部署或更改服务。当其他工作站负载影响性能测量时,请使用运行器证据,并保留失败报告和分数阈值。
部署
Cloud Run 在项目 www-fmind-dev、区域 europe-west1 中提供 https://www.fmind.dev/。infra/ 管理服务设置、注册表、无密钥身份、告警和分析。请将服务级和修订版本级的最小实例数均设为 0,最大实例数设为 5,并使用基于请求的 CPU。经验证的运行时配置为 1 个 CPU、512 MiB、并发数 32、请求超时 30 秒,以及间隔 5 秒的 12 次启动尝试。启动时会为 HTTP、大模型文本和 MCP 一次性构建文章 Markdown。最大实例数限制扩缩容;它不是硬性费用上限。未分配流量的带标签修订版本仍各自受 5 个实例的上限约束,但不计入服务最大实例数。
推送 main 分支会运行完整检查门禁,构建带 SBOM/来源证明的非 root 镜像,推送镜像,并对其不可变摘要进行扫描和冒烟测试。随后会创建一个不接收流量、带有 candidate 标签的修订版本;test:candidate 要求该修订版本与 IMAGE_REF/GITHUB_SHA 匹配,并在其带标签的 run.app URL 上提供健康检查、配置文件和 MCP 服务卡。只有通过这些检查后,CI 才会将 100% 的流量路由到该确切修订版本;候选版本失败时,流量仍留在之前的修订版本上。最后,test:deployed 会验证接收 100% 流量的就绪修订版本与 IMAGE_REF 和 GITHUB_SHA 匹配、保留缩容至零检查,并探测公开的健康检查、配置文件和 MCP 发现端点。CI 不会自动回滚:如果这项推广后检查失败,流量会继续留在新修订版本上,直到所有者通过下方的手动发布流程重新部署之前通过验证的摘要。由于部署者没有读取日志的权限,错误日志审查仍是独立的发布检查。Actions 均固定到 SHA,Dependabot 负责维护生态系统更新。
工作负载身份联合会将每个 CI 身份绑定到 main 上的一个工作流文件(参见 SECURITY.md)。OpenTofu 会忽略镜像,并保留由 CI 管理的流量;CI 不会应用基础设施配置。由于流量固定到已验证的修订版本,已应用的服务模板更改只有在下一次部署推广后才会生效。
基础设施更改需要经审核的已保存计划,并由所有者通过 infra skill 授权应用。远程状态位于 gs://www-fmind-dev-tfstate/infra/state;其引导存储桶由单独流程管理,并且必须启用版本控制和强制实施公开访问防护。部署应用前,请先协调服务更改。现有的 Cloud Run 域名映射仍是 Google 不建议用于生产环境的预览功能;迁移到其推荐的负载均衡器需要单独评估成本、DNS 和发布计划。
对于手动发布/回滚,mise run deploy europe-west1-docker.pkg.dev/www-fmind-dev/app/www-fmind-dev@sha256:<64-lowercase-hex> <40-lowercase-hex-commit> 接受一个限定完整的仓库摘要及其构建所依据的提交。它会在 manual-candidate 下创建一个唯一命名的不接收流量的修订版本,验证其摘要、提交、容量策略以及带标签的健康状态/发现情况,然后将流量路由到该确切修订版本。候选版本失败或被替换,不会影响当前服务流量。标签、外部仓库、过短或大写的 SHA,以及额外标志都会在调用 gcloud 前导致失败。对于新摘要,先运行 check:image:digest <digest-ref> 和 test:image <digest-ref>。然后运行 IMAGE_REF=<digest-ref> GITHUB_SHA=<commit-sha> mise run test:deployed,并检查浏览器端流程和错误日志。保留前一个限定完整的摘要以便回滚。Semver 发布遵循 release skill。
SECURITY.md 负责漏洞报告和剩余公告审查。部署会阻止可修复的 HIGH/CRITICAL 漏洞和机密信息;计划扫描会保留尚未修复的问题,并使用单独的只读身份,该身份只能由 main 上的 security.yml 承担。GitHub 依赖项警报、安全更新、机密扫描和推送保护均已启用;main 禁止删除和强制推送。
分析与隐私
/privacy 介绍了两种数据流。Google Analytics 4(G-Z28QKD99V2,属性 538730900)仅在访客接受同意横幅后才会在 www.fmind.dev 上加载;每个页面的页脚都提供 Cookie 设置,拒绝后会删除 _ga Cookie,再次接受会恢复分析同意,且不会重复加载脚本。CSP 仅允许 Google 的 GA4 脚本、信标和像素主机。浏览器测试会拦截 Google 请求,同时针对候选页面测试这些选择。大脑的 google-analytics 传感器每天收集该属性的数据。HTML GET 响应会记录聚合路径/状态、引荐来源主机名、经过验证的 UTM 令牌以及启发式判断的机器人标记。重定向会被排除;地理位置数据保持为空。BigQuery 分区会在 180 天后过期,不会重复保留 Cloud Logging 数据。分析数据不包含 IP、原始用户代理、完整引荐来源、Cookie、会话和跟踪标识符。单独的私有 Cloud Run 运营日志可能包含 IP、用户代理和完整 URL,并会在 30 天后过期。
使用 website-analytics skill 或 uv run --locked python -m scripts.website_analytics 生成范围受限且免费的报告。数据不完整或发生变化时,报告会失败;报告不用于衡量独立访客或转化情况。请勿将生产报告提交到 Git。
跟踪默认关闭,可通过标准的 OTEL_EXPORTER_OTLP_* 变量选择启用。运营日志会关联跟踪/跨度 ID;分析数据不包含这些 ID。
使用 finops-analytics 进行云成本、预算和优化审查。OpenTofu 管理计费 API 和私有 EU 数据集 billing_export。在 Cloud Console → Billing → Billing export 中启用 Standard usage cost,选择项目 www-fmind-dev 和此数据集;其他导出类型保持禁用。账户级导出需要按项目筛选的按需查询,并使用试运行和 100 MiB 扫描上限。在确认成本数据可用前,请先验证是否已启用以及表是否已到达;初始回填可能需要五天。
Agent 访问
公开的 /agents 指南是集成参考。将 MCP 客户端连接到 https://www.fmind.dev/mcp,即可使用无需身份验证、只读的作品集、出版物、搜索、服务、托管比较和 MCP 上下文成本工具。compare_mcp_context_cost 接受类型化的 servers(省略时表示全部)和 requests_per_day 参数,并返回 token 数量、上下文占比、各模型的输入成本、注明日期的来源以及可分享的方案;无效值会导致失败。浏览器请求受同源保护;请求正文长度有限。MCP 对 POST 请求使用有限的 JSON 响应。GET/HEAD 会返回 405,并带有 Allow: POST;此服务不提供通知流或订阅。工具不会配置服务、运行 LLM、预订服务或发送消息。
/api/profile 及其 JSON Schema 与 LLM 文本、信息源、站点地图和 JSON-LD 共用启动快照。主页和文章路由支持 Accept: text/markdown 和 Vary: Accept;优先返回 HTML。固定的文章 .md URL 仍可访问。不接受 text/markdown 的阅读器可以通过常规文章 URL 阅读由服务器渲染的 HTML,无需 JavaScript。建议先搜索,再逐篇阅读文章;/llms-full.txt 是批量导出文件,供需要且能够处理整个内容集的阅读器使用。API 目录、MCP 服务卡片和打包的访客技能提供发现入口;使用 server/discover 进行协议协商。访客技能与仓库维护技能彼此独立。
在 src/www/data.py 中维护身份信息、卢森堡工作地点和服务可用性。主页、profile JSON/MCP 和 LLM 摘要共用这些事实。文章 HTML 和 Markdown 会标明作者;/llms-full.txt 会保留每篇文章的日期和规范链接。使用本地 Lighthouse 任务验证搜索展示效果;部署后仍需通过单独的 Search Console 证据确认索引和排名。
server.json 跟踪 io.github.fmind/portfolio 的网站版本。MCP Registry 发布是经在线验证后的单独所有者操作:依次运行 mcp-publisher validate server.json、mcp-publisher login github,然后运行 mcp-publisher publish。通过 Registry API 验证最新条目。被发现并不保证客户端会采用,也不保证 AI 会引用。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。