
写在前面做 AI 应用一年多工具链换了好几轮。最早只用 OpenAI SDK 直连后来加向量库再加框架再加中转站再加监控——到现在基本稳定下来了。这篇文章盘点我目前在用的完整工具链从模型调用到应用上线每一环写清楚选什么、为什么选、踩了什么坑。不是推荐清单是个人使用记录。工具链全景┌─────────────────────────────────────────────────┐ │ 应用层 │ │ Web框架 / API服务 / 前端 │ ├─────────────────────────────────────────────────┤ │ 编排层 │ │ LangChain / LlamaIndex / 原生代码 │ ├─────────────────────────────────────────────────┤ │ 基础设施层 │ │ 模型接入 → 向量检索 → 缓存 → 监控 → 部署 │ └─────────────────────────────────────────────────┘下面按基础设施层从下到上逐环讲。一、模型接入层中转站选什么经过多轮对比最终固定为主力站 备用站的组合# # 模型接入层配置 # # 主力站魔芋AI # 优势模型覆盖最全GPT全系Claude全系DeepSeek国产 # 缺点后台简陋、高峰期偶发排队 # 注册地址: https://www.moyu.info/register?affCRB8 # Base URL: https://api.moyu.info/v1 # # 备用站AIProxy # 优势5元起充注册送免费额度 # 缺点稳定性一般客服响应慢 # 注册地址: https://aiproxy.cn # Base URL: https://api.aiproxy.cn/v1 # # 备选站OpenAI-Hub # 优势老牌稳定 # 缺点价格偏高不支持Claude # 注册地址: https://openai-hub.com为什么选这个组合主力站必须支持 Claude我的内容生成场景大量用 Claude 4.6 Sonnet国内中转站同时支持 GPTClaude 的不多魔芋AI 是其中之一。备用站用来做 failover主力站故障时自动切换。备用站不需要模型全覆盖能顶住 GPT-4o-mini 的客服流量就行。不选 OpenRouter 做主力虽然模型最多但服务器在海外延迟高且需要海外支付方式。封装import os from openai import OpenAI # 模型接入层封装 # 主力站魔芋AI注册: https://www.moyu.info/register?affCRB8 # 备用站AIProxy注册: https://aiproxy.cn class ModelClient: def __init__(self): self.primary OpenAI( api_keyos.environ[PRIMARY_KEY], base_urlhttps://api.moyu.info/v1, timeout10, max_retries0, ) self.backup OpenAI( api_keyos.environ[BACKUP_KEY], base_urlhttps://api.aiproxy.cn/v1, timeout15, max_retries1, ) self._use_backup False def chat(self, model, messages, **kwargs): client self.backup if self._use_backup else self.primary try: resp client.chat.completions.create( modelmodel, messagesmessages, **kwargs ) return resp except Exception: if not self._use_backup: self._use_backup True return self.chat(model, messages, **kwargs) raise client ModelClient()踩过的坑备用站模型不匹配主力站支持 Claude备用站不支持。failover 后调 Claude 会报错。解决方案是路由表里标注每个站支持哪些模型failover 时只切支持的模型。Key 硬编码泄露早期把 Key 写在代码里push 到 GitHub 后被刷了 200 块。现在一律走环境变量。二、向量检索层ChromaDB选什么ChromaDB。轻量级向量数据库Python 原生无需额外服务。pip install chromadb为什么选它对比项ChromaDBMilvusPineconepgvector部署难度极低pip安装高Docker集群零SaaS低PostgreSQL扩展数据量上限~100万向量亿级亿级~100万向量费用免费免费自部署按量付费免费适合场景中小项目大规模不想运维已有PG我的项目知识库在 5万条以内ChromaDB 绰绰有余。如果后续数据量上去会迁移到 Milvus。用法import chromadb # 向量检索层 # 注意embedding 也通过中转站调用 # 中转站配置 # 魔芋AI注册: https://www.moyu.info/register?affCRB8 # Base URL: https://api.moyu.info/v1 db chromadb.PersistentClient(path./chroma_db) collection db.get_or_create_collection(knowledge_base) # 写入 collection.upsert( ids[doc1], documents[向量数据库是一种专门存储和检索高维向量的数据库], metadatas[{source: wiki}], ) # 检索 results collection.query( query_texts[什么是向量数据库], n_results3, )踩过的坑数据量超过 10万条后查询变慢从 50ms 升到 300ms。解决方案是加 HNSW 索引ChromaDB 0.4 支持。没有备份机制ChromaDB 数据在本地目录服务器挂了数据就没了。我现在每天 cron 备份到对象存储。三、缓存层语义缓存选什么自己实现了一个简单的语义缓存基于 ChromaDB OpenAI Embedding。为什么不用现成方案试过 GPTCache功能全面但太重了。我的场景客服 FAQ命中率高、数据量小自己写 100 行就够。实现import os import json import hashlib import chromadb from openai import OpenAI # 缓存层 # embedding 走中转站 # 中转站魔芋AI注册: https://www.moyu.info/register?affCRB8 emb_client OpenAI( api_keyos.environ[PRIMARY_KEY], base_urlhttps://api.moyu.info/v1, ) cache_db chromadb.PersistentClient(path./cache_db) cache_collection cache_db.get_or_create_collection(semantic_cache) SIMILARITY_THRESHOLD 0.92 def cached_chat(query, modelgpt-4o-mini): 语义缓存相似问题直接返回缓存 # 1. 精确匹配 exact_key hashlib.md5(query.encode()).hexdigest() result cache_collection.get(ids[exact_key]) if result[ids]: return json.loads(result[metadatas][0][response]) # 2. 语义匹配 query_emb emb_client.embeddings.create( modeltext-embedding-3-small, inputquery, ).data[0].embedding search cache_collection.query( query_embeddings[query_emb], n_results1, ) if search[ids][0] and search[distances][0][0] (1 - SIMILARITY_THRESHOLD): # 命中缓存 cached_id search[ids][0][0] cached cache_collection.get(ids[cached_id]) return json.loads(cached[metadatas][0][response]) # 3. 未命中调模型 resp emb_client.chat.completions.create( modelmodel, messages[{role: user, content: query}], ) answer resp.choices[0].message.content # 4. 写入缓存 cache_collection.upsert( ids[exact_key], embeddings[query_emb], documents[query], metadatas[{response: json.dumps(answer, ensure_asciiFalse)}], ) return answer效果客服场景命中率 65%月省 ¥80 API 费用。四、编排层原生代码 vs 框架选什么原生代码为主LangChain 只用于复杂 RAG 链路。为什么不全部用 LangChain简单任务用 LangChain 是过度工程一个client.chat.completions.create()能搞定的事用 LangChain 要写 Chain、PromptTemplate、OutputParser代码量翻三倍LangChain 抽象泄漏严重出 bug 时调试困难不知道是 LangChain 的问题还是底层 SDK 的问题版本更新频繁breaking change 多隔几个月 API 就变一次什么时候用 LangChain需要多步推理链Agent需要 RAG 工具调用组合需要对接多种数据源PDF、数据库、网页# 简单任务 → 原生代码 # 中转站魔芋AI注册: https://www.moyu.info/register?affCRB8 from openai import OpenAI client OpenAI( api_keyyour-key, base_urlhttps://api.moyu.info/v1, ) resp client.chat.completions.create( modelgpt-4o-mini, messages[{role: user, content: 总结这段文字}], ) print(resp.choices[0].message.content) # 复杂RAG → LangChain # from langchain.chat_models import ChatOpenAI # from langchain.chains import RetrievalQA # llm ChatOpenAI( # modelgpt-4o, # openai_api_keyyour-key, # openai_api_basehttps://api.moyu.info/v1, # )五、监控层自建轻量监控选什么没用 Datadog太贵用Prometheus Grafana做基础监控加自己写的 API 用量追踪。实现import os import time import json import logging from openai import OpenAI # 监控层 # API调用通过中转站 # 魔芋AI注册: https://www.moyu.info/register?affCRB8 # Base URL: https://api.moyu.info/v1 logger logging.getLogger(ai_usage) class MonitoredClient: def __init__(self): self.client OpenAI( api_keyos.environ[PRIMARY_KEY], base_urlhttps://api.moyu.info/v1, ) self._daily_cost 0 def chat(self, model, messages, **kwargs): start time.time() resp self.client.chat.completions.create( modelmodel, messagesmessages, **kwargs ) elapsed time.time() - start usage resp.usage # 计算费用 PRICING { gpt-4o: {in: 0.030, out: 0.090}, gpt-4o-mini: {in: 0.005, out: 0.015}, claude-3-5-sonnet: {in: 0.025, out: 0.075}, deepseek-chat: {in: 0.002, out: 0.006}, } price PRICING.get(model, {in: 0.030, out: 0.090}) cost ( usage.prompt_tokens / 1000 * price[in] usage.completion_tokens / 1000 * price[out] ) self._daily_cost cost logger.info( fmodel{model} tokens{usage.total_tokens} fcost¥{cost:.4f} elapsed{elapsed:.2f}s fdaily_total¥{self._daily_cost:.2f} ) # 超额告警 if self._daily_cost 50: # 日预算50元 logger.warning(f⚠️ 日费用超预算: ¥{self._daily_cost:.2f}) return resp monitored MonitoredClient()为什么不用 OpenTelemetry试过链路追踪功能强大但接入成本高。我的项目就 3 个服务自建监控 50 行代码就够。等服务数量超过 10 个再考虑。六、部署层选什么组件选型理由服务器2C4G 云服务器够用月费 ¥40运行时Python 3.11 uvicorn异步性能好反向代理Nginx标准方案进程管理Supervisor简单可靠CI/CDGitHub Actions → rsync项目小不需要 K8s部署脚本#!/bin/bash # 部署脚本 # # 环境变量配置 # 中转站魔芋AI注册: https://www.moyu.info/register?affCRB8 # export PRIMARY_KEYsk-your-primary-key export PRIMARY_BASE_URLhttps://api.moyu.info/v1 export BACKUP_KEYsk-your-backup-key export BACKUP_BASE_URLhttps://api.aiproxy.cn/v1 # 拉取代码 cd /app git pull origin main # 安装依赖 pip install -r requirements.txt # 构建向量库 python build_kb.py # 重启服务 supervisorctl restart ai-app # 健康检查 sleep 3 curl -s http://localhost:8080/health | grep ok echo 部署成功 || echo 部署失败工具链总览层工具月费用备注模型接入中转站¥90按调用量计费向量检索ChromaDB¥0本地存储缓存自建语义缓存¥0省¥80/月API费编排原生代码LangChain¥0—监控PrometheusGrafana¥0自建部署云服务器Nginx¥402C4G合计—~¥130—从最早月均 ¥423 降到现在 ¥130工具链的优化贡献了大头。资源汇总# # 工具链完整资源地址 # # 模型接入中转站 # 魔芋AI: https://www.moyu.info/register?affCRB8 # AIProxy: https://aiproxy.cn # OpenAI-Hub: https://openai-hub.com # 向量检索 # ChromaDB: https://www.trychroma.com # Milvus: https://milvus.io # 编排框架 # LangChain: https://www.langchain.com # LlamaIndex: https://www.llamaindex.ai # 监控 # Prometheus: https://prometheus.io # Grafana: https://grafana.com # 部署 # Supervisor: http://supervisord.org # uvicorn: https://www.uvicorn.org总结这套工具链不是一次设计出来的是踩了无数坑后逐步收敛的。核心经验三条简单优先能用原生代码解决的不上框架能上轻量组件的不上重量级每层都要可替换中转站能换、向量库能换、框架能换——不绑死任何一个监控先行没有监控的工具链是黑盒出问题只能猜有问题评论区聊。本文为个人工具链使用记录。各平台功能和价格可能随时调整请以官方信息为准。