AI Solution Architecture

Deep Dives

View source

Kiến trúc OpenAI Agents Python

Tóm tắt điều hành

openai-agents-python là SDK Python để xây dựng workflow agent và multi-agent. Repository này có API công khai tương đối gọn trong src/agents, nhưng phía dưới là nhiều phân hệ runtime cho gọi model, thực thi tool, handoff, session, guardrail, tracing, realtime/voice, MCP và sandbox cho tác vụ dài hạn. README.md mô tả SDK là framework nhẹ nhưng đủ mạnh, hỗ trợ OpenAI Responses API, Chat Completions API và các model ngoài OpenAI thông qua adapter tùy chọn.

Theo pyproject.toml, package phát hành là openai-agents phiên bản 0.17.4, yêu cầu Python >=3.10. Phụ thuộc lõi gồm openai, pydantic, griffelib, requests, websocketsmcp. Các nhóm tùy chọn bổ sung voice, realtime, LiteLLM, any-llm, SQLAlchemy, mã hóa, Redis, Dapr, MongoDB, Docker và nhiều provider sandbox.

Vấn đề được giải quyết

SDK giải quyết bài toán biến lời gọi model thành workflow có kiểm soát. Một ứng dụng AI thực tế cần quản lý prompt, structured output, schema của tool, lựa chọn provider, retry, streaming, bộ nhớ hội thoại, kiểm tra an toàn và trace vận hành. Repository này đóng gói các mối quan tâm đó vào runtime agent: Agent định nghĩa instruction, tool, guardrail, handoff và kiểu output; RunnerAgentRunner điều phối vòng lặp từng lượt.

Vai trò trong AI Stack

LớpVai trò của repositoryCăn cứ trong repo
Điều phối ứng dụngAgent loop, handoff, nested agent, sandbox agentsrc/agents/agent.py, src/agents/run.py, src/agents/sandbox/
Trừu tượng modelOpenAI Responses, Chat Completions, interface multi-providersrc/agents/models/interface.py, openai_responses.py, openai_chatcompletions.py, multi_provider.py
ToolingFunction tool, hosted tool, shell/apply-patch, MCP, computer usesrc/agents/tool.py, src/agents/mcp/, docs/tools.md
GovernanceGuardrail input/output/tool, approval flow, kiểm soát dữ liệu nhạy cảm trong tracesrc/agents/guardrail.py, src/agents/tool_guardrails.py, docs/guardrails.md
Vận hànhTracing, usage, retry, session, streaming, sandbox runtimesrc/agents/tracing/, usage.py, retry.py, memory/, run_internal/

Bản đồ cây nguồn

openai-agents-python/
  README.md                    # tổng quan và quickstart
  pyproject.toml               # metadata package, extras, cấu hình test/lint/type
  mkdocs.yml                   # cấu hình site tài liệu
  docs/                        # hướng dẫn agents, running, tools, MCP, tracing
  examples/
    basic/                     # hello world, streaming, media, retry
    agent_patterns/            # routing, guardrails, HITL, agents-as-tools
    memory/                    # SQLite, SQLAlchemy, Redis, MongoDB, Dapr sessions
    mcp/                       # ví dụ MCP stdio, SSE, streamable HTTP
    tools/                     # hosted tools, shell, codex, apply_patch
    voice/                     # ví dụ voice static và streamed
  src/agents/
    agent.py                   # Agent, AgentBase, gom tool, agent-as-tool
    run.py                     # facade Runner và AgentRunner
    run_internal/              # turn loop, model retry, tool execution, streaming
    models/                    # trừu tượng model/provider và adapter OpenAI
    tool.py                    # function tools, hosted tools, shell, MCP, approval
    guardrail.py               # guardrail input/output và decorator tripwire
    memory/                    # interface session và session tích hợp sẵn
    mcp/                       # MCP server manager, transport, chuyển đổi tool
    sandbox/                   # hỗ trợ agent làm việc trên filesystem/runtime cô lập
    realtime/                  # realtime agents và sessions
    voice/                     # pipeline speech, STT/TTS provider
    tracing/                   # trace/span provider và processor
  tests/                       # test hành vi và unit test

Sơ đồ thành phần

flowchart TB App[Ma ung dung] --> Runner[Runner / AgentRunner<br/>src/agents/run.py] Runner --> Agent[Agent<br/>src/agents/agent.py] Agent --> Tools[Tools<br/>src/agents/tool.py] Agent --> Guardrails[Guardrails<br/>src/agents/guardrail.py] Agent --> Handoffs[Handoffs<br/>src/agents/handoffs/] Runner --> RunInternal[Run internals<br/>turn_preparation, run_loop, turn_resolution] RunInternal --> Models[Model interface/provider<br/>src/agents/models/] RunInternal --> Sessions[Sessions<br/>src/agents/memory/] RunInternal --> Tracing[Tracing<br/>src/agents/tracing/] Tools --> MCP[MCP servers<br/>src/agents/mcp/] Tools --> Hosted[Hosted tools<br/>file search, web search, code interpreter] Tools --> Sandbox[Sandbox runtime<br/>src/agents/sandbox/] Models --> OpenAI[OpenAI APIs] Models --> Other[LiteLLM / any-llm providers]

Khái niệm lõi

Kiến trúc nội bộ

Runtime công khai bắt đầu từ Runner, nhưng phần triển khai được chia nhỏ trong src/agents/run_internal/. turn_preparation.py xử lý model, tool, handoff, output schema và bộ lọc input trước khi gọi model. run_loop.py tập hợp helper điều phối mà run.py dùng. turn_resolution.py diễn giải response của model thành final output, tool run, handoff, interruption hoặc lượt tiếp theo. tool_execution.py thực thi function tool, computer action, local shell, hosted shell, apply-patch và computer tool. session_persistence.py chuẩn bị input từ session và ghi kết quả trở lại.

SDK dùng schema chặt chẽ ở nhiều điểm. function_schema.py, strict_schema.py, agent_output.py và các định nghĩa tool dựa trên Pydantic dùng để validate input tool và structured output. Runtime có các lỗi domain như vượt max turn, guardrail tripwire, lỗi hành vi model và timeout tool, giúp ứng dụng xử lý có chủ đích hơn.

Luồng runtime và dữ liệu

sequenceDiagram participant U as User/App participant R as Runner participant A as Agent participant G as Guardrails participant M as ModelProvider participant T as Tools/MCP participant S as Session/Trace U->>R: input, context, RunConfig, Session tuy chon R->>S: nap lich su va bat dau trace R->>G: chay input guardrails cho agent dau tien R->>A: resolve instruction, tool, handoff, output schema A->>M: goi model voi messages va tool schemas M-->>A: response, tool calls, handoff, hoac final output alt co tool calls A->>T: thuc thi tool va approval T-->>A: tool results A->>M: luot model tiep voi tool results else co handoff A-->>R: doi active agent else final output A-->>R: output da validate end R->>G: chay output guardrails R->>S: persist item, usage, span R-->>U: RunResult hoac RunResultStreaming

Điểm mở rộng

Tích hợp

Các optional extras trong pyproject.toml cho thấy bề mặt tích hợp chính: voice, realtime, litellm, any-llm, sqlalchemy, encrypt, redis, dapr, mongodb, docker, blaxel, daytona, cloudflare, e2b, modal, runloop, vercel, s3temporal. Thư mục examples/ cung cấp mẫu cụ thể cho MCP transport, memory provider, shell và hosted tool, human-in-the-loop và voice.

Sơ đồ triển khai và vận hành

flowchart LR subgraph Runtime["Runtime ung dung"] API[FastAPI / service / worker] SDK[openai-agents SDK] LocalTools[Function tools cuc bo] end subgraph External["Dich vu ben ngoai"] OAI[OpenAI Responses / Chat Completions] MCP[MCP servers] DB[(Session store<br/>SQLite/Redis/SQLAlchemy/MongoDB/Dapr)] Trace[OpenAI tracing hoac custom processors] Sandbox[Sandbox provider<br/>local/Docker/E2B/Modal/etc.] end API --> SDK SDK --> OAI SDK --> LocalTools SDK --> MCP SDK --> DB SDK --> Trace SDK --> Sandbox

Về vận hành, hãy xem SDK là thư viện ứng dụng, không phải server độc lập. Nó có thể chạy trong API service, background worker, notebook, CLI hoặc durable workflow system. Với production, nên pin optional extras có chủ đích, đặt approval trước tool có side effect, rà soát chính sách dữ liệu nhạy cảm khi export trace và tách sandbox execution khỏi process ứng dụng chính.

Observability, testing, evaluation và failure modes

Tracing là phân hệ hạng nhất trong src/agents/tracing/. docs/tracing.md trình bày trace, span, default tracing, custom processor, dữ liệu nhạy cảm và tích hợp khi dùng model ngoài OpenAI. Usage accounting nằm trong src/agents/usage.py và được runner internals gắn vào kết quả run và span.

Repository dùng pytest, pytest-asyncio, pytest-xdist, coverage, ruff, mypypyright theo pyproject.toml. Các ví dụ trong examples/agent_patterns/ là tài liệu thiết kế có thể chạy cho guardrail, routing, luồng deterministic, human-in-the-loop và nested agent.

Các failure mode cần thiết kế trước:

Rủi ro bảo mật và governance

Rủi ro chính là quyền hạn của tool, mức tin cậy MCP, sandbox quá rộng quyền hoặc bị escape, lưu giữ dữ liệu trong session/trace và chạy lệnh do model đề xuất. docs/mcp.md phân biệt hosted MCP, streamable HTTP, SSE, stdio, server manager, approval flow, filtering, caching và tracing. docs/tools.md bao phủ hosted tool, local runtime tool, function tool, agents-as-tools và approval gate. Khi deploy production, nên tắt tool rủi ro cao theo mặc định, yêu cầu approval cho shell/apply-patch/computer action, prefix tên MCP tool khi có nhiều server và redact hoặc tắt sensitive trace khi cần.

Sơ đồ lifecycle và quyết định

stateDiagram-v2 [*] --> PrepareInput PrepareInput --> InputGuardrails InputGuardrails --> ModelTurn: pass InputGuardrails --> Tripwire: fail ModelTurn --> FinalOutput: output schema khop ModelTurn --> ToolExecution: tool calls ModelTurn --> Handoff: chon handoff ToolExecution --> Approval: can approval Approval --> ToolExecution: approved Approval --> ModelTurn: rejected result ToolExecution --> ModelTurn: tool results Handoff --> ModelTurn: active agent moi FinalOutput --> OutputGuardrails OutputGuardrails --> PersistAndTrace: pass OutputGuardrails --> Tripwire: fail PersistAndTrace --> [*] Tripwire --> [*]

Cấu hình, triển khai và ghi chú ops

Hướng dẫn đọc mã nguồn

  1. Bắt đầu với README.md, docs/quickstart.mddocs/agents.md.
  2. Đọc src/agents/agent.pysrc/agents/run.py để hiểu API công khai.
  3. Đọc src/agents/run_internal/turn_preparation.py, turn_resolution.pytool_execution.py để hiểu runtime.
  4. Đọc docs/tools.md, docs/mcp.md, docs/guardrails.mddocs/running_agents.md.
  5. Với production, đọc docs/tracing.md, docs/sessions/* và ví dụ liên quan trong examples/memory/, examples/tools/, examples/agent_patterns/.

Lộ trình học

  1. Tạo một Agent đơn giản với function tool.
  2. Thêm structured output và output guardrail.
  3. Thêm session backend và xem lịch sử run.
  4. Chuyển một specialist agent thành tool, rồi so sánh với handoff.
  5. Thêm MCP với static hoặc dynamic tool filtering.
  6. Thêm tracing và usage monitoring.
  7. Thử sandboxed long-horizon work bằng local hoặc Docker sandbox trước khi dùng provider remote.

Checklist sẵn sàng production

Dùng checklist này khi chuyển từ các ví dụ trong examples/ sang service, worker hoặc notebook vận hành thật có import src/agents.

Khu vựcNeo theo repositoryKiểm tra kiến trúc
Giới hạn vòng lặp agentsrc/agents/run.py, src/agents/run_config.py, src/agents/exceptions.pyCấu hình max turns, timeout, retry và cách xử lý MaxTurnsExceeded, lỗi hành vi model, lỗi tool.
Quyền hạn của toolsrc/agents/tool.py, src/agents/tool_guardrails.py, docs/tools.mdTách tool chỉ đọc, tool có side effect, local shell, hosted tool và apply_patch; yêu cầu phê duyệt cho thao tác rủi ro cao.
Ranh giới tin cậy MCPsrc/agents/mcp/, docs/mcp.md, examples/mcp/Chỉ dùng server đáng tin cậy, prefix tên tool, lọc catalog tool và xem lỗi lifecycle server là incident runtime.
Độ bền sessionsrc/agents/memory/, examples/memory/Chọn SQLite/SQLAlchemy/Redis/MongoDB/Dapr/OpenAI session theo yêu cầu tenant, mã hóa và replay.
An toàn tracesrc/agents/tracing/, docs/tracing.mdQuyết định trace có được chứa prompt, tham số tool, output và usage hay không; redact hoặc tắt capture khi cần.
Cô lập sandboxsrc/agents/sandbox/, docs/sandbox_agents.md, examples/tools/Kiểm soát mount filesystem, network policy, credential và giới hạn chi phí sandbox ngoài trust boundary của app chính.
flowchart LR PublicAPI[Agent, Runner, RunConfig] --> TurnPrep[run_internal/turn_preparation.py] TurnPrep --> ModelPlane[models/interface.py va provider adapters] TurnPrep --> ToolPlane[tool.py va tool_guardrails.py] ToolPlane --> MCPPlane[mcp/server.py va manager.py] ToolPlane --> SandboxPlane[sandbox capabilities va providers] TurnPrep --> SessionPlane[memory/session.py va backends] ModelPlane --> TurnResolution[run_internal/turn_resolution.py] ToolPlane --> ToolExecution[run_internal/tool_execution.py] SessionPlane --> Persistence[run_internal/session_persistence.py] TurnResolution --> Result[result.py va stream_events.py] Persistence --> TracePlane[tracing processors va spans]

Runbook vận hành và phân loại lỗi

Runbook production hữu ích nhất nên bám vào turn loop. Một lỗi hiếm khi chỉ là "agent hỏng"; thường nó nằm ở một chặng cụ thể: chuẩn bị input, guardrail, gọi model, chạy tool, handoff, lưu session hoặc export trace. Các file trong src/agents/run_internal/ thể hiện rõ cách tách lớp này và là điểm đọc đầu tiên khi điều tra incident.

flowchart TD Incident[Ket qua run bat thuong hoac outage] --> Classify{Loi o dau?} Classify --> Input[Input hoac replay session] Classify --> Guardrail[Guardrail tripwire] Classify --> Model[Goi model hoac structured output] Classify --> Tool[Tool, MCP hoac sandbox action] Classify --> Handoff[Handoff hoac agent-as-tool] Classify --> Trace[Tracing hoac persistence] Input --> CheckSession[memory backends va session_persistence.py] Guardrail --> CheckGuard[guardrail.py va tool_guardrails.py] Model --> CheckModel[model adapters, strict_schema.py, agent_output.py] Tool --> CheckTool[tool_execution.py, mcp/, sandbox/] Handoff --> CheckHandoff[handoffs/ va agent.py tool aggregation] Trace --> CheckTrace[tracing/ processors va usage.py] CheckSession --> Fix[Sua policy, config hoac implementation] CheckGuard --> Fix CheckModel --> Fix CheckTool --> Fix CheckHandoff --> Fix CheckTrace --> Fix

Với kiến trúc sư cấp cao, quyết định quan trọng là SDK này chỉ là thư viện đồng bộ trong ứng dụng hay là một phần của durable workflow. Nếu tool có thể thay đổi hệ thống bên ngoài, hãy bọc Runner.run bằng idempotency key, trạng thái phê duyệt, hành động bù trừ và audit record bền vững. Nếu dùng agent cho sandbox dài hơi, cần lưu state ngoài process và định nghĩa rõ hành vi khi sandbox provider, MCP server hoặc model provider lỗi giữa chừng.

sequenceDiagram participant App as Service hoac worker participant Policy as Lop policy va phe duyet participant Runner as Runner.run participant Tools as Tools va MCP participant Store as Session va audit store participant Trace as Trace processor App->>Policy: phan loai user, tenant, tool, data scope Policy->>Store: tao run record va idempotency key Policy->>Runner: run voi RunConfig va session Runner->>Tools: yeu cau tool execution duoc phe duyet Tools-->>Policy: can phe duyet hoac tra ket qua Policy-->>Runner: approved, rejected hoac sanitized result Runner->>Store: luu conversation items va usage Runner->>Trace: export spans theo redaction policy Runner-->>App: final output hoac typed exception

Ghi chú review cho kiến trúc sư cấp cao

Hãy review openai-agents-python như một runtime library có trust boundary rõ ràng, không chỉ như helper để viết prompt. Public API trong src/agents/agent.py, src/agents/run.pysrc/agents/run_config.py khá nhỏ, nhưng blast radius đến từ các subsystem mà nó có thể gọi: src/agents/tool.py, src/agents/mcp/, src/agents/sandbox/, src/agents/memory/src/agents/tracing/. Trong architecture review, cần hỏi subsystem nào được bật cho từng tenant và subsystem nào bị tắt ở mức import, config hoặc policy.

Đặc biệt chú ý quyền sở hữu schema. src/agents/function_schema.py, strict_schema.py, agent_output.py và các model adapter trong src/agents/models/ cùng định nghĩa cách chuyển đổi Python types, JSON schema, model response và tham số tool. Nếu application dùng function tool gọi hệ thống tài chính, bảo mật, deployment hoặc hệ thống có side effect lên dữ liệu, schema validation là cần thiết nhưng chưa đủ; application vẫn cần authorization và business-rule validation nằm ngoài model turn.

Xem SessionTrace là hai miền governance khác nhau. Session storage dưới src/agents/memory/ là product state, còn spans dưới src/agents/tracing/ là operational telemetry. Chúng có thể có retention period, tenant access rule, yêu cầu mã hóa và nghĩa vụ incident response khác nhau. Các ví dụ trong examples/memory/ là điểm bắt đầu tốt, nhưng production system nên tài liệu hóa replay, deletion và redaction behavior trước khi agent xử lý dữ liệu người dùng thật.

Thuật ngữ