SQLAlchemy sessions

SQLAlchemy sessions (SQLAlchemy 세션)

SQLAlchemySession은 SQLAlchemy를 사용해 프로덕션 준비된 세션 구현을 제공해요. SQLAlchemy가 지원하는 어떤 데이터베이스든(PostgreSQL, MySQL, SQLite 등) 세션 저장소로 쓸 수 있게 해주죠.

출처: 문서

본문

설치

SQLAlchemy 세션에는 sqlalchemy 선택적 의존성 extra와, 데이터베이스 URL과 일치하는 async 데이터베이스 드라이버가 필요해요.

아래 SQLite 예제(sqlite+aiosqlite://)에는 extra 옆에 aiosqlite도 설치하세요.

pip install 'openai-agents[sqlalchemy]' aiosqlite

extra는 postgresql+asyncpg://로 시작하는 PostgreSQL URL용 asyncpg를 이미 포함해요. mysql+aiomysql://로 시작하는 MySQL URL에는 extra 옆에 aiomysql을 설치하세요. 드라이버의 rsa extra는 MySQL의 SHA-256 인증 방법 의존성을 제공해요.

pip install 'openai-agents[sqlalchemy]' 'aiomysql[rsa]'

빠른 시작

데이터베이스 URL 사용

가장 간단한 시작 방법:

import asyncio
from agents import Agent, Runner
from agents.extensions.memory import SQLAlchemySession

async def main():
    agent = Agent("Assistant")

    # Create session using database URL
    session = SQLAlchemySession.from_url(
        "user-123",
        url="sqlite+aiosqlite:///:memory:",
        create_tables=True
    )

    result = await Runner.run(agent, "Hello", session=session)
    print(result.final_output)

if __name__ == "__main__":
    asyncio.run(main())

기존 엔진 사용

기존 SQLAlchemy 엔진이 있는 애플리케이션:

import asyncio
from agents import Agent, Runner
from agents.extensions.memory import SQLAlchemySession
from sqlalchemy.ext.asyncio import create_async_engine

async def main():
    # Create your database engine
    engine = create_async_engine("postgresql+asyncpg://user:pass@localhost/db")

    agent = Agent("Assistant")
    session = SQLAlchemySession(
        "user-456",
        engine=engine,
        create_tables=True
    )

    result = await Runner.run(agent, "Hello", session=session)
    print(result.final_output)

    # Clean up
    await engine.dispose()

if __name__ == "__main__":
    asyncio.run(main())

비-ASCII 텍스트 저장

기본적으로 SQLAlchemySession은 세션 항목을 JSON으로 직렬화할 때 비-ASCII 문자를 이스케이프해요. 이것은 기존 저장 형식을 보존하면서 항목을 로드할 때 원래 텍스트를 여전히 왕복시킵니다.

다국어 텍스트가 저장된 JSON에서 읽을 수 있게 유지되길 원하면 ensure_ascii=False를 설정하세요.

session = SQLAlchemySession.from_url(
    "user-123",
    url="sqlite+aiosqlite:///conversations.db",
    create_tables=True,
    ensure_ascii=False,
)

기존 엔진을 쓸 때는 같은 옵션을 SQLAlchemySession(...)에 직접 넘길 수 있어요. 이 설정은 데이터베이스에 저장된 JSON 표현만 바꿀 뿐, 세션 메서드가 반환하는 값은 바꾸지 않아요.

API 레퍼런스

  • SQLAlchemySession — 메인 클래스
  • Session — 기본 세션 프로토콜

더 알아보기 (Learn more)