一个基于 LangGraph 构建的可组合对话工作流,集成 DeepSeek 模型,支持工具调用(查询天气、腾讯翻译、时间查询),提供命令行交互与 RESTful API 两种使用方式,并输出工作流的 Mermaid 图。
- 工作流驱动:使用 LangGraph 的
StateGraph编排结点与边,清晰可视化。 - 模型接入:通过
OpenAISDK 以 DeepSeek API 作为后端。 - 工具调用:内置天气查询、腾讯翻译、当前时间查询。
- 两种使用方式:
- 终端交互:直接运行
_main.py。 - Web API:基于 FastAPI 暴露
/AIchat/接口。
- 终端交互:直接运行
- Mermaid 可视化:自动在
workflow/workflow.mermaid生成工作流图。 - 日志记录:统一记录到
log/app.log(配置见log/logger.py)。
e:\Python\langgraph\聊天机器人\
- _main.py # 交互式主程序,构建工作流并运行
- base_node.py # 基础结点:开始/结束与汇总
- ai_node.py # AI 结点:意图分析与回复生成
- tools.py # 工具层:天气/翻译/时间 + 工具编排
- config.py # DeepSeek 客户端、状态类型、记忆管理
- api/
- api.py # FastAPI 应用与 /AIchat/ 接口
- run_api_server.py # 启动 Uvicorn 的入口
- test_api.py # 简单的本地请求测试脚本
- log/
- logger.py # 日志配置(输出到 log/app.log)
- workflow/
- workflow.mermaid # 运行后自动生成的工作流 Mermaid 文件
- Python 3.10+(建议 3.10 或以上)
- Windows PowerShell(或任意终端)
- 依赖库(pip 安装):
openai、langgraph、fastapi、uvicorn、python-dotenv、requests、tiktoken- 可选:
graphviz(如需将 Mermaid 转为图片)
可以在项目根目录创建并激活虚拟环境,然后安装依赖:
python -m venv .venv
. .\.venv\Scripts\Activate.ps1
pip install -U pip
pip install openai langgraph fastapi uvicorn python-dotenv requests tiktoken
# 可选
pip install graphviz本项目通过 python-dotenv 读取 .env,也可直接使用系统环境变量。推荐在项目根目录创建 .env:
# DeepSeek / OpenAI 兼容 API
OPENAI_API_KEY=你的DeepSeek_API_Key
# WeatherAPI(https://www.weatherapi.com/)
WEATHER_API_KEY=你的WeatherAPI_Key
# 腾讯云翻译(TMT)签名所需
SECRET_ID=你的SecretId
SECRET_KEY=你的SecretKey备注:
- DeepSeek 默认 base_url 为
https://api.deepseek.com,如需自定义可在create_deepseek_client传参。- 未配置对应 Key 的工具将不可用或报错,请按需配置。
在项目根目录执行:
python _main.py交互指令:
- 输入任意内容与 AI 对话
- 输入
show显示历史对话 - 输入
clear清空历史对话 - 输入
quit退出程序
运行后会自动在 workflow/workflow.mermaid 生成最新工作流图。
在项目根目录执行:
python api\run_api_server.py默认监听:http://127.0.0.1:8000
- 接口:
POST /AIchat/ - 请求体:
{
"user_input": "今天天气如何?"
}- 响应体:
{
"ai_reply": "..."
}快速测试(PowerShell):
python api\test_api.py或使用 Invoke-RestMethod:
$body = @{ user_input = "帮我把下面英文翻译成中文:Hello World" } | ConvertTo-Json
Invoke-RestMethod -Method Post -Uri http://127.0.0.1:8000/AIchat/ -Body $body -ContentType "application/json"- 入口结点:
start analyze_input:调用 DeepSeek 对用户输入进行意图分析,决定是否调用工具- 条件分支:
need_tool→call_tool或直接generate_response call_tool:顺序执行配置在state.tool_usage的工具,结果写入state.tool_resultsgenerate_response:结合主题提示与工具结果生成流式回复,并计入会话历史end:汇总 token 使用,写入state.summary
Mermaid 文件在运行时生成,可在任意支持 Mermaid 的查看器中展示。
- 日志目录:
log/ - 日志文件:
log/app.log - 日志内容包含:结点进入/完成、工具调用、异常信息、token 统计等。
- 初始化报错 “未设置 OPENAI_API_KEY”:请在
.env中配置OPENAI_API_KEY,或设置为系统环境变量。 - 工具不可用:确保相应的 Key(如
WEATHER_API_KEY、SECRET_ID/SECRET_KEY)已配置。 - 请求 500:查看控制台与
log/app.log,检查上游 API 与网络连通性。