langchain-core, vì vậy việc instrument một cái sẽ instrument cái kia.
Cài đặt
failproofai-sdk[langchain].
Được hỗ trợ: langchain-core 1.4.7 đến 2.0, langgraph 1.2 đến 2.0. Ngoài phạm vi đó, adapter vẫn cài đặt và cảnh báo một lần.
Instrument
instrument() đăng ký một tracer thông qua langchain_core.tracers.context.register_configure_hook. LangChain tiêm nó vào mọi trình quản lý callback mà nó xây dựng, vì vậy các đồ thị, công cụ và mô hình được ghi lại mà không cần thay đổi bất kỳ trang gọi nào — bao gồm những cái bên trong các thư viện mà bạn không viết.
Những gì được ghi lại
Một nút trở thành hook, không phải agent lồng nhau.
agent_id là khía cạnh chính trên mọi bề mặt dashboard — việc nâng cao retrieve, grade_documents và should_continue thành các agent sẽ làm ngập nó, và gắn nhãn phiên sau bất kỳ nút nào tình cờ chạy trước tiên.
Các span hook được hiển thị theo cách tương tự và vẫn cung cấp cho bạn chế độ xem độ trễ trên mỗi nút.
Đặt tên các nút tùy thích của bạn. Một lần chạy của nút được xác định bởi hình dạng của nó — một lần chạy không phải lá mang thẻ bước riêng của LangGraph — không bao giờ bằng tên của nó.
Đặt tên một nút theo tên của thứ mà nó chạy từng làm cho sự kiện của thứ đó biến mất. Nó không còn làm như vậy nữa.
Phát trực tuyến
.stream() và .astream() không phát ra các sự kiện trên mỗi token. Chúng gập vào model_response đóng:
Số lượng token trên phản hồi được phát trực tuyến
Vấn đề riêng biệt, và dễ bị bỏ lỡ: OpenAI chỉ gửi sử dụng trên phản hồi được phát trực tuyến khi được yêu cầu.model_response đến mà không có số lượng token.
Ví dụ
Đặt tên span của bạn
Theo mặc định, span gốc lấy tên của chính đồ thị. Bọc nó để có được nhãn mà bạn chọn:parent_id:
agent_id có độ cardinality thấp. Hãy sử dụng một vai trò hoặc tên nút, không bao giờ một UUID hoặc một chuỗi cho mỗi lần chạy.
Kiểm soát phiên
ID phiên giải quyết theo thứ tự này, trận đấu đầu tiên thắng:instrument("langchain", session_id=...)config={"metadata": {"failproofai_sdk_session_id": ...}}- Phạm vi
failproofai_sdk.session()bao quanh metadata["session_id"],metadata["conversation_id"], hoặcmetadata["thread_id"]- ID chạy gốc
Tùy chọn
capture_content=False cho dữ liệu được quy định. Cấu trúc, thời gian, số lượng token, tên công cụ và kết quả vẫn được ghi lại; nội dung tin nhắn không.
include_chains chỉ áp dụng cho các lần chạy lồng nhau. Một runnable mà bạn gọi ở cấp độ top level là root của phiên, vì vậy nó trở thành span agent thay vì cặp hook, và việc đặt tên cho nó ở đây không có hiệu lực.
Con người trong vòng lặp
interrupt() tạo ra bốn sự kiện, và không có cặp nào là dư thừa:
human_wait đến human_input mang lời nhắc và câu trả lời (cả hai bị bỏ dưới capture_content=False, cùng với nguồn tài liệu truy xuất — số lượng tài liệu vẫn tồn tại). agent_pause đến agent_resume là cặp duy nhất có nguồn cung cấp thời gian tạm dừng, vì vậy nếu không có nó, một khoảng chờ con người mười phút sẽ được tính là thời gian agent hoạt động. Span gốc vẫn mở trên khoảng cách, giữ cả hai lệnh gọi trong một phiên.
Các vấn đề thường gặp
Một công cụ nâng cao làm hỏng toàn bộ đồ thị
Một công cụ nâng cao làm hỏng toàn bộ đồ thị
create_react_agent truyền bá ngoại lệ. Để cho phép mô hình thấy lỗi và tiếp tục, hãy xây dựng nút công cụ một cách tường minh:tool_result mang một lỗi theo bất kỳ cách nào. Điều này chỉ quyết định xem lần chạy có tồn tại sau đó hay không.Một agent được đặt tên theo lớp mô hình xuất hiện trong dấu vết
Một agent được đặt tên theo lớp mô hình xuất hiện trong dấu vết
Một
llm.invoke() trực tiếp bên ngoài bất kỳ đồ thị nào không có chạy cha, vì vậy nó mở một span gốc và phát ra cặp mô hình của nó bên trong nó. Dashboard cha rời đến một agent mở, vì vậy span là cố ý. Đặt tên cho nó:Mỗi sự kiện xuất hiện hai lần
Mỗi sự kiện xuất hiện hai lần
Bạn đã truyền một trình xử lý Failproof trong
config={"callbacks": [...]} cũng như gọi instrument(). Xóa nó. Hệ thống hook cấu hình đã bao gồm mọi trình quản lý callback trong quy trình.Các phê duyệt của con người hiển thị dưới dạng lỗi
Các phê duyệt của con người hiển thị dưới dạng lỗi
Họ không. LangGraph tăng
GraphInterrupt qua cùng một đường dẫn như một ngoại lệ thực sự, vì vậy mỗi lần tạm dừng đều đến với tracer như một callback lỗi. Bất kỳ lớp con nào của GraphBubbleUp được coi là luồng điều khiển thay thế, vì vậy việc phê duyệt không vẽ một lỗi màu đỏ.Không có gì được ghi lại
Không có gì được ghi lại
Kiểm tra theo thứ tự này:
instrument() chạy trước khi đồ thị thực thi; có một with failproofai_sdk.session(): xung quanh lệnh gọi; FAILPROOFAI_SDK_STRICT=1 đặt, vì vậy một hook bị suy giảm sẽ tăng thay vì bị nuốt.Tiếp theo
Cách nó hoạt động
Cặp, id, vòng đời phiên và giao hàng.
Đọc một dấu vết
Làm theo nhân quả thông qua phiên bạn vừa chụp.
Các framework khác
CrewAI, LlamaIndex, Pydantic AI và các agent tùy chỉnh.

