TL;DR
게시자는 LLM agent용 local-first debugger인 agent-lens에서 실제 OpenAI SDK와 가짜 SDK의 API가 어긋나면서 4개월 동안 오류가 배포된 사례를 기록했습니다. 코드는 Completions.acreate를 패치했지만 OpenAI SDK 1.0.0, 1.30, 2.0, 3.7에서는 비동기 클라이언트가 별도 AsyncCompletions 클래스이고 acreate 속성도 존재하지 않았습니다. 비동기 경로 테스트 네 개가 모두 통과한 이유는 실제 vendor가 아니라 코드가 호출하는 형태에 맞춘 fake SDK를 사용했기 때문이며, capture layer 커버리지는 85–93%였지만 문제를 막지 못했습니다. 게시자는 실제 설치 SDK의 속성과 패치 대상 hook을 확인하는 테스트와 vendor SDK를 설치해 실행하는 CI job을 추가했고, respx가 OpenAI SDK 3.7·httpx 0.28.1 조합의 요청을 가로채지 못해 실서비스로 나가던 e2e 테스트도 발견했습니다. 이 사례는 mock이 의존성의 증거가 될 수 없고, 의존성 미설치 시 자동 skip되는 테스트는 의도적으로 관리하지 않으면 결함을 숨긴다는 점을 보여줍니다.
실용적 조언
- 가짜 SDK의 메서드와 속성을 구현 코드가 아니라 실제 설치된 vendor SDK에서 조회하는 계약 테스트를 추가하십시오.
- OpenAI SDK, httpx, respx처럼 함께 동작하는 의존성 조합을 CI에 설치하고, mocked HTTP 테스트에서 외부 네트워크 호출이 발생하면 실패하도록 구성하십시오.
- 의존성 미설치에 따른 테스트 skip을 기본 동작으로 두지 말고, 필수 의존성은 dev extra와 CI 설정에 명시해 의도적인 skip과 환경 누락을 구분하십시오.
- 상속 기반 handler는 override한 hook 이름이 vendor base class에 실제로 존재하는지 확인해, 조용히 실행되지 않는 경로를 방지하십시오.
섹션별 상세
이미지 분석

이미지는 게시자가 유지하는 agent-lens 저장소의 정체성과 기본 기능을 보강합니다. 본문에서 말한 local-first debugger가 실행 중인 agent를 멈추고 검사하거나 분기하는 도구라는 점을 저장소 소개 문구와 연결할 수 있습니다.
agent-lens GitHub 저장소 화면으로, LLM agent용 interactive debugger라는 설명과 pause·inspect·fork 기능이 표시되어 있습니다.
용어 해설
- 테스트 대역(Test Double)
- — 실제 외부 의존성 대신 테스트에서 사용하는 가짜 객체나 SDK 구현입니다. 코드가 호출하는 메서드와 속성만 흉내 내므로, 실제 vendor SDK에 해당 API가 존재하는지는 검증하지 못합니다. 구현과 대역의 계약이 어긋나면 높은 테스트 커버리지에서도 오류가 통과합니다.
- 계약 테스트(Contract Test)
- — 애플리케이션과 외부 의존성이 공유하는 API 계약을 실제 의존성에 대조하는 테스트입니다. 패치 대상 속성이나 상속된 hook이 설치된 SDK에 실제로 존재하는지 확인해, 가짜 객체가 숨기는 호환성 오류를 잡습니다. SDK 버전 변경에도 유용합니다.
- respx
- — httpx 요청을 가로채 모의 HTTP 응답을 반환하는 테스트 도구입니다. 이 글에서는 OpenAI SDK 3.7, httpx 0.28.1, respx 0.23.1 조합에서 route가 매칭되지 않아 api.openai.com으로 실제 요청이 나간 사례와 연결됩니다.
- AsyncCompletions
- — OpenAI SDK에서 비동기 completions 기능을 담당하는 별도 클래스입니다. 글의 오류 코드는 이 클래스와 분리된 Completions에 존재하지 않는 acreate 속성을 패치하려 했고, 버전 1.0.0, 1.30, 2.0, 3.7 모두에서 같은 구조가 확인됐습니다.
코드 예제
agent_lens.install()문서에 적힌 agent-lens 설치 진입점으로, OpenAI SDK가 설치된 환경에서 AttributeError를 일으켰습니다.
Completions.acreate실제 SDK에 존재하지 않는 비동기 메서드를 패치 대상으로 사용한 코드 경로입니다.
pip install agentlens-tracer게시자가 공유한 패키지 설치 명령입니다.
언급된 도구
LLM agent를 실행 중 일시 정지하고 검사하거나 분기하는 local-first debugger입니다.
게시자의 debugger가 Completions.acreate를 패치하려 했던 외부 SDK입니다.
vendor base class를 상속하는 handler의 연동 대상입니다.
vendor base class를 상속하는 handler의 연동 대상입니다.
HTTP mock 테스트에서 클라이언트 요청을 가로채는 도구입니다.
언급된 리소스
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.