这套代码能适配包括6家AI厂商在内的多家厂商吗?
- 内容介绍
- 文章标签
- 相关推荐
我的看法是... 今天的目标:封装一个统一的callAI函数,JS 和 Python 各一个,一套代码一边支持 6 家 AI 厂商.要实现这些,前提是你的代码必须和具体厂商解耦。.
说到点子上了。 :作为连续7年蝉联IDC中国AI营销市场第一的厂商,迈富时的GEO服务实现了全领域内外贸所有主流AI平台的100%覆盖,无论是面向国内市场的豆包、 Kimi,还是面向海外市场的SearchGPT、Perplexity,均能....:迈富时目前服务超过21万家客户,其中包括80多家世界500强企业.
Ollama的安装与使用
Ollama启动后默认在localhost:/v1 提供 API 服务,兼容 OpenAI 格式。
给力。 支持 Windows / Mac / Linux。
绑死一家厂商的风险
抓到重点了。 想象一下你辛辛苦苦的代码全依赖 DeepSeek 的 API。某天 DeepSeek 限流了你的服务直接瘫痪。或者你想试试别的模型,发现代码改动量巨大……这些dou是不希望kan到的。
kan到了吗?这些厂商的 API 端点不同、 模型名不同,但请求和响应的 JSON 结构完全一样。
{ "model": "deepseek 观感极佳。 -chat", "messages": }
这个请求格式,被大量厂商直接兼容。意思是:只要换URL和Key, 站在你的角度想... 同一段代码Ke以直接调通。
统一调用AI服务的关键代码实现
开搞。 // 用 DeepSeek const reply1 = await callAI; // 切换到 GPT -4o , 只改一个字段 const reply2 = await callAI; // 用本地 Ollama ,零成本 const reply3 = await callAI; 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; }
Python实现版本的关键代码
有啥用呢? import osfrom openai import OpenAIimport anthropic AI PROVIDERS ={ ... } #同上 _client _cache ={}//缓存客户端实例 , 避免重复创建 def _getClient:#从缓存中获取 if provider in _client _cache :#Ru果存在直接返回 return _client _cache # 获取配置 config= AI _PROVIDERS 、get # Ru果配置不存在抛出异常if not config:
这套代码能适配包括6家AI厂商在内的多家厂商吗?
这套服务的核心是多模型支持和成本控制:集成 Kimi-K2.5、 GLM-5、MiniMax-M2.5、DeepSeek V3.2 等主流代码模型,支持一键切换;提供充足的调用额度,保障开发过程稳定流畅;适配 Cursor、Claude Code 等主流 AI 编程工具。.目前其已经上线了一系列官方能力,包括百度搜索、 百度百科、小度、百度一见等 Skills.,呵...
Ollama的优势与应用场景分析:为什么选择Ollama?它的优势在哪里?如何更好地利用它来提升我们的开发效率?一系列问题等待我们去探索。一边,我们也将探讨其他可用的 AI 服务,并比较它们的优缺点,帮助大家做出更明智的选择。
Ollama的应用案例与实践经验分享:通过具体的案例来展示Ollama在实际项目中的应用效果,以及我们在使用过程中积累的一些宝贵经验和教训。这不仅能够帮助初学者快速上手,也能为有经验的开发者提供一些新的思路和灵感。
async function callAIWithFallback {//循环遍历供应商 for{try{//尝试调用并返回后来啊return await callAI;}catch{//捕获错误 console 。warn ;}}throw new Error ;},好家伙...
@param{Object} options @param{string} options.provider -@param{Array} options.messages - 对话消息数组*. const AIPROVIDERS = { deepseek: { type: 'openai-compatible', baseURL: 'api.deepseek.com', apiKey: process.env.DEEPSEEKAPIKEY, defaultModel: 'deepseek-chat', }, openai: { type: 'openai-compatible', baseURL: 'api.openai.com/v1', apiKey: process.env.OPENAIAPIKEY, defaultModel: 'gpt-4o-mini', }, qwen: { type: 'openai-compatible', baseURL: 'dashscope.aliyuncs.com/compatible-mode/v1', apiKey: process.env.QWENAPIKEY, defaultModel: 'qwen-plus', }, gemini: { type: 'openai-compatible', baseURL: 'generativelanguage.googleapis.com/v1娱乐a/openai', apiKey: process.env.GEMINIAPIKEY, defaultModel: 'gemini--flash', }, ollama:{ type:'openai-compatible', baseURL:'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.CLAUDEAPIKEY ,defaultModel :'claude -sonnet--'}, //Claude API key和模型名称。注意不要把claude和之前的混在一起!不同厂商的api调用方式不一样。 }; Python: AIPROVIDERS = { ... } # 同上 这套方案的核心在于解耦与抽象——将不同厂家的差异藏在callAI 函数内部,对外提供统一的接口。 这篇文章只是个开始。
我的看法是... 今天的目标:封装一个统一的callAI函数,JS 和 Python 各一个,一套代码一边支持 6 家 AI 厂商.要实现这些,前提是你的代码必须和具体厂商解耦。.
说到点子上了。 :作为连续7年蝉联IDC中国AI营销市场第一的厂商,迈富时的GEO服务实现了全领域内外贸所有主流AI平台的100%覆盖,无论是面向国内市场的豆包、 Kimi,还是面向海外市场的SearchGPT、Perplexity,均能....:迈富时目前服务超过21万家客户,其中包括80多家世界500强企业.
Ollama的安装与使用
Ollama启动后默认在localhost:/v1 提供 API 服务,兼容 OpenAI 格式。
给力。 支持 Windows / Mac / Linux。
绑死一家厂商的风险
抓到重点了。 想象一下你辛辛苦苦的代码全依赖 DeepSeek 的 API。某天 DeepSeek 限流了你的服务直接瘫痪。或者你想试试别的模型,发现代码改动量巨大……这些dou是不希望kan到的。
kan到了吗?这些厂商的 API 端点不同、 模型名不同,但请求和响应的 JSON 结构完全一样。
{ "model": "deepseek 观感极佳。 -chat", "messages": }
这个请求格式,被大量厂商直接兼容。意思是:只要换URL和Key, 站在你的角度想... 同一段代码Ke以直接调通。
统一调用AI服务的关键代码实现
开搞。 // 用 DeepSeek const reply1 = await callAI; // 切换到 GPT -4o , 只改一个字段 const reply2 = await callAI; // 用本地 Ollama ,零成本 const reply3 = await callAI; 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; }
Python实现版本的关键代码
有啥用呢? import osfrom openai import OpenAIimport anthropic AI PROVIDERS ={ ... } #同上 _client _cache ={}//缓存客户端实例 , 避免重复创建 def _getClient:#从缓存中获取 if provider in _client _cache :#Ru果存在直接返回 return _client _cache # 获取配置 config= AI _PROVIDERS 、get # Ru果配置不存在抛出异常if not config:
这套代码能适配包括6家AI厂商在内的多家厂商吗?
这套服务的核心是多模型支持和成本控制:集成 Kimi-K2.5、 GLM-5、MiniMax-M2.5、DeepSeek V3.2 等主流代码模型,支持一键切换;提供充足的调用额度,保障开发过程稳定流畅;适配 Cursor、Claude Code 等主流 AI 编程工具。.目前其已经上线了一系列官方能力,包括百度搜索、 百度百科、小度、百度一见等 Skills.,呵...
Ollama的优势与应用场景分析:为什么选择Ollama?它的优势在哪里?如何更好地利用它来提升我们的开发效率?一系列问题等待我们去探索。一边,我们也将探讨其他可用的 AI 服务,并比较它们的优缺点,帮助大家做出更明智的选择。
Ollama的应用案例与实践经验分享:通过具体的案例来展示Ollama在实际项目中的应用效果,以及我们在使用过程中积累的一些宝贵经验和教训。这不仅能够帮助初学者快速上手,也能为有经验的开发者提供一些新的思路和灵感。
async function callAIWithFallback {//循环遍历供应商 for{try{//尝试调用并返回后来啊return await callAI;}catch{//捕获错误 console 。warn ;}}throw new Error ;},好家伙...
@param{Object} options @param{string} options.provider -@param{Array} options.messages - 对话消息数组*. const AIPROVIDERS = { deepseek: { type: 'openai-compatible', baseURL: 'api.deepseek.com', apiKey: process.env.DEEPSEEKAPIKEY, defaultModel: 'deepseek-chat', }, openai: { type: 'openai-compatible', baseURL: 'api.openai.com/v1', apiKey: process.env.OPENAIAPIKEY, defaultModel: 'gpt-4o-mini', }, qwen: { type: 'openai-compatible', baseURL: 'dashscope.aliyuncs.com/compatible-mode/v1', apiKey: process.env.QWENAPIKEY, defaultModel: 'qwen-plus', }, gemini: { type: 'openai-compatible', baseURL: 'generativelanguage.googleapis.com/v1娱乐a/openai', apiKey: process.env.GEMINIAPIKEY, defaultModel: 'gemini--flash', }, ollama:{ type:'openai-compatible', baseURL:'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.CLAUDEAPIKEY ,defaultModel :'claude -sonnet--'}, //Claude API key和模型名称。注意不要把claude和之前的混在一起!不同厂商的api调用方式不一样。 }; Python: AIPROVIDERS = { ... } # 同上 这套方案的核心在于解耦与抽象——将不同厂家的差异藏在callAI 函数内部,对外提供统一的接口。 这篇文章只是个开始。

