작성
·
59
·
수정됨
0
안녕하세요 강의 잘 보고있습니다.
에이전트 구현 관련해서 강의 외적으로 몇가지 질문드립니다.
에이전트를 리눅스 호스트에서 구동하며 ShellTool, PlayWright 등을 활용해서 원래 사람이 직접 리눅스와 소통하며 수행해야 했을 동작들을 에이전트로 대체하고자 합니다. 이와 관련된 좋은 Practice Example이 있을까요?
에이전트를 여러 시나리오에 대응할 수 있도록 여러 Sub StateGraph로 나누어 작업한 후에 이들을 하나의 에이전트로 합치는 구조를 생각하고 있습니다. 혹시 이렇게 될 경우 State가 Subgraph 마다 다른 것과, 메모리 등에 대해서 정확한 그림이 그려지지 않는데 이를 해결하기 위해 혹시 효과적인 설명이나 예시가 있을까요?
답변 2
0
안녕하세요! 좋은 질문감사합니다.
MCP와 도구를 적절히 섞어서 잘 사용하면 될 것 같은데요
playwright의 경우에는 MS에서 공개한 mcp가 있습니다. 깃헙 참고해서 진행하시면 충분히 진행하실 수 있을 것 같습니다
powershell은 공식적인 자료는 없는데, LLM이 기본적으로 powershell command를 잘 생성할거라서 아래 단계로 진행하시면 될것같아요
, 원하는 작업
을 argument로 받는 도구를 하나 생성하셔서, llm이 직접 command를 생성하게 하고,
필요하면 output parser로 command 만 리턴하도록 하는 작업이 필요할 수 있습니다
subprocess.run()
으로 명령어를 실행하시면 될 것 같습니다
다만 한가지 우려되는 부분은, 만약 명령어를 잘못생성해서 리눅스 rm -rf
같은 명령어를 실행할 수도 있으니 명령어를 검토하는 과정을 한번 더 거치시거나 human-in-the-loop를 추가하셔야 할 것 같아요
적절한 예시를 본적은 없는데요, global state와 같은 변수를 두고, 에이전트마다 활용하는 state를 따로 둘 수 있을 것 같습니다. 예를들면
class GlobalState(TypedDict):
"""모든 SubGraph에서 공유되는 전역 상태"""
# 기본 대화 정보
messages: Annotated[List[Dict], operator.add]
user_id: str
session_id: str
# 전역 컨텍스트
conversation_history: Annotated[List[Dict], operator.add]
user_preferences: Dict
# 각 SubGraph의 결과를 저장
analysis_result: Optional[Dict]
recommendation_result: Optional[Dict]
action_result: Optional[Dict]
# 현재 활성화된 시나리오
current_scenario: str
next_action: str
이런식으로 할 수 있지 않을까 싶은데요, subgraph별로 메모리를 나눠서 관리해본적은 없어서, 저도 확답을 드리긴 어렵지만, 별도로 코드를 구현하시는게 아니라 랭그래프에서 제공하는 checkpointer를 활용하실 계획이시면, 저라면 일단은 글로벌로 한번 시도를 해보고, 모니터링 한 후에 너무 비효율적이면 subgraph별로 나누는 방식을 시도해 볼 것 같습니다.
진행하시다가 어려우신 점이 있으시면 질문으로 다시 올려주세요! 저도 한번 고민 해보겠습니다
0
안녕하세요, 인프런 AI 인턴입니다. 김선우님.
강의를 보시며 AI 에이전트를 활용해 리눅스 환경에서 자동화 작업을 구상 중이시군요. 에이전트와 관련된 두 가지 질문에 대해 다음과 같이 답변 드리겠습니다.
에이전트를 사용해 리눅스 시스템에서 ShellTool이나 PlayWright 등을 활용하여 자동화 작업을 수행하는 것은 매우 유용한 접근입니다. 규모 있는 예시나 사례를 통해 더 깊이 있는 이해와 실질적인 구현 아이디어를 얻고자 하신다면, 다음과 같은 리소스를 권장드립니다:
GitHub Projects: GitHub에서 ShellTool automation
, PlayWright integration with agents
등의 키워드를 통해 오픈 소스 프로젝트를 찾아보세요. 이미 많은 개발자들이 비슷한 구현 작업을 진행하며 사례를 공유하고 있습니다.
Automation Frameworks: 항목별로 잘 정리된 문서나 예제가 있는 자동화 프레임워크를 참고하십시오. 예를 들어, Ansible 플레이북은 리눅스 시스템 작업 자동화를 관리하는 데 유용합니다.
StateGraph를 통해 각 Sub-State에 맞춘 구조를 만들고 이를 하나의 에이전트로 통합하는 것은 복잡한 시스템에서 유용한 전략입니다. 이 경우, 각 Sub-StateGraph의 독립성 유지와 동시에 통합성을 고려해야 하기에 명확한 Reference와 설명이 중요합니다.
State 통합: 각 Sub-StateGraph에서 같은 전역적 상태 공간을 공유하거나, 상태 간 전환을 명확히 해주는 로직을 설정하는 것이 중요합니다. 이 과정에서, 각 Sub-State 처리 및 데이터 전파와 관련된 문제를 사전에 정의하여 예측할 수 있는 문제가 없는지 확인합니다.
Memory 관리: 메모리 사용을 추적하고 재사용 가능한 부분을 최대한 활용하세요. 상태가 복잡해질수록 메모리 관리 이슈가 발생할 수 있습니다. Python의 pickle
모듈 등을 이용해 상태를 직렬화/역질렬화하는 방식으로, 메모리 사용을 최적화할 수 있습니다.
관련 예시와 설명은 아래의 게시물을 참고하여 보다 자세한 아이디어를 얻으실 수 있습니다:
- 멀티턴, MemorySaver,MessagesState 질문 입니다
위의 게시물은 여러 StateGraph나 멀티턴 대화에 대한 설명과 예시를 다루고 있으므로, 필요한 팁을 얻으실 수 있습니다.
저는 김선우님의 이해를 돕고자 유사한 질문을 바탕으로 추천된 답변을 제공해 드립니다. 아직 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.