examples/whyhow
paradox e584b24d9a
update: 更新文件 .env.sample
Signed-off-by: paradox <jiatongli@stu.xidian.edu.cn>
2025-09-28 20:20:22 +08:00
..
docs OSPP project 2025-09-23 19:12:29 +08:00
src/whyhow_api OSPP project 2025-09-23 18:54:28 +08:00
.env.sample update: 更新文件 .env.sample 2025-09-28 20:20:22 +08:00
README.md OSPP project 2025-09-23 18:54:28 +08:00
requirements.txt OSPP project 2025-09-23 18:54:28 +08:00

README.md

openGauss向量数据库对接知识工程最佳实践

WhyHow 与openGauss向量数据库适配包括简单知识文档导入、对接大模型完成RAG端到端验证。

本项目旨在实现:

  • 灵活的数据模型: 将 WhyHow 的知识图谱数据模型对接 openGauss充分利用其关系型和图数据库的双重能力。
  • 端到端 RAG: 结合主流的嵌入模型和大型语言模型LLMs实现从文档摄取、知识抽取、图谱构建到智能问答的完整 RAG 工作流。

下载与部署

1. 所需环境

  • 2vCPUs | 4GiB | s7.large.2 CentOS 7.6 64bit
  • Docker / Docker Compose
  • Python 3.11强烈建议用conda创建虚拟环境
  • openGauss 3.xdocker部署
  • OpenAI API Key用于 Embedding/LLM

2. 下载代码

git clone https://gitcode.com/paradox/whyhow_opengauss.git
cd knowledge-graph-studio
pip install -r requirements.txt

3. openGauss 部署

  1. 拉取docker镜像
docker pull enmotech/opengauss:latest

Tips建议服务器上面挂个代理或者本地拉取我本地有代理导入服务器

  1. 创建opengauss容器并启动
docker run -d --name opengauss \
  -e GS_PASSWORD='Enmo@123' \
  -e GAUSSHOME=/usr/local/opengauss \
  -e LD_LIBRARY_PATH=/usr/local/opengauss/lib \
  -e PATH=/usr/local/opengauss/bin:$PATH \
  -p 5432:5432 enmotech/opengauss:3.1.0

后续开机只需要启动就好

docker start opengauss
  1. 创建表这里用的gsql
export GAUSSHOME=/usr/local/opengauss
export LD_LIBRARY_PATH=$GAUSSHOME/lib:$LD_LIBRARY_PATH
export PATH=$GAUSSHOME/bin:$PATH
gsql -d postgres -U gaussdb -W Enmo@123

4. 配置环境变量

cp .env.sample .env

WHYHOW__EMBEDDING__OPENAI__API_KEY=<你的openai api key>
WHYHOW__GENERATIVE__OPENAI__API_KEY=<你的openai api key>

WHYHOW__OPENGAUSS__HOST=<数据库的host>
WHYHOW__OPENGAUSS__PORT=<数据库docker映射出来的端口>5432
WHYHOW__OPENGAUSS__DATABASE=<数据库名称>
WHYHOW__OPENGAUSS__USER=<数据库用户名>
WHYHOW__OPENGAUSS__PASSWORD=<数据库密码>
WHYHOW__OPENGAUSS__ECHO_SQL=<是否打印 SQL 语句>

# e.g.
# WHYHOW__OPENGAUSS__HOST=127.0.0.1
# WHYHOW__OPENGAUSS__PORT=5432
# WHYHOW__OPENGAUSS__DATABASE=postgres
# WHYHOW__OPENGAUSS__USER=gaussdb
# WHYHOW__OPENGAUSS__PASSWORD=Enmo@123
# WHYHOW__OPENGAUSS__ECHO_SQL=true

5. 创建数据表(见适配文档)

6. 启动API

当所有的配置完成就可以启动API服务器开始服务

uvicorn whyhow_api.main:app --host 0.0.0.0 --port 8000 --reload

Quickstart

1. 健康检查

curl -s -H "x-api-key: $KEY" "http://127.0.0.1:8000/db" | jq

2. 创建工作区

cat <<JSON | curl -s -X POST \
  -H "x-api-key: $KEY" -H "Content-Type: application/json" \
  --data-binary @- "http://127.0.0.1:8000/workspaces" | jq
{
  "name": "PG-demo",
  "description": "demo ws"
}
JSON

export WS_ID=xxx

3. 创建chunks

cat >/tmp/chunks_more.json <<'JSON'
{
  "chunks_in": [
    {
      "content": "openGauss 是企业级开源数据库,兼容 PostgreSQL具备高可用与高性能。",
      "tags": ["db","opengauss"],
      "user_metadata": { "lang": "zh" }
    },
    {
      "content": "WhyHow 支持文档分块、图谱抽取与 RAG 检索问答,便于企业知识应用。",
      "tags": ["whyhow","rag"],
      "user_metadata": { "lang": "zh" }
    }
  ]
}
JSON

curl -s -X POST \
  -H "x-api-key: $KEY" \
  -H "Content-Type: application/json" \
  --data-binary @/tmp/chunks_more.json \
  "http://127.0.0.1:8000/chunks?workspace_id=$WS_ID" | jq

4. RAG查询

curl -s -G -H "x-api-key: $KEY" \
--data-urlencode "workspace_id=$WS_ID" \
--data-urlencode "text=openGauss 的优势是什么?" \
--data-urlencode "top_k=5" \
"http://127.0.0.1:8000/queries/rag" \
| jq '{answer, retrieved:(.top_chunks // [])}'