Perplexica 接入统一 API:自建搜索答案引擎
最后更新: 2026-07-16
Perplexica,上游已改名 Vane,它的 OpenAI 供应商配一个 API Key 和一个 Base URL 字段。填 https://api.kkaiapi.com/v1,把想用的模型 ID 加进去,每一次搜索答案的合成就都经网关跑,Claude、GPT、DeepSeek、Gemini 共用一个 Key。
先说结论:一个 Base URL 字段,两代配置方式
在当前版本上,Perplexica 的 OpenAI 供应商正好有两个必填字段:API Key 和 Base URL,在初装界面和设置界面里都能编辑,对应文档记录的环境变量 OPENAI_API_KEY 和 OPENAI_BASE_URL。把 Base URL 设成 https://api.kkaiapi.com/v1,粘贴网关 Key,再按目录精确 ID 加上想用的聊天模型。供应商把模型 ID 作为纯字符串通过 /v1/chat/completions 转发,所以 Claude 和 DeepSeek 的 ID 都能通过这个"OpenAI"供应商槽位跑。 更老的 Perplexica 版本(config.toml 那一代,一直延续到 v1.10、v1.11 这条线)是同一个能力的另一种写法:一个 [MODELS.CUSTOM_OPENAI] 配置块,带 API_KEY、API_URL、MODEL_NAME 三个键。两代配法下面都有,按自己实际跑的版本对号配。
# 设置界面的字段对应下面这两个文档记录的环境变量
export OPENAI_API_KEY=sk-你的kkaiapi密钥
export OPENAI_BASE_URL=https://api.kkaiapi.com/v1
# 然后在设置里按 ID 加聊天模型,比如 claude-sonnet-4-6Perplexica 怎么回答一个问题,LLM 在哪个位置
Perplexica(GitHub 上的 ItzCrazyKns,约 3.6 万星标)是 Perplexity 风格里最知名的开源答案引擎:接到一个问题,通过内置的 SearxNG 实例跑真实的网页搜索,读取结果,让一个 LLM 合成一份带引用的答案。搜索模式(速度、平衡、质量)在检索深度和延迟之间取舍,焦点模式(网页、讨论、学术论文)收窄信息来源。2026 年这个项目在上游改名成了 Vane,Docker 镜像跟着改了名字;架构和供应商系统都原样延续,所以不管用哪个名字,这一页说的都适用。 LLM 这个槽位是合成质量和成本共同发生的地方。每次答案是一次或多次带着检索来源作为上下文的 chat-completions 调用,这让答案引擎是一种输入 token 远多于输出 token 的负载。供应商系统把 OpenAI 当成几个后端之一(Ollama、Anthropic、Gemini、Groq 等),OpenAI 供应商是其中 Base URL 能自由编辑的那一个,这也是它成为接网关的钩子的原因。 有一个行为值得提前知道:当 Base URL 不是官方 OpenAI 地址时,Perplexica 会刻意显示一份空的默认模型列表,只用你自己加进供应商的模型条目。这是设计如此,因为它没法知道一个自定义端点提供什么模型。加上 claude-sonnet-4-6 或 deepseek-v4-flash 这样的模型条目是配置的后半段,不是变通方案。
完整配置:当前版本与旧版 config.toml
当前版本的一切都在应用里配置。首次启动的设置界面会问供应商信息;之后同样的字段留在设置里。选 OpenAI 供应商,填 API Key 和 Base URL,再加上打算用的聊天模型条目。ID 必须和网关目录精确匹配,加进去的每个条目都会出现在搜索框旁的模型选择器里。 旧版本是基于文件的。如果安装还带 config.toml,说明用的是 CUSTOM_OPENAI 那一代,填下面这个配置块然后重启容器。MODEL_NAME 填一个模型 ID,界面会把它作为自定义 OpenAI 选项提供出来。
[MODELS.CUSTOM_OPENAI]
API_KEY = "sk-你的kkaiapi密钥"
API_URL = "https://api.kkaiapi.com/v1"
MODEL_NAME = "claude-sonnet-4-6"给答案引擎选合成模型
因为模型选择器读的就是你加进去、对着同一个 Base URL 的条目,A/B 测合成模型很简单:在两个标签页里问同一个问题,用两个条目,对比引用。按 Key 的用量日志给每个模型的答案定价,这是判断旗舰合成值不值得花那些 token 的诚实方式。
- 输入 token 是大头。质量模式下的一次答案会把很大的检索上下文塞进提示词,决定一次搜索成本的是模型的输入单价,不是它写回的那段短答案
- claude-sonnet-4-6 是带引用合成的强默认选项:遵循来源锚定指令的能力好,多个片段互相矛盾时也能保持连贯
- 高频的个人或团队实例适合用 claude-haiku-4-5-20251001、gemini-3.5-flash 或 deepseek-v4-flash:答案照样有据可依,单次搜索成本降下来之后,质量模式还能保持默认打开
- 留一个旗舰 ID 当第二个条目。模型条目在选择器里并排显示,把一个难问题升级到 gpt-5.5 只是切一下下拉框,不是改配置
- 学术焦点模式适合长上下文模型,因为论文摘要和节选比网页片段更长
主力模型价格
价格按 kkaiapi 中文区实时价格计算,单位 ¥/1M tokens(输入/输出)。
| 模型 | 模型 ID | kkaiapi 价格(输入/输出) | 适合场景 |
|---|---|---|---|
| Claude Sonnet 4.6 | claude-sonnet-4-6 | ¥3 / ¥15 | 带引用合成默认 |
| Claude Haiku 4.5 | claude-haiku-4-5-20251001 | ¥1 / ¥5 | 高频个人实例 |
| GPT-5.5 | gpt-5.5 | ¥4 / ¥25 | 难问题升级 |
| Gemini 3.5 Flash | gemini-3.5-flash | ¥7 / ¥40 | 高频、成本敏感 |
| DeepSeek V4 Flash | deepseek-v4-flash | ¥0.9 / ¥1.8 | 超高频场景 |
Perplexica 专属的翻车点
空模型列表是最经典的一个。设了 Base URL,选择器变空白,看起来像坏了。其实没坏:Base URL 不是默认地址时,Perplexica 只列出你加进供应商的模型条目。把 ID 加上去,它们就会出现。 Embedding 是单独一个槽位。Perplexica 用 Embedding 模型给结果做重排序,OpenAI 供应商会用同一个 Base URL 和 Key 提供 Embedding。如果网关不提供你在那里配的 Embedding ID,重排序会坏,聊天答案照样能用。干净的做法是让 Embedding 留在本地的 Transformers 供应商上,这个供应商跑在本机、完全不用调 API,只让聊天合成经网关走。kkaiapi 目前不提供 Embedding 模型,这一步不能假设网关会顺带接住。 改名的事让教程说法容易对不上。Perplexica 和 Vane 是同一个项目,旧教程引用 perplexica 这个 Docker 镜像和 config.toml,当前版本以 vane 的名字发布,应用内设置加一个持久化数据卷。如果安装里没有 config.toml,不要新建一个,它不会被读取;改用界面或文档记录的环境变量配置。 SearxNG 是独立的。如果答案质量下降或者搜索没有结果,那是 SearxNG 容器或者它的 JSON 格式设置的问题,不是 LLM 端点的问题。Base URL 只影响聊天和 Embedding 调用。
谁会把 Perplexica 接到一个网关上
- 想替换 Perplexity 订阅、按 token 价格获得旗舰级合成质量的自部署用户,一个 Key 代替每个模型家族各一个厂商账号
- 跑一个共享答案引擎的团队,按 Key 的用量日志把"搜索到底花我们多少钱"变成一个按模型拆分的数字
- 注重隐私的部署,检索完全留在本地(SearxNG 加本地 Embedding),只把最后的合成调用经一个可审计的端点向外发
- 在完全相同的问题上对比合成模型的爱折腾用户,每个候选都是对着同一个 Base URL 加一个模型条目
- 拿不到某家厂商官方支付渠道的开发者,充值即用不需要海外卡
验证接入与排查第一次搜索
在怪应用之前先确认网关提供了你加进去的那些 ID;供应商里的条目必须和 /v1/models 的输出精确匹配。 第一次运行的失败很有规律。"没有配置聊天模型供应商"说明供应商字段没保存成功,或者模型列表仍然是空的;至少加一个聊天模型条目。服务端日志里的 401 说明 Key 和 Base URL 字段里的端点对不上。模型不存在的报错是模型条目里 ID 拼错了。答案能正常出但重排序报错,指向 Embedding 槽位,这正是本地 Transformers 供应商能帮上忙的地方。如果改完环境变量之后什么都没变,记住配置会持久化在数据卷里;界面里已经保存过的字段会覆盖后来的环境变量改动,所以要在设置里改。 搜索能跑起来之后,kkaiapi 控制台会显示每次请求的模型、token 数和花费。答案引擎是输入密集型的,看清自己查询组合下真实的每次搜索 token 数,比任何估算都靠谱。
curl -s https://api.kkaiapi.com/v1/models \
-H "Authorization: Bearer $KKAIAPI_KEY" | head -50常见问题
Perplexica 和 Vane 是同一个项目吗?
是。上游仓库 2026 年改名成了 Vane,Docker 镜像跟着改了。供应商系统、SearxNG 集成、这里说的 Base URL 字段在两个名字下都一样;只有旧版本还用 Perplexica 这个名字和 config.toml。
Perplexica 能用 Claude 或 DeepSeek 模型答题吗?
能。OpenAI 供应商把模型 ID 作为纯字符串转发给设置的任意 Base URL。把 claude-sonnet-4-6 或 deepseek-v4-flash 加成模型条目,对着网关的 Base URL,它们就会像其它选项一样出现在模型选择器里。
为什么改完 Base URL 之后模型列表是空的?
这是设计如此。Base URL 不是默认地址时,Perplexica 没法假设这个端点提供什么模型,所以只列出你自己加进供应商的条目。在设置里加上你的 ID,它们会立刻出现。
旧版的 CUSTOM_OPENAI 配置键是什么?
在 config.toml 那一代(延续到 v1.10、v1.11 这条线),[MODELS.CUSTOM_OPENAI] 配置块接受 API_KEY、API_URL、MODEL_NAME。API_URL 填带 /v1 的网关端点,MODEL_NAME 填一个目录 ID,然后重启。
Embedding 也会经过这个自定义 Base URL 吗?
如果在 OpenAI 供应商上配置了 Embedding 模型,会用同一个 Base URL 和 Key。多数网关配置更倾向于让 Embedding 留在本地 Transformers 供应商上,这个供应商不用调 API,能让重排序独立于聊天端点。
OPENAI_API_KEY 和 OPENAI_BASE_URL 环境变量还有效吗?
有效,这是当前版本 OpenAI 供应商两个字段对应的文档记录环境变量。注意如果应用已经通过设置界面配置过一次,值会持久化在数据卷里,所以要在界面里改。