news 2026/9/15 12:10:30

Nightingale 如何通过 API 创建和管理 AI 助手的大模型配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Nightingale 如何通过 API 创建和管理 AI 助手的大模型配置

Nightingale 如何通过 API 创建和管理 AI 助手的大模型配置

【免费下载链接】nightingaleNightingale is to monitoring and alerting what Grafana is to visualization.项目地址: https://gitcode.com/GitHub_Trending/ni/nightingale

Nightingale 的 AI 助手依赖一套集中管理的大模型(LLM)配置:模型地址、API Key、模型名和采样参数都存在ai_llm_config表里,助手按配置 ID 引用它们。如果你的目标是通过接口(脚本、CI 或第三方系统)完成"测试连通性 → 创建配置 → 查询 → 更新 → 删除"这一整套操作,API 文档给出的 6 个端点就是全部所需。前提条件是 nightingale center 服务已启动,且调用账号具备 LLM 配置管理权限——API 文档将其表述为管理员权限(auth+admin),路由实现上对应的是authuser/ai-config/llm-configs权限检查(见 路由注册 中ai-llm-configs相关行)。

下文命令统一假设:

  • <N9E_ADDR>:center 服务的地址加端口(例如http://127.0.0.1:<port>),替换为你的实际部署地址;
  • <token>:登录返回的 JWT,用于后续所有请求。

准备:登录并拿到请求 token

curl -s -X POST <N9E_ADDR>/api/n9e/auth/login \ -H 'Content-Type: application/json' \ -d '{"username": "admin", "password": "你的登录密码"}'

usernamepassword是必填字段(登录请求结构见 router_login.go)。两条条件性要求:

  • 服务开启验证码时,请求体还需带captchaidverifyvalue,可先调POST /api/n9e/auth/captcha获取;
  • 服务开启 RSA 登录加密时,password需先按服务端公钥加密再提交。

登录成功后,dat字段返回 JWT token。后续所有/api/n9e/ai-llm-config*请求都要在请求头中携带:

AUTH="Authorization: Bearer <token>"

如果服务端启用了固定 token 认证(TokenAuth),也可以改用X-User-Token头传递用户 token,两者在 tokenAuth 中间件 中是并列的鉴权途径。

先不创建配置,直接测试连通性

创建配置前建议先验证模型端点、Key 和模型名是否正确。POST /api/n9e/ai-llm-config/test直接基于你传入的连接参数发起真实请求,配置不必事先存在:

curl -s -X POST <N9E_ADDR>/api/n9e/ai-llm-config/test \ -H "$AUTH" -H 'Content-Type: application/json' \ -d '{ "api_type": "openai", "api_url": "https://api.openai.com", "api_key": "sk-你的真实Key", "model": "gpt-4o", "extra_config": { "timeout_seconds": 30, "skip_tls_verify": false, "proxy": "", "custom_headers": {} } }'

api_urlapi_keymodel以上面的文档示例值为模板,替换为你自己的。)

探测行为(由 probe.go 实现):服务端按api_type向对应端点发送一条"Hi"消息,输出上限 512 token。三种api_type的实际请求如下(来自 API 文档):

api_type请求 URL鉴权方式
openai{api_url}/chat/completionsAuthorization: Bearer {api_key}
claude{api_url}/v1/messagesx-api-key: {api_key}
gemini{api_url}/v1beta/models/{model}:generateContent?key={api_key}URL 参数

文档示例的成功响应:

{ "dat": { "success": true, "duration_ms": 856 }, "err": "" }

successtrue即端点、凭据、模型名三者都验证通过。一个值得注意的判定:推理模型(reasoning model)可能把 512 token 全部花在思考上,正文为空且finish_reason=length——这种情况连接仍视为健康,因为探测目的(验证端点/鉴权/模型)已达成;只有响应正常结束(finish_reason=stop)却完全无内容时才会报 "no content"。

失败时文档示例如下:

{ "dat": { "success": false, "duration_ms": 5000 }, "err": "HTTP 401: {\"error\": \"invalid api key\"}" }

注意实现细节:当前路由实现同时会把分类后的错误信息放进dat.error字段(见 aiLLMConfigTest 处理器),错误文案跟随请求头X-Language的语言设置。

创建 LLM 配置

连通性验证通过后创建配置。POST /api/n9e/ai-llm-configs的必填字段是nameapi_typeapi_urlapi_keymodelapi_type取值为openaiclaudegemini三种(文档示例):

curl -s -X POST <N9E_ADDR>/api/n9e/ai-llm-configs \ -H "$AUTH" -H 'Content-Type: application/json' \ -d '{ "name": "gpt-4o", "description": "OpenAI GPT-4o", "api_type": "openai", "api_url": "https://api.openai.com", "api_key": "sk-你的真实Key", "model": "gpt-4o", "extra_config": { "timeout_seconds": 60, "temperature": 0.7, "max_tokens": 4096, "custom_headers": { "X-Custom": "value" } }, "enabled": true }'

成功响应返回新配置的 ID(文档示例):

{ "dat": 1, "err": "" }

两条来自 模型实现 的硬规则,创建前要知道:

  • name 全局唯一:重名会返回ai llm config name xxx already exists错误;
  • 默认配置:系统中第一条配置自动成为默认(is_default = true);后续创建或更新时把is_default置为true,会清除其他行上的默认标记,保证默认配置唯一。

extra_configLLMExtraConfig)各字段及含义见 API 文档:timeout_seconds(请求超时,默认 30 秒)、skip_tls_verifyproxycustom_headerscustom_paramstemperaturemax_tokenscontext_length,全部可选。

查询配置与 Key 的掩码规则

# 列出全部 curl -s <N9E_ADDR>/api/n9e/ai-llm-configs -H "$AUTH" # 按 ID 查详情 curl -s <N9E_ADDR>/api/n9e/ai-llm-config/1 -H "$AUTH"

列表按 ID 排序;查详情时 ID 不存在返回404ai llm config not found)。

注意响应中api_key掩码值而不是明文:保留前 4 位和后 4 位、中间以****替代(例如sk-a****wxyz);长度不超过 8 位的 Key 整体显示为****(见 MaskAPIKey)。所以从 GET 响应里拿到的 Key 不能当作真实 Key 再用于测试或更新——后文会说明服务端如何处理这种回传。

更新配置

curl -s -X PUT <N9E_ADDR>/api/n9e/ai-llm-config/1 \ -H "$AUTH" -H 'Content-Type: application/json' \ -d '{ "name": "gpt-4o", "description": "OpenAI GPT-4o", "api_type": "openai", "api_url": "https://api.openai.com", "api_key": "", "model": "gpt-4o-mini", "enabled": true }'

请求体结构与创建接口一致,校验规则也一致。关于api_key有两条保留原值的路径:

  • 文档规则:api_key传空字符串时,保留已有值而不覆盖;
  • 实现补充:如果你把 GET 拿到的掩码值原样 PUT 回来,更新处理器 会识别出这是掩码回传,同样保留真实 Key,不会把sk-a****wxyz写进数据库。

只有确实要换 Key 时才传新的明文api_key。改名时依然受 name 唯一性约束。成功响应为{"dat": "", "err": ""};ID 不存在返回404

删除配置

curl -s -X DELETE <N9E_ADDR>/api/n9e/ai-llm-config/1 -H "$AUTH"

删除成功响应同样为{"dat": "", "err": ""},ID 不存在返回404。删除是不可逆操作,执行前确认没有助手还引用该配置的 ID。

把配置接到 AI 助手上

LLM 配置创建后,AI 助手(Agent)通过llm_config_id字段引用它。按 AI Agent API 文档,创建 Agent 时llm_config_id必填且必须大于 0:

curl -s -X POST <N9E_ADDR>/api/n9e/ai-agents \ -H "$AUTH" -H 'Content-Type: application/json' \ -d '{ "name": "chat-agent", "use_case": "chat", "llm_config_id": 1, "enabled": true }'

另外,当自动接入的消费者(如默认 chat agent)没有绑定具体LLMConfigId时,会回退使用is_default = trueenabled = true的那条配置(见 AILLMConfigPickDefault)——这就是"第一条配置自动设为默认"这个行为存在的意义。

连接测试失败时怎么读错误

POST /api/n9e/ai-llm-config/test的错误信息按 HTTP 状态分类(分类逻辑见 classifyProbeError),每类都附带服务端响应原文:

错误类别触发条件含义
鉴权失败HTTP 401/403API Key 不正确,检查api_key
端点不存在HTTP 404检查api_url;OpenAI 兼容接口的 URL 应以/v1结尾,例如https://api.openai.com/v1
限流HTTP 429Key 配额耗尽或请求过于频繁
请求失败其他非 2xx 状态附带具体状态码
响应格式异常无法解析响应体api_url可能指向了错误的端点
模型错误 / 无内容提供方返回模型级错误检查model字段填的模型名是否正确

边界说明

  • api_type目前只支持openaiclaudegemini三种;
  • 所有接口都要求登录态与 LLM 配置管理权限,普通无权限账号调用会得到鉴权失败;
  • 创建、更新、删除操作都会真实落库并影响所有引用该配置的助手,批量变更前建议先用 test 端点验证、再逐条操作。

【免费下载链接】nightingaleNightingale is to monitoring and alerting what Grafana is to visualization.项目地址: https://gitcode.com/GitHub_Trending/ni/nightingale

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 12:10:16

Flutter与鸿蒙深度适配:高性能图形渲染方案解析

1. 项目背景与核心价值去年在开发跨平台游戏引擎时&#xff0c;我遇到了一个棘手问题&#xff1a;如何让基于Flutter的图形渲染方案在鸿蒙系统上获得接近原生的性能表现&#xff1f;当时市面上的跨平台方案要么性能不足&#xff0c;要么无法充分利用鸿蒙的硬件特性。经过三个月…

作者头像 李华
网站建设 2026/9/15 12:08:23

git-bug user 命令完全指南:身份创建、查看、采纳与 JSON 输出

git-bug user 命令完全指南&#xff1a;身份创建、查看、采纳与 JSON 输出 【免费下载链接】git-bug Distributed, offline-first bug tracker embedded in git 项目地址: https://gitcode.com/GitHub_Trending/gi/git-bug 导读 本文是 git-bug 分布式缺陷跟踪器中身份…

作者头像 李华
网站建设 2026/9/15 12:08:17

Pikachu靶场SQL注入实战与防御指南

1. Pikachu靶场SQL注入实战指南作为网络安全领域的经典训练平台&#xff0c;Pikachu靶场以其丰富的漏洞场景和贴近实战的环境设计&#xff0c;成为安全从业者必备的练手工具。今天我将重点拆解其中最具代表性的SQL注入模块&#xff0c;通过手工测试与自动化工具结合的实战路径&…

作者头像 李华
网站建设 2026/9/15 12:08:06

小程序毕设项目:基于SpringBoot的用户健康数据分析与指导系统的设计与实现 智能生活健康辅助服务小程序平台 (源码+文档,讲解、调试运行,定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华