API tương thích LangGraph¶
Superstep trả lời một phần của
LangGraph Agent Server API
tại /api/lg. Code viết cho LangGraph, dùng client langgraph-sdk chính thức
hoặc RemoteGraph, chạy được workflow Superstep mà không cần sửa: chỉ cần trỏ
tới studio của bạn thay vì một Agent Server.
| LangGraph | Superstep |
|---|---|
| Assistant / graph | Một workflow. assistant_id và graph_id là id của workflow (trong URL của editor). |
| Thread | Một chuỗi run của một workflow. State của thread là state của run gần nhất. |
| Run | Một run API của phiên bản đã lưu mới nhất. Run hiện trong lịch sử của workflow. |
| Interrupt | Một node Human đang chờ câu trả lời. |
Kết nối¶
Dùng token của workflow (chỉ workflow đó) hoặc token đăng nhập của bạn (mọi
workflow bạn được chạy). SDK gửi api_key qua header x-api-key;
X-Workflow-Token và Authorization: Bearer cũng dùng được.
from langgraph_sdk import get_client
client = get_client(url="https://superstep.example.com/api/lg", api_key="wft_...")
assistants = await client.assistants.search()
thread = await client.threads.create(metadata={"customer": "c-42"})
result = await client.runs.wait(thread["thread_id"], "example", input={"message": "Đơn A100 đang ở đâu?"})
print(result["answer"])
Stream run theo từng node:
async for part in client.runs.stream(thread["thread_id"], "example",
input={"message": "xin chào"}, stream_mode=["updates", "values"]):
print(part.event, part.data)
Hoặc dùng workflow như một node trong graph LangGraph của bạn:
from langgraph.pregel.remote import RemoteGraph
support = RemoteGraph("example", url="https://superstep.example.com/api/lg", api_key="wft_...")
print(support.invoke({"message": "xin chào"}))
Node Human¶
Khi run tới một node Human, thread chuyển sang interrupted và runs.wait
trả về state kèm __interrupt__:
out = await client.runs.wait(thread["thread_id"], wid, input={"message": "hoàn tiền đơn A100"})
print(out["__interrupt__"][0]["value"]) # {"node": "ask", "question": "Duyệt hoàn tiền ...?"}
done = await client.runs.wait(thread["thread_id"], wid, command={"resume": "approved"})
Câu trả lời là văn bản, hoặc true / false cho duyệt / từ chối, như trong
hộp thư Duyệt bởi người. Run đang chờ cũng hiện trong hộp
thư và các kênh duyệt, nên một người có thể trả lời ở đó.
Những gì được hỗ trợ¶
| Endpoint | Ghi chú |
|---|---|
POST /assistants/search, GET /assistants/{id} |
Các workflow bạn được chạy |
GET /assistants/{id}/graph, GET /assistants/{id}/schemas |
Canvas dưới dạng graph LangGraph; schema từ các trường state |
POST /threads, GET /threads/{id}, POST /threads/search, DELETE /threads/{id} |
|
GET /threads/{id}/state, POST /threads/{id}/history |
History có một mục: state hiện tại |
POST /threads/{id}/runs, /runs/wait, /runs/stream |
Không cần thread: POST /runs, /runs/wait, /runs/stream |
GET /threads/{id}/runs, GET /threads/{id}/runs/{run_id}, .../join, .../cancel |
Cần biết:
- Run mới trên một thread bắt đầu từ state của thread, với input mới đè lên.
Mỗi thread chạy một workflow và mỗi lúc một run (
409 THREAD_BUSY). stream_modehỗ trợvalues(mặc định) vàupdates. Các chế độ khác không gửi gì.- Chưa hỗ trợ: tạo hoặc sửa assistant, cron, store, sửa state của thread,
checkpoint theo id,
interrupt_before/interrupt_after. - Lỗi dùng envelope lỗi và mã HTTP như thường lệ.
LangSmith Studio và Agent Chat UI¶
Chưa kiểm chứng. Cả hai chạy trên trình duyệt ở origin khác, nên studio phải
cho phép origin đó trong STUDIO_CORS_ORIGINS, và chúng gọi những endpoint mà
phần API này chưa có (lịch sử checkpoint, phiên bản assistant). Agent Chat UI
còn cần một danh sách messages trong state. Để làm việc với workflow trong
Studio, hãy xuất nó thành dự án LangGraph và chạy
langgraph dev.