Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

简易单智能体携程助手 (Simple Single-Agent Ctrip Assistant)

项目概述

本项目是一个基于 LangGraph 构建的**简易单智能体(Simple Single-Agent)**旅行服务对话系统。采用单智能体架构,通过一个核心 AI 助手统一处理所有旅行相关任务。

该系统模拟携程/瑞士航空公司的客户服务助手,能够处理用户的航班查询、酒店预订、租车服务和旅游推荐等需求。通过集成大语言模型(DeepSeek)和多种工具,系统可以理解用户意图,执行相应的数据库操作,并提供智能化的旅行建议。

单智能体架构特点

  • 单一决策中心:一个 AI 助手负责所有任务调度和决策
  • 工具集合:助手可调用多种工具(航班/酒店/租车/搜索)
  • 状态管理:通过 LangGraph 管理对话状态
  • 循环处理:支持多轮对话和工具链式调用

功能特性

1. 航班服务

  • 查询用户航班信息:根据乘客ID获取机票、航班和座位信息
  • 搜索航班:按出发地、目的地、时间范围搜索可用航班
  • 改签机票:将机票更新到新航班(需满足3小时以上时间差)
  • 取消机票:验证用户身份后取消机票

2. 酒店服务

  • 搜索酒店:按位置、名称搜索酒店
  • 预订酒店:通过酒店ID进行预订
  • 更新预订:修改入住/退房日期
  • 取消预订:取消酒店预订

3. 租车服务

  • 搜索租车:按位置、公司名称搜索租车服务
  • 预订租车:通过租车ID进行预订
  • 更新预订:修改租赁开始/结束日期
  • 取消预订:取消租车服务

4. 旅游推荐

  • 搜索推荐:按位置、名称、关键词搜索旅游推荐
  • 预订项目:预订旅游活动
  • 更新详情:修改旅游项目详情
  • 取消预订:取消旅游活动

5. 智能问答

  • 政策查询:基于向量检索的公司政策FAQ查询
  • 网络搜索:通过Tavily搜索获取实时信息
  • 多轮对话:支持上下文感知的连续对话

技术栈

技术 用途
LangGraph 单智能体工作流编排
LangChain LLM应用开发框架
DeepSeek 大语言模型(支持工具调用)
SQLite 本地数据库存储
Pandas 数据处理和分析
NumPy 向量计算
python-dotenv 环境变量管理
Tavily 网络搜索API

项目架构

ctrip_assistant/
├── graph_chat/              # 对话流程图核心模块
│   ├── 第一个流程图.py       # 主程序入口
│   ├── assistant.py         # AI助手节点实现
│   ├── state.py             # 状态定义
│   ├── draw_png.py          # 流程图可视化
│   └── log_utils.py         # 日志工具
├── tools/                   # 工具模块
│   ├── flights_tools.py     # 航班相关工具
│   ├── hotels_tools.py      # 酒店相关工具
│   ├── car_tools.py         # 租车相关工具
│   ├── trip_tools.py        # 旅游推荐工具
│   ├── retriever_vector.py  # 向量检索工具
│   ├── tools_handler.py     # 工具错误处理
│   ├── init_db.py           # 数据库初始化
│   └── location_trans.py    # 城市名称转换
├── logs/                    # 日志目录
├── travel_new.sqlite        # 主数据库
├── travel2.sqlite           # 数据库备份
├── order_faq.md             # FAQ知识库
└── requirements.txt         # 依赖列表

安装说明

1. 环境要求

  • Python 3.9+
  • Conda 或虚拟环境(推荐)

2. 创建虚拟环境

# 使用conda创建环境
conda create -n ctrip_assistant python=3.11
conda activate ctrip_assistant

# 或使用venv
python -m venv venv
# Windows:
venv\Scripts\activate
# Linux/Mac:
source venv/bin/activate

3. 安装依赖

pip install -r requirements.txt

4. 配置环境变量

项目使用 .env 文件管理 API 密钥:

  1. 复制 .env 文件并填写你的密钥:
cp .env .env.local
  1. 编辑 .env.local 文件:
# DeepSeek 配置(主用)
DEEPSEEK_API_KEY=your_deepseek_api_key
DEEPSEEK_BASE_URL=https://api.deepseek.com

# Tavily 搜索配置
TAVILY_API_KEY=your_tavily_key
  1. 确保 .env.local 已添加到 .gitignore,不要提交到代码仓库。

运行说明

方式一:模块方式运行(推荐)

cd d:\ai大模型应用开发\马士兵资料\实战项目--代码理解\ctrip_assistant
$env:PYTHONPATH = "d:\ai大模型应用开发\马士兵资料\实战项目--代码理解\ctrip_assistant"
python graph_chat\第一个流程图.py

方式二:直接运行

cd d:\ai大模型应用开发\马士兵资料\实战项目--代码理解\ctrip_assistant
python -m graph_chat.第一个流程图

交互示例

运行后会进入交互模式:

用户:查询我的航班信息
==================================
1.  助手  : 我来为您查询航班信息...
==================================

用户:帮我预订北京的酒店
==================================
2.  助手  : 正在为您搜索北京的酒店...
==================================

用户:q
对话结束,拜拜!

数据库说明

项目使用 SQLite 数据库存储以下数据:

  • flights: 航班信息
  • tickets: 机票信息
  • ticket_flights: 机票-航班关联
  • boarding_passes: 登机牌信息
  • hotels: 酒店信息
  • car_rentals: 租车服务信息
  • trip_recommendations: 旅游推荐信息
  • bookings: 预订记录

数据库初始化时会自动将日期更新为当前时间,确保测试数据的有效性。

核心组件说明

1. State(状态)

class State(TypedDict):
    messages: Annotated[list[AnyMessage], add_messages]

状态对象在对话过程中传递,包含消息历史。

2. Assistant(助手节点)

CtripAssistant 类是核心对话节点,负责:

  • 调用LLM处理用户输入
  • 管理工具调用
  • 处理无效响应的重试

3. Tools(工具)

所有工具使用 @tool 装饰器定义,包括:

  • 数据库查询工具
  • 预订/更新/取消操作工具
  • 向量检索工具
  • 网络搜索工具

4. 单智能体工作流程

┌─────────────────────────────────────────────────────────┐
│                    单智能体架构                          │
├─────────────────────────────────────────────────────────┤
│                                                         │
│   用户输入 ──→ ┌─────────────┐                         │
│                │   START     │                         │
│                └──────┬──────┘                         │
│                       ↓                                 │
│                ┌─────────────┐    工具调用结果          │
│           ┌──→ │  Assistant  │ ←────────────────┐      │
│           │    │  (单智能体)  │                  │      │
│           │    └──────┬──────┘                  │      │
│           │           ↓ 需要工具?               │      │
│           │    ┌─────────────┐                  │      │
│           │    │  条件判断    │                  │      │
│           │    └──────┬──────┘                  │      │
│           │           ↓ 是                      │      │
│           │    ┌─────────────┐                  │      │
│           └────┤   Tools     │ ────────────────┘      │
│                │ (工具集合)  │                         │
│                └─────────────┘                         │
│                       ↓ 否                             │
│                ┌─────────────┐                         │
│                │  返回用户    │                         │
│                └─────────────┘                         │
│                                                         │
└─────────────────────────────────────────────────────────┘

工作流说明:
1. 单智能体(Assistant)接收用户输入
2. 智能体决定:直接回复 或 调用工具
3. 如需工具,执行后结果返回给智能体
4. 智能体基于工具结果继续处理或回复
5. 支持多轮工具调用循环

开发说明

添加新工具

  1. tools/ 目录下创建新的工具文件
  2. 使用 @tool 装饰器定义工具函数
  3. assistant.py 中导入并添加到 part_1_tools 列表

修改提示词

编辑 assistant.py 中的 primary_assistant_prompt 变量。

数据库迁移

修改 tools/init_db.py 中的数据库操作逻辑。

单智能体 vs 多智能体

本项目采用单智能体架构,适合以下场景:

  • ✅ 任务类型相对集中(旅行服务)
  • ✅ 工具调用逻辑清晰
  • ✅ 对话流程可控
  • ✅ 开发和维护简单

多智能体架构适合更复杂的场景:

  • 多个独立业务领域需要专门处理
  • 需要智能体之间的协作和委托
  • 任务需要分解给不同专业智能体

注意事项

  1. API密钥安全:使用 .env 文件管理敏感信息,不要提交到仓库
  2. 数据库路径:工具模块中使用相对路径 ../travel_new.sqlite
  3. 时区处理:航班时间使用 Etc/GMT-3 时区
  4. 改签限制:只能改签到起飞时间3小时以后的航班
  5. 单智能体局限:所有决策由一个智能体处理,复杂场景可能需要多智能体架构

许可证

本项目仅供学习参考使用。

联系方式

如有问题或建议,欢迎提交 Issue 或 Pull Request。

About

本项目是一个基于 **LangGraph** 构建的**简易单智能体(Simple Single-Agent)**旅行服务对话系统。采用单智能体架构,通过一个核心 AI 助手统一处理所有旅行相关任务

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages