Files
ZNJJ-api-server/docs/langgraph-minimal-slice.md
2026-07-27 17:21:29 +08:00

83 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# LangGraph 最小开发纵切
> 状态:仅用于本地开发和测试
> 日期2026-07-27
## 启用
在被 Git 忽略的 `.env.local` 中配置:
```text
ZNJJ_ENVIRONMENT=development
AGENT_BACKEND=langgraph
LANGGRAPH_CHECKPOINTER=memory
LLM_API_KEY=...
LLM_BASE_URL=https://api.openai.com/v1
LLM_MODEL=...
LLM_TIMEOUT_SECONDS=60
LLM_MAX_RETRIES=2
```
不设置 `AGENT_BACKEND` 时默认使用 FastGPT。
## 当前调用链
```text
/chat
-> ChatBackend
-> LangGraphBackend
-> StateGraph
-> generate_response
-> OpenAI-compatible LLM
-> ChatResult
-> 现有非流式/SSE API Adapter
```
`InMemorySaver` 使用 `sessionId` 作为 `thread_id`,同一进程内同一 session
可以恢复 `turn_count` 等图状态;不同 session 相互隔离。
## 当前已有能力
- FastGPT/LangGraph 后端配置切换。
- 最小 Pydantic Settings 和条件化启动校验。
- 实际使用 LangGraph `StateGraph`
- 开发/测试使用 `InMemorySaver`
- OpenAI-compatible LLM 节点。
- 非流式 `/chat` 适配。
- 通过完整结果桥接现有 SSE`formUpdate` 先于文本发送。
- Fake LLM 下的多轮 thread 隔离测试。
## 明确限制
当前图只有一个模型节点,目的是尽早建立可执行骨架。以下尚未实现:
- 领域状态、输入事件和确定性路由节点;
- 状态码枚举及迁移合法性校验;
- 单车/双车拍照状态机;
- 字段提取、验证和真实 `formUpdate`
- 模型 token 级流式输出;
- PostgreSQL checkpointer
- session 并发、版本和幂等;
- `/set_info``/get_info` 的业务状态迁移。
因此:
- `LANGGRAPH_CHECKPOINTER=postgres` 当前会启动失败;
- staging/production 禁止使用 memory checkpointer
- `/set_info``/get_info``/delete_session` 暂时仍需要 FastGPT 配置;
- 不得把当前 LangGraph backend 接入生产流量。
## 下一步
直接在现有图中加入 Phase 5 的纯确定性骨架:
1. `AccidentState`、输入事件和状态枚举;
2. state prefix parser 与迁移 validator
3. `normalize_input``route_phase`
4. 单车/双车拍照事件推进;
5. 无回复和澄清计数;
6. 对应参数化 Graph 测试。
这些节点完成后再接 PostgreSQL 和业务状态 repository。