01月08日
一、今日完成情况
- 完成LibreChat环境配置和MCP嵌入服务,并且效果测试(系统修改-Obsidian修改-浏览器修改)
- 预定–对爬取数据进行处理(筛选换行符、模型翻译、评论长度筛选)
- 显示器保存支架购买 + HDMI线优雅防止设计。(亚克力板 + 刻刀 + 胶水可以实现理想当中的效果)
- 快速了解Agent RAG开发的平台–
LangChain,这是我接下来的重点。
二、今日感悟
- 核心业务数据:
- 今日工作总结:
- 明日工作计划:
- 今日学习成长:
三、备注
- 无
四、LibreChat
配置了一下快速运行Librechat脚本,不然每次运行都要打开Docker之后,运行至少三条指令,非常麻烦,然后还要到浏览器当中运行,不少于4步。
现在我把所有指令步骤制作为一个脚本,并且修改.sh文件的默认启动方式,默认在终端当中运行,从而简化所有步骤:
当然关闭服务的话,还得跑一个指令,因为只有一步,就没必要做成脚本了
cd /Users/kipley/Documents/code/Docker/LibreChat
docker compose down
下面是具体的MCP配置方法入门:
不幸的是,我当前配置MCP服务的目标是,可是实现对计算机内部资源的访问,从而极大的优化和提高我的生产力,可是在Docker容器下运行的LibreChat无法满足这一点,因为Docker是严格的隔离的,是申不到我的系统里面的,所以我要进行这个项目唯一能够做的就是,在本地再次部署,那么就需要安装依赖,相对来讲比Docker麻烦不少,因为Docker是打包好了的。
需要打通的环节是,网页依赖,数据库依赖,还有最后项目的拉取这几个方面。
A、本地卡快速启动/关闭
1. 开启“魔法” (必须)
- 打开你的 Hysteria / Vultr 代理软件。
- 确认开启 TUN 模式 / 增强模式 (这是你解决网络问题的关键)。
2. 启动数据库 (Docker)
打开终端 (Terminal),输入:
docker start mongodb
3. 启动 LibreChat 主程序
进入你的项目目录并启动:
cd /Users/kipley/Documents/code/MCP/LibreChat
npm run backend
关闭方式如下:
npm run backend 的终端窗口,按下组合键 Ctrl + C
停止数据库
docker stop mongodb
关闭代理: 退出你的代理软件。
B、本地部署尝试(理论路径)
第一阶段:准备地基 (环境安装)
在 Docker 版里,环境是自动配好的;但在本地版里,我们需要自己安装 Node.js (运行环境) 和 MongoDB (数据库)。
请打开你的 Mac 终端,依次执行以下检查和安装:
1. 检查 Node.js 版本
LibreChat 对 Node.js 版本有要求(建议 v20 或更高)。
Bash
node -v
如果显示
v20.x.x或更高,直接跳过。如果没安装或版本太低,请去 Node.js 官网 下载安装 LTS 版本,或者用
brew install node。
2. 安装并启动 MongoDB (这是唯一的难点)
LibreChat 需要一个数据库来存聊天记录。在 Mac 上最简单的办法是用 Homebrew 安装。
安装:
brew tap mongodb/brew
brew install mongodb-community
```
**启动服务:**
``` bash
brew services start mongodb-community
(看到 Successfully started 字样就算成功。)
使用Docker的数据库比本地配置方便许多,这里我尝试在Docker配置数据库
docker run -d --name mongodb -p 27017:27017 mongo:latest
这里之前没有拉取过没关系的,系统会自动拉取的。
docker ps
验证成功!
npm run backend
启动即可。
第二阶段:安装 LibreChat (本地源码版)
找一个你喜欢的文件夹(比如 ~/Documents),我们开始从零安装。
1. 下载源码
# 进入文档目录
cd ~/Documents
# 克隆代码
git clone https://github.com/danny-avila/LibreChat.git
# 进入项目文件夹
cd LibreChat
2. 配置基础环境 (.env)
我们需要复制一份配置文件。
cp .env.example .env
关键动作:虽然默认配置就能跑,但为了确保它能连上你刚才装的本地数据库,建议你用文本编辑器打开 .env 文件看一眼。
- 找到
MONGO_URI - 确保它是
mongodb://127.0.0.1:27017/LibreChat(通常默认就是这个,不用改)。
3. 安装依赖并构建 (这步需要几分钟)
这是最耗时的一步,它会下载所有需要的库。
# 安装后端和前端的依赖
npm ci
# 构建前端页面
npm run frontend
4. 第一次启动!
npm run backend
- 当看到终端显示
Server listening on port 3080时,打开浏览器访问http://localhost:3080。 - 注册一个管理员账号(第一个注册的就是管理员)。
5.系统配置文件修改
新建librechat,yaml文件并且输入下面信息(和Docker版本一致)
.env 加入信息如下:
HTTP_PROXY=http://127.0.0.1:7897
HTTPS_PROXY=http://127.0.0.1:7897
# 仅开启 Google 和自定义端点(屏蔽默认 OpenAI)
ENDPOINTS=google,custom
# 强制使用后台 Key,禁用前端手动输入(解决 no_user_key 报错)
USER_PROVIDE_OPENAI_API_KEY=false
USER_PROVIDE_GOOGLE_API_KEY=false
USER_PROVIDE_CUSTOM_API_KEY=false
# Google Gemini 官方 Key
GOOGLE_KEY=AIzaSyAkhD12ZjU7h2t9EfF9B_6a2hCElMXClWw
# OpenAI 占位符(防止系统初始化报错)
且注释掉openai的apikey选项:
# OPENAI_API_KEY=user_provided
还是不行报错,显示网络无法连接问题,现在是最后的解决方案:
注释掉.env当中的所有关于代理的配置,clash verge开启 tun模式,这样的话会开启虚拟网卡,本地项目在尝试网络连接的时候会以为自己就是在7897端口运行,而不是代理模式:
再次重启项目,运行成功了:
且如果报错,信息也是变化了
2026-01-08 11:19:18 error: [api/server/controllers/agents/client.js #sendCompletion] Operation aborted [GoogleGenerativeAI Error]: Error fetching from https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-001:streamGenerateContent?alt=sse: [400 Bad Request] Unable to submit request because thinking is not supported by this model. Learn more: https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/gemini
是400报错
- 你的网络(TUN模式)完全修好了! LibreChat 已经成功连上了 Google 的服务器。
- 验证通过了! 你的 API Key 也是正确的,Google 认出了你的身份。
现在的报错 不是网络问题,而是 “参数配置不匹配” 的问题。
其实已经没问题了,跑成功了就可以了。
本地部署遇到问题
安装数据库报错
安装指令
brew tap mongodb/brew
遇到问题
fatal: unable to access 'https://github.com/mongodb/homebrew-brew/': Failed to connect to github.com port 443 after 75084 ms: Couldn't connect to server
Error: Failure while executing; `git clone https://github.com/mongodb/homebrew-brew /opt/homebrew/Library/Taps/mongodb/homebrew-brew --origin=origin --template= --config core.fsmonitor=false` exited with 128.
Warning: No available formula with the name "mongodb-community". Did you mean mongodb-atlas-cli?
看起来是网络的问题,也就是无法链接到服务器,现在就需要思考,我的代理对于这个github的指令是否有用,是否是因为代理在终端没有生效的缘故。
问题解决
核心原因:macOS 的终端(Terminal/iTerm2)默认不走系统代理。 即使你在系统设置里开了代理,或者 Hysteria 客户端开了“系统代理模式”,绝大多数命令行工具(如 curl, git, brew)依然会直连,所以才会报错 Failed to connect。
clash verge的系统代理端口是7897,所以需要进行修改:
# 设置 git 使用 http 代理 (将 7890 换成你的端口)
git config --global http.proxy http://127.0.0.1:7897
git config --global https.proxy http://127.0.0.1:7897
验证: 配置后,再次尝试安装数据库:
brew tap mongodb/brew
(base) kipley@kipleys-MacBook-Air LibreChat % brew tap mongodb/brew
✔︎ JSON API formula.jws.json Downloaded 32.1MB/ 32.1MB
✔︎ JSON API cask.jws.json Downloaded 15.3MB/ 15.3MB
==> **Tapping mongodb/brew**
Cloning into '/opt/homebrew/Library/Taps/mongodb/homebrew-brew'...
remote: Enumerating objects: 1729, done.
remote: Counting objects: 100% (661/661), done.
remote: Compressing objects: 100% (262/262), done.
remote: Total 1729 (delta 569), reused 401 (delta 399), pack-reused 1068 (from 2)
Receiving objects: 100% (1729/1729), 382.72 KiB | 22.51 MiB/s, done.
Resolving deltas: 100% (1070/1070), done.
Tapped 13 formulae (32 files, 493.2KB).
安装成功,继续推进度吧。
一劳永逸解决方法
curl, npm install, wget 等命令都能走代理,可以把代理写入 Shell 配置文件
临时测试(当前窗口生效): 在终端输入
export https_proxy=http://127.0.0.1:7897 http_proxy=http://127.0.0.1:7897 all_proxy=socks5://127.0.0.1:7897
然后测试一下 IP:
curl ipinfo.io
(base) kipley@kipleys-MacBook-Air MCP % export https_proxy=http://127.0.0.1:7897 http_proxy=http://127.0.0.1:7897 all_proxy=socks5://127.0.0.1:7897
(base) kipley@kipleys-MacBook-Air MCP % curl ipinfo.io
{
"ip": "66.42.63.252",
"hostname": "66.42.63.252.vultrusercontent.com",
"city": "Singapore",
"region": "Singapore",
"country": "SG",
"loc": "1.3215,103.6957",
"org": "AS20473 The Constant Company, LLC",
"postal": "627753",
"timezone": "Asia/Singapore",
"readme": "https://ipinfo.io/missingauth"
}**%**
是我服务器的IP地址,没有问题。
永久生效(写入 .zshrc): 每次打开终端都自动连上代理,可以把这两个功能写入配置文件。
使用命令打开配置文件:
nano ~/.zshrc
在文件底部黏贴下面信息:
# 代理开关控制
function proxy_on() {
export http_proxy="http://127.0.0.1:7897"
export https_proxy="http://127.0.0.1:7897"
export all_proxy="socks5://127.0.0.1:7897"
echo -e "\033[32m代理已开启 (Port: 7897)\033[0m"
# 验证一下
curl -I https://www.google.com
}
function proxy_off() {
unset http_proxy
unset https_proxy
unset all_proxy
echo -e "\033[31m代理已关闭\033[0m"
}
最后让配置生效:
source ~/.zshrc
未来需要再终端开启代理的话,就直接使用快捷指令即可:
proxy_on
切换为直连模式
proxy_off
五、LibreChat MCP 插件
最常用的MCP Client:
cursor,Claude Code, Claude Desktop, ChatGPT, Codex, LibreChat,GeminiCLI,vscode,cline,Goose……
| 梯队 | 模型代表 | MCP 适配性 | 评价 |
|---|---|---|---|
| T0 (王者) | Claude 3.5 Sonnet | 🌟🌟🌟🌟🌟 | MCP 的亲爹。目前公认工具调用最强、最准、最稳定的模型。它能处理复杂的工具链,几乎不会弄错参数格式。 |
| T1 (标杆) | GPT-4o / 4o-mini | 🌟🌟🌟🌟🌟 | 行业标准。OpenAI 的 Function Calling 非常成熟,LibreChat 对它的支持也是最完美的。 |
| T1.5 (能用) | DeepSeek-V3 (Chat) | 🌟🌟🌟 | 官方 API 支持工具调用,但在复杂场景下参数提取不如 T0 精准。LibreChat 通过 OpenAI 兼容模式可以支持。 |
| T2 (挑剔) | Gemini 1.5 Pro/Flash | 🌟🌟 | 支持工具,但 API 格式比较独特。LibreChat 做了适配,但稳定性不如前两者,经常出现 “Fetch Error” 或格式错误。 |
| T3 (不支持) | DeepSeek-R1 (Reasoner) |
❌ | 不支持。 这类“深度思考/推理”模型专注于生成思维链(CoT),目前架构上通常屏蔽了外部工具调用,或者因为输出了 <thinking> 标签打乱了工具调用的 JSON 格式。 |
| 所以,现在的我尝试使用的Deepseek和Gemini不是这么合适,需要修改一下API接口和模型了。 |
不过经过尝试,发现Gemini的flash插件勉强可以使用,只不过效果没有这么好,甚至有点笨笨的,似乎是联网功能没有打开。
smithery MCP 插件市场API:177c50e8-db63-43a2-b547-981e645dcdf8
目前为止尝试的插件如下:
还是基本可以模拟Claude Desktop的效果,既然它要收钱,我就自己集成吧,可以自定义API,也可以自定义MCP,挺灵活的,而且模型看下来需要优化一下,ClaudeAPI还是省不了的,这个模型是这方面做的最好的。
这里看到一个Context7插件:
如果你是以下情况,强烈建议尝试:
你经常使用 更新极快 的库(比如
LangChain,Pydantic,Next.js, 或者各种 AI 相关的 SDK)。你发现 AI 经常给你写过时的代码(比如用
v1的写法写v2的库)。你是一个全栈开发者,经常要现学现卖一个新的框架。
六、Ragflow和LangChain简单了解
LangChain快速上手:
https://reference.langchain.com/v0.3/python/langchain/index.html
Ragflow
https://github.com/infiniflow/ragflow?tab=readme-ov-file
为什么需要Ragflow一个专门存储和检索数据的框架,而不是使用插件,像Obsidian一样,嵌入模型即可?
如果数据在 Obsidian 插件里: 只有当你打开 Obsidian 时,这套知识库才能用。如果你想在 VS Code 里写代码时问一下你的知识库,或者在终端里让 Agent 查一下资料,你做不到。数据被“锁”在 Obsidian 这个软件里了。
如果数据在 RAGFlow 里: RAGFlow 是一个独立的 API 服务。
- Obsidian 可以调它。
- 你的 VS Code 插件可以调它。
- 你的 MCP Server 可以调它。
- 你的微信机器人可以调它。
- 你的知识库变成了“中台”,而不是“软件附属品”。
所以对于企业来讲,RAGFLow就像一个数据中台,可以提供相应的API接口来调用,从而打破了各个知识库之前的壁垒。
需要处理大量 PDF、论文、Excel,追求检索高精准度。
RAGFlow的一个特点,就是他的DeepDoc模型技术,会把资料当中的文档提前建立索引,从而把各种类型的文档进行处理,可是插件却只能应付单一格式(markdown)这样的简单情况。
七、批量翻译模型尝试
这里开摆了,明天再做。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 kipleyarch@gmail.com