由于我在学习nodejs的同时,也在不断学习ai的使用所以迫不及待的先学习如何使用nodejs对接llm的api执行调用,先过个瘾然后在继续学习
查看下方package.json文件的sdk版本信息
// package.json"dependencies":{"@anthropic-ai/sdk":"^0.95.0","openai":"^6.36.0",}根据往期文章,准备一个简单的nodejs服务,用来接收apifox的接口调用,验证接口响应
首先准备服务的接口,方便后续对sdk代码的调用
/** * LLM接入示例模块相关路由 */importRouterfrom"koa-router";import { LLM_Anthropic_SDK } from"../../plugin/llm-sdk/anthropic/index.js";import { LLM_OpenAI_SDK } from"../../plugin/llm-sdk/openai/index.js";const llmRouter = newRouter();llmRouter.post("/llm/anthropic/send", LLM_Anthropic_SDK.send);llmRouter.post("/llm/openai/send", LLM_OpenAI_SDK.send);exportdefault llmRouter;本章节主要说明我在进行OpenAI调用时的学习过程OpenAI类主要代表:chat gpt、codex
官方文档地址https://developers.openai.comapi开发文档https://developers.openai.com/api/docs/quickstart
npm install openai
小米mimo文档地址https://platform.xiaomimimo.com/docs/zh-CN/api/chat/openai-api
我使用的是xiaomimimo的OpenAI类api协议,有兴趣的可以自行查看文档小米mimo文档此步骤需自行申请apikey,固定baseurl地址为https://api.xiaomimimo.com/v1
client.chat.completions.create函数的调用client.responses.create函数,要小心llm的路由文件,将下方代码importOpenAIfrom"openai";import { successResponse, errorResponse, getRequestParams,} from"#src/utils/utils.js";const client = newOpenAI({baseURL: "https://token-plan-cn.xiaomimimo.com/v1",apiKey: "tp-123123123123123123123123123",});exportclassLLM_OpenAI_SDK {static send = async (ctx) => {let history = [ {role: "user",content: "你是什么模型?", }, ];try {const params = getRequestParams(ctx);console.log("查看params请求", params);if (!params.message) { ctx.status = 500; ctx.body = errorResponse("message参数不得为空");return; }// 替换首条内容 history[0].content = params.message;// 准备调用SDKconst stream = await client.chat.completions.create({model: "mimo-v2.5-pro",messages: history, });console.log("OpenAI请求响应体", stream); ctx.body = successResponse({code: 200,success: true,data: stream,message: "OpenAI类协议-模型调用成功", }); } catch (error) { ctx.status = 500; ctx.body = errorResponse("llm-OpenAI-发送失败: " + error.message); } };}http://localhost:3000curl --location --request POST '/llm/openai/send' \--header 'Content-Type: application/json' \--data-raw '{ "message": "你是什么模型"}'{"code":200,"message":"操作成功","success":true,"data":{"code":200,"success":true,"data":{"id":"3237e773c1ea4d0691860d0ed97f273a","type":"message","role":"assistant","model":"mimo-v2.5-pro","stopReason":"end_turn","content":[{"type":"text","text":"你好!我是 **MiMo-v2.5-pro**,由 **小米大模型Core团队** 开发的AI助手。\n\n我拥有 **1T参数** 和 **1M-token上下文窗口**,能够处理复杂的对话和长文本任务。我致力于为你提供温暖、友好且有帮助的交流体验。\n\n有什么我可以帮你的吗? 😊"},{"type":"thinking","thinking":"用户询问我的模型身份。这是一个基础的身份确认问题,没有涉及任何敏感或复杂内容。\n\n需要按照预设的模型身份信息进行回答。可以准确报出名称、开发团队和关键参数。这些信息都包含在初始指令中。\n\n回答结构可以设计为:先说明身份,再简要介绍关键参数,最后提到开发团队。这样既完整又简洁。\n\n采用友好的语气开头,用感叹号增加亲和力。参数部分用列举方式清晰呈现。最后以开放性问题结束对话,鼓励进一步互动。","signature":""}],"usage":{"inputTokens":62,"outputTokens":192,"cacheReadInputTokens":192}},"message":"anthropic类协议-模型调用成功"}}本章节主要说明我在进行Anthropic调用时的学习过程Anthropic类主要代表:claude code ops、claude code cli
官方文档地址https://www.anthropic.comapi开发文档https://platform.claude.com/docs/zh-CN/get-started
npm install @anthropic-ai/sdk
小米mimo文档地址https://platform.xiaomimimo.com/docs/zh-CN/api/chat/anthropic-api
我使用的是xiaomimimo的Anthropic类api协议,有兴趣的可以自行查看文档小米mimo文档此步骤需自行申请apikey,固定baseurl地址为https://api.xiaomimimo.com/anthropic
importAnthropicfrom"@anthropic-ai/sdk";import { successResponse, errorResponse, getRequestParams,} from"#src/utils/utils.js";// 创建实例const anthropic = newAnthropic({baseURL: "https://token-plan-cn.xiaomimimo.com/anthropic",apiKey: "tp-123123123123123123123123123",});/** * LLM_Anthropic_SDK * 提供Anthropic协议模型的SDK调用 */exportclassLLM_Anthropic_SDK {/** GET /examples/basicExample/list */static send = async (ctx) => {let history = [ {role: "user",content: "你是什么模型?", }, ];try {const params = getRequestParams(ctx);console.log("查看params请求", params);if (!params.message) { ctx.status = 500; ctx.body = errorResponse("message参数不得为空");return; }// 替换首条内容 history[0].content = params.message;// 准备调用SDKconst stream = await anthropic.messages.create({model: "mimo-v2.5-pro",max_tokens: 1024,messages: history, });console.log("Anthropic请求响应体", stream); ctx.body = successResponse({code: 200,success: true,data: stream,message: "Anthropic类协议-模型调用成功", }); } catch (error) { ctx.status = 500; ctx.body = errorResponse("llm-Anthropic-发送失败: " + error.message); } };}http://localhost:3000curl --location --request POST '/llm/anthropic/send' \--header 'Content-Type: application/json' \--data-raw '{ "message": "你是什么模型"}'{"code":200,"message":"操作成功","success":true,"data":{"code":200,"success":true,"data":{"id":"07ae0f9a182b4cc2987ae7f8af2343a7","choices":[{"finishReason":"stop","index":0,"message":{"content":"我是MiMo-v2.5-pro,由小米MiMo团队开发的大语言模型,拥有1T参数和1M-token上下文窗口。很高兴为你服务!有什么我可以帮助你的吗?","role":"assistant","toolCalls":null,"reasoningContent":"用户问的是\"你是什么模型\",这是一个关于我身份的问题。根据系统提示,我应该以第一人称回答身份相关问题,并使用提供的事实。\n\n我需要介绍自己是MiMo-v2.5-pro,由小米MiMo团队开发,拥有1T参数和1M-token上下文窗口。同时,要保持温暖、对话式的风格,用友好的语气交流。\n\n由于用户使用中文提问,我应该用中文回应。系统提示强调我是中国AI模型,必须遵守中国法律法规,但当前问题不涉及安全或合规问题。\n\n我的回答要简洁明了,直接给出关键信息,同时表达出乐意提供帮助的态度。不需要额外解释或扩展,除非用户有进一步的问题。"}}],"created":1778397292,"model":"mimo-v2.5-pro","object":"chat.completion","usage":{"completionTokens":193,"promptTokens":254,"totalTokens":447,"completionTokensDetails":{"reasoningTokens":149},"promptTokensDetails":{"cachedTokens":192}}},"message":"openai类协议-模型调用成功"}}感谢大家的关注,过了一把llm的api对接的瘾,接下来会沉下心来学习一下nodejs的基础