96SEO 2026-04-21 04:28 14
上一篇你Yi经见过了: 。

今天的目标:封装一个统一的 callAI 函数,JS 和 Python 各一个,一套代码同时支持 家 AI 厂商。Zuo完这篇,你以后切换模型只需要改一行配置。
const AI_PROVIDERS = {
deepseek: { type: 'openai-compatible', baseURL: 'https://api.deepseek.com', apiKey: process.env.DEEPSEEK_API_KEY, defaultModel: 'deepseek-chat', },
openai: { type: 'openai-compatible', baseURL: 'https://api.openai.com/v1', apiKey: process.env.OPENAI_API_KEY, defaultModel: 'gpt-4o-mini', },
qwen: { type: 'openai-compatible', baseURL: 'https://dashscope.aliyuncs.com/compatible-mode/v1', apiKey: process.env.QWEN_API_KEY, defaultModel: 'qwen-plus', },
gemini: { type: 'openai-compatible', baseURL: 'https://generativelanguage.googleapis.com/v1beta/openai', apiKey: process.env.GEMINI_API_KEY, defaultModel: 'gemini--flash', },
ollama:{ type:'openai-compatible', baseURL:'http://localhost:/v1', apiKey:'ollama' ,defaultModel:'qwen2.'}, //注意ollama不需要key,baseURL是本地地址。默认模型qwen2,Ke以随意geng改。Ru果拉取了别的模型需要geng换默认模型名称。注意端口号!默认7860,Ru果修改了需要修改baseURL。要安装 ollama 服务端才Neng使用这个功Neng哦!
claude:{type:'anthropic' ,apiKey :process.env.CLAUDE_API_KEY ,defaultModel :'claude -sonnet--'}, //Claude API key和模型名称。注意不要把claude和之前的混在一起!不同厂商的api调用方式不一样。
};
Python:
AI_PROVIDERS = { ... } # 同上
Ollama的安装与使用
Ollama启动后默认在http://localhost:/v1 提供 API 服务,兼容 OpenAI 格式。
,支持 Windows / Mac / Linux。
为什么要Zuo解耦?绑死一家厂商的风险:想象一下你辛辛苦苦的代码全依赖 DeepSeek 的 API。某天 DeepSeek 限流了你的服务直接瘫痪。或者你想试试别的模型,发现代码改动量巨大……这些dou是不希望kan到的。
OpenAI兼容格式的优势kan到了吗?这些厂商的 API 端点不同、模型名不同,但请求和响应的 JSON 结构完全一样。
理解Messages API{ "model": "deepseek -chat", "messages": }
这个请求格式,被大量厂商直接兼容。意思是:只要换URL和Key,同一段代码Ke以直接调通。
JavaScript 实现 基本调用示例// 用 DeepSeekconst reply1 = await callAI;// 切换到 GPT -4o ,只改一个字段const reply2 = await callAI;// 用本地 Ollama ,零成本const reply3 = await callAI;
完整JavaScript代码
import OpenAI from ' openai '; import Anthropic from '@anthropic -ai /sdk '; const AI _PROVIDERS ={ /* 同上 / }; //缓存 client实例 ,避免重复创建 const clientCache = new Map ; function getClient {//从缓存中获取 if ) return clientCache .get ; const config = AI _PROVIDERS ; if throw new Error ; let client ; if {//Ru果是 Anthropic client= new Anthropic ;} else {//否则是 OpenAI client= new OpenAI ;} clientCache .set ; return client ;}// @param{Object} options *@param{string} options .provider -厂商品牌标识 : deepseek / openai / qwen / gemini / ollama / claude * @param{string} - 模型名 ,不传则用厂商品牌默认型号 * @param{Array} options .messages -对话消息数组 * @param{string} – 系统提示词 * @param{number} * @param{number} * @returns{Promise} AI 回复文本 */export async function callAI {//获取配置 const config = AI _PROVIDERS ; if throw new Error ; //获取客户端 const client = getClient ; //获取型号名 const modelName = model || config .defaultModel ;//处理 Claude Ru果 config 。type ===“ anthropic ”{//Claude 使用 Anthropic SDK const response = await client 。messages 。create ; return response 。content .text ;}//处理 OpenAI兼容厂家否则 {//走统一路径 const fullMessages = system ? : messages;//发送请求并返回结果 const response = await client 。chat 。completions 。create ; return response 。choices .message 。content;}
Fallback机制
async function callAIWithFallback {//循环遍历供应商 for{try{//尝试调用并返回结果return await callAI;}catch{//捕获错误 console 。warn ;}}throw new Error ;}
Python实现
完整Python 代码
import osfrom openai import OpenAIimport anthropicAI PROVIDERS ={ ... } #同上 _client _cache ={}//缓存客户端实例 ,避免重复创建 def _getClient:#从缓存中获取 if provider in _client _cache :#Ru果存在直接返回 return _client _cache # 获取配置 config= AI _PROVIDERS 、get # Ru果配置不存在抛出异常if not config:# Ru果是 Anthropictry:# 创建Anthropic客户端client= anthropictest import Exception as e:# Ru果出现异常打印错误信息printreturn Noneelse:# 创建OpenAi客户端 try:# 创建OpenAi客户端client= OpenAIexcept Exception as e:# Ru果出现异常打印错误信息printreturn None# 将客户端存储在缓存中if client != None:client cache= clientreturn cliendef call ai:# 获取配置config= AI _PROVIDERS 、get # Ru果配置不存在抛出异常if not config:# 获取客户单数client=getClient# 获取模型名称model name= model or config# 处理AnthronicRu果config ==“ anthronic ”:# 发送请求response=client 、messages、create# 返回内容return response Choices Message Content
Zui后
这套方案的核心在于解耦与抽象——将不同厂家的差异藏在callAI函数内部,对外提供统一的接口。
这篇文章只是个开始。
下一篇我们将继续探索如何让你的 AI 应用拥有geng好的用户体验——流式输出。
快来试试吧!
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback