配置,用人话讲

旋钮很多。你需要的是其中四个,而且只有在你确实要用云端模型的时候才需要。这一页先讲那四个,再讲其余的,最后给你八家服务商各一段可以直接粘贴的配置。

01一项配置是从哪来的

三个地方,越靠左的越大:

优先级
环境变量   >   config.toml   >   内置默认值

设置屏会告诉你每个值来自这三者中的哪一个;如果是环境变量在压着它,那个输入框会变成只读并说明原因,而不是放你写一个根本不会生效的值。在浏览器里改会写进文件,永远不会去动你的环境变量。

文件在哪
facetmark config path

第一次有东西往里写的时候它才被创建。并不要求你必须有这个文件——没有文件、没有环境变量,全用默认值跑起来也是完全正常的一次运行。

有三项要重启才生效

embed_backendembed_dimlocal_embed_path 决定向量库的形状。这一屏会把它们存下来,然后明确告诉你要下次启动才生效。

02真正要紧的四项

配置项人话
api_key你的 key。存在文件里,回显给你看的是掩码,而且你保存别的字段时它不会被重新写一遍。
base_url请求发到哪。任何说 OpenAI 那套 API 的都行,包括跑在你自己机器上的东西。
chat_model用来读页面,以及在「提问」屏上回答。这里便宜快比聪明重要。
embed_model把文字变成向量。决定搜索质量的是这一项。
换向量模型就要重建索引

两个不同模型出来的向量不可比。换了就跑一次重建,否则搜索会悄悄变差,而且没有任何报错会告诉你。

设置屏上的测试按钮会分别调用对话和向量,并分别报结果,因为实际上通常只有其中一个是坏的——有对话权限、没有向量权限的账号是非常常见的一种形态。

03八家服务商,直接粘贴

把这些放进 facetmark config path 指出来的那个文件,或者把同样的值填到设置屏里。模型名字是会变的;如果某个名字被拒了,去查服务商当前的列表,别信这一页。

OpenAI
api_key = "sk-..."
base_url = "https://api.openai.com/v1"
chat_model = "gpt-4o-mini"
embed_model = "text-embedding-3-small"
embed_dim = 1536
DeepSeek(只有对话——向量要另找一家)
api_key = "sk-..."
base_url = "https://api.deepseek.com/v1"
chat_model = "deepseek-chat"
月之暗面 Kimi
api_key = "sk-..."
base_url = "https://api.moonshot.cn/v1"
chat_model = "moonshot-v1-8k"
智谱 GLM
api_key = "..."
base_url = "https://open.bigmodel.cn/api/paas/v4"
chat_model = "glm-4-flash"
embed_model = "embedding-3"
embed_dim = 2048
硅基流动 SiliconFlow
api_key = "sk-..."
base_url = "https://api.siliconflow.cn/v1"
chat_model = "Qwen/Qwen2.5-7B-Instruct"
embed_model = "BAAI/bge-m3"
embed_dim = 1024
阿里云百炼(OpenAI 兼容端点)
api_key = "sk-..."
base_url = "https://dashscope.aliyuncs.com/compatible-mode/v1"
chat_model = "qwen-plus"
embed_model = "text-embedding-v3"
embed_dim = 1024
Ollama(跑在你自己机器上,不用 key)
base_url = "http://127.0.0.1:11434/v1"
api_key = "ollama"
chat_model = "qwen2.5:7b"
embed_model = "bge-m3"
embed_dim = 1024
vLLM(你自己的服务)
base_url = "http://127.0.0.1:8000/v1"
api_key = "not-used"
chat_model = "Qwen/Qwen2.5-7B-Instruct"
混着用是常态

facetmark 只发两种请求:对话的和向量的。很多人对话用最便宜的、向量用最好的。把 base_url 指向做向量那家、对话模型写全名;或者向量放本地跑,API 只留给对话。

04完全不用 API

向量可以在你自己机器上算。不要 key、不联网、什么都不出这台笔记本:

本地向量
embed_backend = "local"
local_embed_path = "BAAI/bge-m3"
embed_dim = 1024

建索引更慢,而且模型要先下载一次。搜索质量不错:在 1024 token 的窗口上,bge-m3 两次跑出来的向量自身余弦是 0.999976,而这正是一个「要长期留着而不是天天重建」的索引最需要的性质。

你放弃了什么

有两条路是建立在「让语言模型读一遍你的页面」上的:一个页面能回答的那些问题,以及主题标签。没有对话模型,这两块就是空的,你搜的是正文和全文检索——仍然是最强的两条路,也仍然比你浏览器给你的强。

你也可以先从这里开始,以后再加 key。什么都不用丢掉;索引会把之前建不出来的那部分补上。

05其余的

向量

配置项人话
embed_backendapilocal。要重启生效。
embed_dim每个向量多长。必须和模型实际返回的一致。要重启生效。
local_embed_path本地后端用的模型 id 或目录。要重启生效。

它使多大劲

配置项人话
request_timeout多少秒之后放弃一次调用。网慢就调大;某家服务卡住就调小。
fetch_concurrency同时下载几个页面。你的网络抗议的时候调小。
enrich_concurrency同时往模型发几个页面。被限流的时候,要调小的是这一项。

不许它看的东西

配置项人话
privacy_excluded_domains永远不抓、永远不外发的域名。银行、健康、公司内网。书签还在,只有标题进索引。
chat_model_fallbacks第一个模型不干的时候,按顺序往下试的那些。
排除名单要在第一次建索引之前设

一个页面的正文一旦进了数据库,把它的域名加进名单只会阻止以后再抓,不会让它忘掉已经记住的。你在意的话,改完名单跑一次重建。

06你真会遇到的报错

报错怎么办
401 / invalid_api_keykey 不对,或者这个 base_url 配了另一家的 key。在设置屏上测一下——它会告诉你是哪一半挂了。
模型名报 404这个端点上没有这个名字。去查服务商的模型列表。
429被限流。把 enrich_concurrency 调小再跑一次;已经完成的阶段不会重做。
dim mismatchembed_dim 和模型不一致。改对,重启,重建。
对话能用,向量 403很常见。这个账号有一种权限没有另一种。把 embed_backend 切成本地,或者把向量指到另一家。
保存时报 unknown setting某个键名打错了。写入器会拒绝不认识的键,而不是存一个从此被永久忽略的东西。