Skip to content

plae-tljg/Graph_Chatbot

Repository files navigation

智能图谱对话助手

一个基于图结构的智能对话导航系统,支持语音识别、自然语言处理和智能图导航。虽然最初设计用于电话客服场景(通过Asterisk集成),但其核心是一个通用的图导航框架,可用于任何需要结构化对话流程的场景。

特性

  • 🎯 图结构导航:基于图数据结构的对话流程管理,支持复杂的节点关系和导航规则
  • 🗣️ 语音识别:支持ASR(自动语音识别)和语音校正(适用于电话场景)
  • 🤖 智能路由:基于LLM的智能对话分类和图节点导航
  • 📊 管理界面:Web管理界面,支持节点、边、规则、训练数据等图结构管理
  • 💾 数据持久化:支持PostgreSQL数据库和JSON文件两种存储方式

快速开始

前置要求

  • Python 3.10+
  • PostgreSQL
  • LLM服务(本地或远程)

安装

# 创建虚拟环境
python -m venv test_env
source test_env/bin/activate  # Linux/Mac
# 或 test_env\Scripts\activate  # Windows

# 安装依赖
pip install -r requirements.txt

配置

  1. 配置数据库:编辑 data/config.json 中的数据库连接信息
  2. 配置LLM:在 data/config.json 中设置LLM提供商和API地址
  3. 初始化数据库:
python -m src.DAL.db.db_clients.create_tables

运行

# 启动Web服务(包含管理界面和API)
python -m src.api.app
# 访问 http://localhost:8003

自定义业务数据

本项目是一个通用框架,所有业务相关的数据都可以自定义:

1. 图节点数据 (data/phone_node.json)

定义图结构中的节点(对话状态)、节点间的边(导航关系)、响应内容、关键词等。当前包含示例数据(产品咨询、技术支持、订单服务等),您可以根据实际业务需求修改图结构。

2. 训练数据生成

我们提供了训练数据生成工具,主要用于他人如果想基于本项目的数据结构训练自己的LLM时使用。本项目本身不直接使用这些训练数据,而这些工具仅作为参考和辅助。如果您有相关需求,可以参考如下工具:

  • src/tools/generate_training_data.py - 结构化训练数据模板生成工具
  • src/tools/training_data_editor.py - 训练数据编辑器(Web界面,用于手动编辑与验证)

注意:当前的训练数据模板均为通用客服场景示例,仅供参考。若要用于您自己的业务模型训练,请务必:

  1. 修改 generate_training_data.py 中的模板,使其符合具体业务需求
  2. 利用训练数据编辑器进行人工校对和完善

3. 分类规则

LLM分类规则在 src/models/llm/chatglm2_adapter.py 中定义。当前是通用客服分类(产品咨询、技术支持、订单服务等),您需要根据实际业务调整分类规则和关键词。

4. ASR校正词汇

编辑 data/words.json 添加业务相关的词汇和缩写词,用于ASR识别校正。

项目结构

Graph_Chatbot/
├── src/                    # 核心源代码(图导航系统)
│   ├── api/               # Web API和管理界面
│   ├── DAL/               # 数据访问层(数据库和JSON)
│   │   └── db/
│   │       └── db_clients/
│   │           ├── phone_node.py    # 图节点数据访问(节点)
│   │           └── node_edge.py     # 图边数据访问(节点间关系)
│   ├── domain/            # 业务逻辑层(图导航逻辑)
│   ├── models/            # LLM模型适配器
│   ├── services/          # 服务层(ASR校正、语音转换等)
│   └── utils/             # 工具函数
├── servers/               # 独立服务器(可选,用于特定集成场景)
│   ├── fastagi/           # FastAGI服务器(Asterisk集成)
│   └── asr/               # ASR服务器(独立语音识别服务)
├── data/                  # 数据文件
│   ├── phone_node.json    # 图节点数据(节点和边的定义,可自定义)
│   ├── config.json        # 配置文件
│   └── words.json         # ASR校正词汇(可自定义)
├── scripts/               # 脚本工具
└── docs/                  # 文档

开发文档

详细的开发文档请参考 README_dev.md

核心概念

本项目基于图结构来管理对话流程:

  • 节点(Node):表示对话中的一个状态或选项
  • 边(Edge):表示节点之间的导航关系
  • 导航规则:基于LLM和关键词匹配的智能路由逻辑

虽然项目名称和部分代码中仍使用"phone"相关命名(保持向后兼容),但系统的核心是一个通用的图导航框架,可以应用于任何需要结构化对话流程的场景。

服务器组件(可选)

项目核心是一个独立的图导航系统(src/),可以通过Web API使用。对于特定的集成场景,项目还提供了可选的服务器组件:

  • FastAGI服务器 (servers/fastagi/):用于与Asterisk电话系统集成
  • ASR服务器 (servers/asr/):独立的语音识别服务(如果不需要集成到主系统)

这些服务器组件是可选的,核心图导航系统可以独立运行。

注意事项

  • 本项目为通用框架,不包含任何特定业务数据
  • 所有示例数据(电话号码、网址等)均为示例,需要替换为实际数据
  • 训练数据生成工具需要根据实际业务场景进行修改
  • 建议在使用前仔细审查和修改所有配置文件

License

pass

About

projects for chatting along graph with external LLM service

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published