Microsoft AutoGen 연동

Microsoft AutoGen 연동 (autogen)

AutoGen은 AI 에이전트를 만들고, 여러 에이전트가 협력해서 태스크를 해결하도록 돕는 오픈소스 프로그래밍 프레임워크예요. 특징을 몇 가지 짚어볼게요.

  • 멀티 에이전트 대화 (Multi-agent conversations) — AutoGen 에이전트는 서로 통신하며 태스크를 해결할 수 있어요. 단일 LLM으로는 만들기 어려운 더 복잡하고 정교한 애플리케이션이 가능해져요.
  • 커스터마이징 (Customization) — 애플리케이션의 필요에 맞게 에이전트를 커스터마이징할 수 있어요. 사용할 LLM을 고르거나, 허용할 인간 입력(human input)의 유형이나 사용할 도구도 정할 수 있어요.
  • 인간 참여 (Human participation) — AutoGen은 인간의 참여를 허용해요. 필요한 시점에 인간이 에이전트에게 입력과 피드백을 줄 수 있다는 뜻이에요.

AutoGen-Qdrant 통합을 이용하면 Qdrant의 성능 좋은 검색(retrieval)을 기반으로 AutoGen 워크플로우를 만들 수 있어요.

출처: Qdrant 공식 문서 — autogen

설치 (Installation)

pip install "autogen-agentchat[retrievechat-qdrant]"

사용 방법 (Usage)

설정 (Configuration)

import autogen

config_list = autogen.config_list_from_json("OAI_CONFIG_LIST")

config_list_from_json 함수는 먼저 OAI_CONFIG_LIST 환경 변수를 찾아요. 이 환경 변수는 유효한 JSON 문자열이어야 해요. 없으면 OAI_CONFIG_LIST라는 이름의 JSON 파일을 찾아요. 샘플 파일은 여기에서 볼 수 있어요.

RetrieveChat용 에이전트 만들기 (Construct agents for RetrieveChat)

먼저 RetrieveAssistantAgentQdrantRetrieveUserProxyAgent를 초기화해요. RetrieveAssistantAgentsystem_message"You are a helpful assistant."로 설정해야 해요. 자세한 지침은 user message에 담아요.

from qdrant_client import QdrantClient
from sentence_transformers import SentenceTransformer

from autogen import AssistantAgent
from autogen.agentchat.contrib.retrieve_user_proxy_agent import RetrieveUserProxyAgent

# 1. "assistant"라는 이름의 AssistantAgent 인스턴스 생성
assistant = AssistantAgent(
    name="assistant",
    system_message="You are a helpful assistant.",
    llm_config={
        "timeout": 600,
        "cache_seed": 42,
        "config_list": config_list,
    },
)

sentence_transformer_ef = SentenceTransformer("all-distilroberta-v1").encode
client = QdrantClient(url="http://localhost:6333/")

# 2. "ragproxyagent"라는 이름의 RetrieveUserProxyAgent 인스턴스 생성
# RetrieveUserProxyAgent에 대한 더 자세한 정보는
# https://microsoft.github.io/autogen/docs/reference/agentchat/contrib/retrieve_user_proxy_agent 참고
ragproxyagent = RetrieveUserProxyAgent(
    name="ragproxyagent",
    human_input_mode="NEVER",
    max_consecutive_auto_reply=10,
    retrieve_config={
        "task": "code",
        "docs_path": [
            "path/to/some/doc.md",
            "path/to/some/other/doc.md",
        ],
        "chunk_token_size": 2000,
        "model": config_list[0]["model"],
        "vector_db": "qdrant",
        "db_config": {"client": client},
        "get_or_create": True,
        "overwrite": True,
        "embedding_function": sentence_transformer_ef,  # 기본값은 FastEmbed의 "BAAI/bge-small-en-v1.5"
    },
    code_execution_config=False,
)

에이전트 실행하기 (Run the agent)

# 새 대화를 시작하기 전에 항상 assistant를 리셋해요.
assistant.reset()

# ragproxyagent로 assistant에게 보낼 프롬프트를 초기 메시지로 생성해요.
# assistant가 받아서 응답을 생성하고, 응답은 다시 ragproxyagent로 보내져 처리돼요.
# 종료 조건이 충족될 때까지 대화가 계속돼요.

qa_problem = "What is the .....?"
chat_results = ragproxyagent.initiate_chat(
    assistant, message=ragproxyagent.message_generator, problem=qa_problem
)

다음 단계 (Next steps)

더 알아보기 (Learn more)