当前位置: 首页 > news >正文

Postgres mcp server

rag系列文章目录

文章目录

  • rag系列文章目录
  • 前言
  • 一、传统RAG遇到的困难
  • 二、Postgres mcp server介绍
  • 三、交互过程
  • 四、不足
  • 总结


前言

传统 RAG(Retrieval-Augmented Generation),通过对文本切片向量化,然后召回相似的文本块,来增强大模型的知识。最近MCP爆火,MCP + database作为一种新型的检索增强,也越来越受到人们的关注,今天介绍一种常用的postgres mcp server,说明大模型通过mcp检索的过程。


一、传统RAG遇到的困难

RAG从出现到今天,也经过了几年的时间,虽然越来越出色,但是仍然有一些问题,比如:

1、 生成内容不完整:

由于RAG处理的是文档的切片,而这些切片的局部性意味着它无法看到整个文档的信息,因此在回答诸如“列出XXX”或“概括XXX”之类的问题时,答案通常不完整。也就是说,它不擅长总结性的问题。

2、 缺乏整体视角:

RAG无法确定回答一个问题需要多少个切片,也无法确定文档之间的联系。例如,在法律条款中,新的解释可能会覆盖旧的解释,但RAG无法确定哪个是最新的。

3、 多轮检索能力弱:

RAG 缺乏执行多轮、多查询条件检索的能力。

以上问题,在MCP+database场景下,可以通过多条件sql查询来增强检索,并且可以多轮变换sql进行优化查询。

二、Postgres mcp server介绍

在github上面有大量的mcp server,可以进行下载,postgres mcp server地址参考。

使用各种ai工具(比如Claude desktop或者cline等等),可以直接配置,配置如下:

{"mcpServers": {"postgres": {"command": "docker","args": ["run", "-i", "--rm", "mcp/postgres", "postgresql://host.docker.internal:5432/mydb"]}}
}

简单介绍下,这个mcp server,需要本地安装docker,并且下载mcp/postgres镜像,在使用这个mcp时,使用studio协议,也就是会直接命令行操作它,使用标准输入输出进行交互。交互命令:

docker run -i --rm mcp/postgres:latest postgresql://aaa:bb@localhost:5432/postgresdb

这里的- -rm参数,代表执行完毕后,docker容器是不保留的,通过docker ps -a查询不到。

通过上面的方式,支持mcp的工具都可以来操作postgres 数据库了,那么它是怎么操作的呢?下面做个演示,供大家理解。

  • 查询这个mcp server里面的工具
docker run -i --rm mcp/postgres:latest postgresql://aaa:bb@localhost:5432/postgresdb <<< '{"jsonrpc":"2.0","method":"tools/list","params":{},"id":1}'

这个命令的含义是:启动mcp server容器进行交互(-i参数),将<<<后面的字符串作为输入,这个输入参数是指查询mcp server里面的工具。
结果如下:

{"result": {"tools": [{"name": "query","description": "Run a read-only SQL query","inputSchema": {"type": "object","properties": {"sql": {"type": "string"}}}}]},"jsonrpc": "2.0","id": 1
}
  • 执行sql,查询postgres里面的数据
    Mcp client是如何调用postgres数据库,进行查询的呢?执行命令
docker run -i --rm mcp/postgres:latest postgresql://aaa:bb@localhost:5432/postgresdb <<< '{"method":"tools/call","params":{"name":"query","arguments":{"sql":"SELECT name FROM student_info where age =  18"}},"jsonrpc":"2.0","id":1}'

这个命令的含义是:查询postgres,sql是:SELECT name FROM student_info where age = 18
Mcp返回如下:

{"result": {"content": [{"type": "text","text": "[\n  {\n    \"name\": \"张三\"\n  }\n]"}],"isError": false},"jsonrpc": "2.0","id": 1
}

查询结果显示,年龄等于18的学生是张三。

三、交互过程

上面演示了,直接通过studio方式,调用mcp server。整个交互过程是怎么样的呢?
在这里插入图片描述

四、不足

Mcp+database这种检索增强方案,也有一定的不足。

1、 检索数据过量。因为sql是通过大模型生成的,可能存在查询数据过多的问题。如果查询一次性返回大量数据,将会消耗大量 token,甚至可能导致 MCP 客户端卡死。

2、 Text2sql的能力问题。Mcp+database该方案,依赖生成可执行的sql,如果prompt不佳,可能导致生成的sql存在问题。

总结

从上面看出,mcp+database方案,主要解决的是结构化数据的查询问题,是对RAG的一个补充,RAG更侧重于非结构化的数据处理问题。它并不会取代RAG,而是会完善RAG,在特定的领域,比如完全依赖于结构化数据的场景,可能会只需要mcp+database。

参考:文档1、文档2

相关文章:

  • Text models —— BERT,RoBERTa, BERTweet,LLama
  • java中的Servlet1.x详解
  • Python训练第二十九天
  • DeepSeek系列核心技术与贡献总结
  • PointNet++:点云处理的升级版算法
  • 最长递增子序列
  • C2S-Scale方法解读
  • 信奥赛-刷题笔记-栈篇-T2-P3056括号调整问题0518
  • LeetCode算 法 实 战 - - - 双 指 针 与 移 除 元 素、快 慢 指 针 与 删 除 有 序 数 组 中 的 重 复 项
  • LeetCode 394. 字符串解码详解:Java栈实现与逐行解析
  • 【甲方安全建设】Python 项目静态扫描工具 Bandit 安装使用详细教程
  • 【QGIS二次开发】空间分析-10
  • 力扣1991:找到数组的中间位置(前缀和)
  • SOC-ESP32S3部分:快速烧录上手使用
  • OpenCL C C++核心对象与属性对比
  • BiRefNet V3版 - 一个高精度的高分辨率图像抠图模型,AI“抠图之王” 支持50系显卡 本地一键整合包下载
  • 【第三十六周】LoRA 微调方法
  • AM32电调学习解读七:其他代码文件介绍
  • 001 嵌入式软件开发工程师实习篇面试——首战总结
  • ‘https://start.aliyun.com/‘ 的初始化失败 请检查 URL、网络和代理设置。
  • 如何做微信商城网站/seo在线培训
  • 润州网站建设/培训中心
  • 成都网站搜索优化/杭州谷歌推广
  • vr 做的网站/成都网站建设技术支持
  • 网站制作真人游戏娱乐平台怎么做/如何设计推广方案
  • 张家港网站优化/有什么好的推广平台