-
Notifications
You must be signed in to change notification settings - Fork 1.6k
[TRANSLATION] Translate unit2 to Korean #570
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
8641053
e0877e9
438de5e
cc9f4fe
f277b1c
35cd67c
587efd7
eee3aca
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -1,40 +1,106 @@ | ||||||
- title: Unit 0. Welcome to the course | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 유닛이나 챕터 타이틀이 한국어로 번역이 되지 않은 상태로 남겨져 있는 것 같습니다 :) 혹시 번역을 해두지 않으신 이유가 제가 모르는 Agent Course 내의 특정 규칙이나 가이드가 있다면 그대로 두셔도 괜찮을 것 같고요. 없다면, 유닛이나 챕터 타이틀을 한국어로 번역해 두는 것도 좋지 않을까 조심스럽게 제안드려봅니다 :) |
||||||
sections: | ||||||
- local: unit0/introduction | ||||||
title: Welcome to the course 🤗 | ||||||
title: AI 에이전트 코스에 오신걸 환영합니다 🤗 | ||||||
- local: unit0/onboarding | ||||||
title: Onboarding | ||||||
title: 온보딩(Onboarding), 첫 걸음 내딛기 ⛵ | ||||||
- local: unit0/discord101 | ||||||
title: (Optional) Discord 101 | ||||||
title: (선택) Discord 101 | ||||||
- title: Unit 1. Introduction to Agents | ||||||
sections: | ||||||
- local: unit1/introduction | ||||||
title: Introduction | ||||||
title: 에이전트 소개 | ||||||
- local: unit1/what-are-agents | ||||||
title: What is an Agent? | ||||||
title: 에이전트란? | ||||||
- local: unit1/quiz1 | ||||||
title: Quick Quiz 1 | ||||||
- local: unit1/what-are-llms | ||||||
title: What are LLMs? | ||||||
title: LLM이란? | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 저도 개인적으로는 LLM이라는 표현이 더 자연스럽게 느껴졌는데요,
Suggested change
|
||||||
- local: unit1/messages-and-special-tokens | ||||||
title: Messages and Special Tokens | ||||||
title: 메세지와 특수 토큰 | ||||||
- local: unit1/tools | ||||||
title: What are Tools? | ||||||
title: 도구란? | ||||||
- local: unit1/quiz2 | ||||||
title: Quick Quiz 2 | ||||||
- local: unit1/agent-steps-and-structure | ||||||
title: Understanding AI Agents through the Thought-Action-Observation Cycle | ||||||
title: 사고-행동-관찰 주기를 통해 AI 에이전트 이해하기 | ||||||
- local: unit1/thoughts | ||||||
title: Thought, Internal Reasoning and the Re-Act Approach | ||||||
title: 사고, AI 에이전트의 내부 추론과 Re-Act 방식 | ||||||
- local: unit1/actions | ||||||
title: Actions, Enabling the Agent to Engage with Its Environment | ||||||
title: 액션, 에이전트가 환경과 상호작용할 수 있게 하기 | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 26번째 제목에서는 Action이 “행동”으로 번역되어 있었는데, 혹시 의도적으로 구분하신 표현이라면 그대로 두셔도 괜찮을 것 같고, |
||||||
- local: unit1/observations | ||||||
title: Observe, Integrating Feedback to Reflect and Adapt | ||||||
title: 관찰, 피드백을 통합하여 성찰하고 적응하기 | ||||||
- local: unit1/dummy-agent-library | ||||||
title: Dummy Agent Library | ||||||
title: 더미 에이전트 라이브러리 | ||||||
- local: unit1/tutorial | ||||||
title: Let’s Create Our First Agent Using smolagents | ||||||
title: smolagents로 첫 번째 에이전트 만들기 | ||||||
- local: unit1/final-quiz | ||||||
title: Unit 1 Final Quiz | ||||||
- local: unit1/conclusion | ||||||
title: Conclusion | ||||||
- title: Unit 2. Frameworks for AI Agents | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 유닛이나 챕터 타이틀이 한국어로 번역이 되지 않은 상태로 남겨져 있는 것 같습니다 :) 혹시 번역을 해두지 않으신 이유가 제가 모르는 Agent Course 내의 특정 규칙이나 가이드가 있다면 그대로 두셔도 괜찮을 것 같고요. 없다면, 유닛이나 챕터 타이틀을 한국어로 번역해 두는 것도 좋지 않을까 조심스럽게 제안드려봅니다 :) |
||||||
sections: | ||||||
- local: unit2/introduction | ||||||
title: AI Agent 프레임워크 소개 | ||||||
- title: Unit 2.1 The smolagents framework | ||||||
sections: | ||||||
- local: unit2/smolagents/introduction | ||||||
title: smolagents 소개 | ||||||
- local: unit2/smolagents/why_use_smolagents | ||||||
title: smolagents를 왜 사용할까? | ||||||
- local: unit2/smolagents/quiz1 | ||||||
title: Quick Quiz 1 | ||||||
- local: unit2/smolagents/code_agents | ||||||
title: 코드를 사용하는 에이전트 만들기 | ||||||
- local: unit2/smolagents/tool_calling_agents | ||||||
title: 액션을 코드 조각(코드 스니펫)이나 JSON 블롭으로 작성하기 | ||||||
- local: unit2/smolagents/tools | ||||||
title: Tool 도구 소개 | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 해당 부분을 간단하게 ‘도구 소개’ 정도로 정리해보는 건 어떨까 조심스럽게 제안드려봅니다 :) 혹시 의도하신 바가 있다면 그대로 두셔도 괜찮습니다!
Suggested change
|
||||||
- local: unit2/smolagents/retrieval_agents | ||||||
title: 검색 에이전트 | ||||||
- local: unit2/smolagents/quiz2 | ||||||
title: Quick Quiz 2 | ||||||
- local: unit2/smolagents/multi_agent_systems | ||||||
title: 멀티 에이전트 시스템 | ||||||
- local: unit2/smolagents/vision_agents | ||||||
title: 비전과 브라우저 에이전트 | ||||||
- local: unit2/smolagents/final_quiz | ||||||
title: 최종 Quiz | ||||||
- local: unit2/smolagents/conclusion | ||||||
title: 결론 | ||||||
- title: Unit 2.2 The LlamaIndex framework | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 유닛이나 챕터 타이틀이 한국어로 번역을 하지 않은 상태로 남겨져 있는 것 같습니다 :) 혹시 번역을 해두지 않으신 이유가 제가 모르는 Agent Course 내의 특정 규칙이나 가이드가 있다면 그대로 두셔도 괜찮을 것 같고요. 없다면, 유닛이나 챕터 타이틀을 한국어로 번역해 두는 것도 좋지 않을까 조심스럽게 제안드려봅니다 :) |
||||||
sections: | ||||||
- local: unit2/llama-index/introduction | ||||||
title: LLamaIndex 소개 | ||||||
- local: unit2/llama-index/llama-hub | ||||||
title: LlamaHub 소개 | ||||||
- local: unit2/llama-index/components | ||||||
title: LlamaIndex의 구성 요소 | ||||||
- local: unit2/llama-index/tools | ||||||
title: LlamaIndex에서 도구 사용하기 | ||||||
- local: unit2/llama-index/quiz1 | ||||||
title: Quick Quiz 1 | ||||||
- local: unit2/llama-index/agents | ||||||
title: LlamaIndex에서 에이전트 사용하기 | ||||||
- local: unit2/llama-index/workflows | ||||||
title: LlamaIndex에서 에이전트 워크플로우 만들기 | ||||||
- local: unit2/llama-index/quiz2 | ||||||
title: Quick Quiz 2 | ||||||
- local: unit2/llama-index/conclusion | ||||||
title: 결론 | ||||||
- title: Unit 2.3 The LangGraph framework | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 유닛이나 챕터 타이틀이 한국어로 번역을 하지 않은 상태로 남겨져 있는 것 같습니다 :) 번역을 해두지 않은 이유가 있다면 넘어가주셔도 좋고 |
||||||
sections: | ||||||
- local: unit2/langgraph/introduction | ||||||
title: LangGraph 소개 | ||||||
- local: unit2/langgraph/when_to_use_langgraph | ||||||
title: LangGraph란? | ||||||
- local: unit2/langgraph/building_blocks | ||||||
title: LangGraph의 구성 요소 | ||||||
- local: unit2/langgraph/first_graph | ||||||
title: 첫 번째 LangGraph 만들기 | ||||||
- local: unit2/langgraph/document_analysis_agent | ||||||
title: Document Analysis Graph | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 한국어로 번역이 되어 있지 않은데 제가 모르는 내부 규정이나 특별한 이유가 있는 것이라면 그냥 두셔도 좋고 아니라면 번역을 한 제목을 쓰는 것도 좋아보입니다. |
||||||
- local: unit2/langgraph/quiz1 | ||||||
title: Quick Quiz 1 | ||||||
- local: unit2/langgraph/conclusion | ||||||
title: Conclusion | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 앞선 제목들과 동일하게 결론이라는 제목으로 해두는 것이 어떨지 조심스럽게 제안드려봅니다.
Suggested change
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
# 에이전틱 프레임워크 소개 | ||
|
||
<img src="https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit2/thumbnail.jpg" alt="Thumbnail"/> | ||
|
||
Unit 2에 오신 것을 환영합니다! **이번 유닛에서는 다양한 에이전틱 프레임워크**를 살펴보고, 이를 활용해 강력한 에이전트 기반 애플리케이션을 만드는 방법을 배웁니다. | ||
|
||
이번 유닛에서 다룰 내용은 다음과 같습니다: | ||
|
||
- 2.1: [smolagents](https://huggingface.co/docs/smolagents/en/index) | ||
- 2.2: [LlamaIndex](https://www.llamaindex.ai/) | ||
- 2.3: [LangGraph](https://www.langchain.com/langgraph) | ||
|
||
함께 시작해봅시다! 🕵 | ||
|
||
## 에이전틱 프레임워크는 언제 필요할까? | ||
|
||
에이전틱 프레임워크는 **LLM 기반 애플리케이션을 만들 때 항상 필요한 것은 아닙니다.** 프레임워크는 특정 작업을 효율적으로 해결할 수 있도록 워크플로우에 유연성을 제공하지만, 항상 필수적인 것은 아닙니다. | ||
|
||
때로는 **미리 정의된 워크플로우만으로도** 사용자 요청을 충분히 처리할 수 있으며, 굳이 에이전틱 프레임워크가 필요하지 않을 수 있습니다. 에이전트 구조가 단순하다면, 프롬프트 체이닝 등 일반 코드만으로도 충분합니다. 이 경우 개발자는 **추상화 없이 시스템을 완전히 이해하고 제어**할 수 있다는 장점이 있습니다. | ||
|
||
하지만 워크플로우가 복잡해져 LLM이 함수를 호출하거나, 여러 에이전트를 활용해야 하는 경우에는 이러한 추상화가 도움이 되기 시작합니다. | ||
|
||
이러한 점을 고려하면, 다음과 같은 기능이 필요함을 알 수 있습니다: | ||
|
||
* 시스템을 구동할 *LLM 엔진* | ||
* 에이전트가 접근할 수 있는 *도구 목록* | ||
* LLM 출력에서 도구 호출을 추출하는 *파서* | ||
* 파서와 동기화된 *시스템 프롬프트* | ||
* *메모리 시스템* | ||
* LLM의 실수를 제어할 *에러 로깅 및 재시도 메커니즘* | ||
|
||
이러한 주제들이 각 프레임워크에서 어떻게 해결되는지, `smolagents`, `LlamaIndex`, `LangGraph`를 통해 살펴볼 예정입니다. | ||
|
||
## 에이전틱 프레임워크별 유닛 안내 | ||
|
||
| 프레임워크 | 설명 | 유닛 저자 | | ||
|------------|----------------|----------------| | ||
| [smolagents](./smolagents/introduction) | Hugging Face에서 개발한 에이전트 프레임워크 | Sergio Paniego - [HF](https://huggingface.co/sergiopaniego) - [X](https://x.com/sergiopaniego) - [Linkedin](https://www.linkedin.com/in/sergio-paniego-blanco) | | ||
| [Llama-Index](./llama-index/introduction) | 컨텍스트 증강 AI 에이전트를 프로덕션에 배포할 수 있는 엔드-투-엔드 툴링 | David Berenstein - [HF](https://huggingface.co/davidberenstein1957) - [X](https://x.com/davidberenstei) - [Linkedin](https://www.linkedin.com/in/davidberenstein) | | ||
| [LangGraph](./langgraph/introduction) | 상태 기반 에이전트 오케스트레이션을 지원하는 프레임워크 | Joffrey THOMAS - [HF](https://huggingface.co/Jofthomas) - [X](https://x.com/Jthmas404) - [Linkedin](https://www.linkedin.com/in/joffrey-thomas) | |
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -0,0 +1,127 @@ | ||||||
# LangGraph의 구성 요소[[building-blocks-of-langgraph]] | ||||||
|
||||||
LangGraph로 애플리케이션을 구축하려면 핵심 구성 요소를 이해해야 합니다. LangGraph 애플리케이션을 구성하는 기본 빌딩 블록을 살펴보겠습니다. | ||||||
|
||||||
<img src="https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit2/LangGraph/Building_blocks.png" alt="Building Blocks" width="70%"/> | ||||||
|
||||||
LangGraph 애플리케이션은 **진입점(entrypoint)**에서 시작하며, 실행 흐름에 따라 한 함수에서 다른 함수로 이동하다가 END에 도달합니다. | ||||||
|
||||||
<img src="https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit2/LangGraph/application.png" alt="Application"/> | ||||||
|
||||||
## 1. 상태[[state]] | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 원문 앵커를 보니 1-state로 작성되어 있더라고요.
Suggested change
|
||||||
|
||||||
**상태(State)**는 LangGraph의 중심 개념입니다. 애플리케이션을 통해 흐르는 모든 정보를 나타냅니다. | ||||||
|
||||||
```python | ||||||
from typing_extensions import TypedDict | ||||||
|
||||||
class State(TypedDict): | ||||||
graph_state: str | ||||||
``` | ||||||
|
||||||
상태는 **사용자 정의**이므로, 의사결정 과정에 필요한 모든 데이터를 포함하도록 신중하게 설계해야 합니다! | ||||||
|
||||||
> 💡 **팁:** 애플리케이션이 단계 간에 추적해야 할 정보가 무엇인지 신중하게 고민하세요. | ||||||
## 2. 노드[[nodes]] | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 원문 앵커를 보니 2-nodes로 작성되어 있더라고요.
Suggested change
|
||||||
|
||||||
**노드(Node)**는 파이썬 함수입니다. 각 노드는: | ||||||
- 상태를 입력으로 받습니다 | ||||||
- 작업을 수행합니다 | ||||||
- 상태 업데이트를 반환합니다 | ||||||
|
||||||
```python | ||||||
def node_1(state): | ||||||
print("---Node 1---") | ||||||
return {"graph_state": state['graph_state'] +" I am"} | ||||||
|
||||||
def node_2(state): | ||||||
print("---Node 2---") | ||||||
return {"graph_state": state['graph_state'] +" happy!"} | ||||||
|
||||||
def node_3(state): | ||||||
print("---Node 3---") | ||||||
return {"graph_state": state['graph_state'] +" sad!"} | ||||||
``` | ||||||
|
||||||
예를 들어, 노드는 다음과 같은 역할을 할 수 있습니다: | ||||||
- **LLM 호출**: 텍스트 생성 또는 의사결정 | ||||||
- **툴 호출**: 외부 시스템과 상호작용 | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 도구 호출이라는 표현은 어떨지 제안드려봅니다.
Suggested change
|
||||||
- **조건부 로직**: 다음 단계 결정 | ||||||
- **사람 개입**: 사용자 입력 받기 | ||||||
|
||||||
> 💡 **정보:** START와 END처럼 전체 워크플로우에 필수적인 일부 노드는 langGraph에서 직접 제공합니다. | ||||||
|
||||||
## 3. 엣지[[edges]] | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 원문 앵커를 보니 3-edges로 작성되어 있더라고요.
Suggested change
|
||||||
|
||||||
**엣지(Edge)**는 노드를 연결하며, 그래프 내에서 가능한 경로를 정의합니다: | ||||||
|
||||||
```python | ||||||
import random | ||||||
from typing import Literal | ||||||
|
||||||
def decide_mood(state) -> Literal["node_2", "node_3"]: | ||||||
|
||||||
# 종종 상태를 사용해 다음에 방문할 노드를 결정합니다 | ||||||
user_input = state['graph_state'] | ||||||
|
||||||
# 여기서는 노드 2, 3 사이를 50:50으로 분기합니다 | ||||||
if random.random() < 0.5: | ||||||
|
||||||
# 50% 확률로 Node 2 반환 | ||||||
return "node_2" | ||||||
|
||||||
# 50% 확률로 Node 3 반환 | ||||||
return "node_3" | ||||||
``` | ||||||
|
||||||
엣지는 다음과 같이 나뉩니다: | ||||||
- **직접(Direct)**: 항상 노드 A에서 노드 B로 이동 | ||||||
- **조건부(Conditional)**: 현재 상태에 따라 다음 노드를 선택 | ||||||
|
||||||
## 4. StateGraph[[stategraph]] | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 원문 앵커를 보니 4-stategraph로 작성되어 있더라고요.
Suggested change
|
||||||
|
||||||
**StateGraph**는 전체 에이전트 워크플로우를 담는 컨테이너입니다: | ||||||
|
||||||
```python | ||||||
from IPython.display import Image, display | ||||||
from langgraph.graph import StateGraph, START, END | ||||||
|
||||||
# 그래프 생성 | ||||||
builder = StateGraph(State) | ||||||
builder.add_node("node_1", node_1) | ||||||
builder.add_node("node_2", node_2) | ||||||
builder.add_node("node_3", node_3) | ||||||
|
||||||
# 로직 정의 | ||||||
builder.add_edge(START, "node_1") | ||||||
builder.add_conditional_edges("node_1", decide_mood) | ||||||
builder.add_edge("node_2", END) | ||||||
builder.add_edge("node_3", END) | ||||||
|
||||||
# 그래프 컴파일 | ||||||
graph = builder.compile() | ||||||
``` | ||||||
|
||||||
이제 시각화할 수 있습니다! | ||||||
```python | ||||||
# 시각화 | ||||||
display(Image(graph.get_graph().draw_mermaid_png())) | ||||||
``` | ||||||
<img src="https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit2/LangGraph/basic_graph.jpeg" alt="Graph Visualization"/> | ||||||
|
||||||
하지만 가장 중요한 것은 실제로 호출하는 것입니다: | ||||||
```python | ||||||
graph.invoke({"graph_state" : "Hi, this is Lance."}) | ||||||
``` | ||||||
출력 : | ||||||
``` | ||||||
---Node 1--- | ||||||
---Node 3--- | ||||||
{'graph_state': 'Hi, this is Lance. I am sad!'} | ||||||
``` | ||||||
|
||||||
## 다음 단계[[what's-next]] | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 원문 앵커를 보니 whats next로 작성되어 있더라고요.
Suggested change
|
||||||
|
||||||
다음 섹션에서는 이러한 개념을 실제로 적용하여 첫 번째 그래프를 만들어보겠습니다. 이 그래프는 Alfred가 이메일을 받아 분류하고, 정상 메일이라면 임시 답장을 작성할 수 있도록 합니다. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
# 결론[[conclusion]] | ||
|
||
2단원의 LangGraph 모듈을 완료하신 것을 축하합니다! 🥳 | ||
|
||
이제 LangGraph로 구조화된 워크플로우를 구축하는 기본기를 마스터하셨으며, 이를 실제 프로덕션 환경에 적용할 수 있습니다. | ||
|
||
이 모듈은 LangGraph 여정의 시작에 불과합니다. 심화 주제를 원하시는 분들을 위해 추천드립니다: | ||
|
||
- [공식 LangGraph 문서](https://github.com/langchain-ai/langgraph) 탐색 | ||
- LangChain 아카데미의 종합적인 [LangGraph 소개](https://academy.langchain.com/courses/intro-to-langgraph) 강의 수강 | ||
- 직접 무언가를 만들어보세요! | ||
|
||
다음 단원에서는 실제 사용 사례를 탐구합니다. 이제 이론을 넘어 실전으로 나아갈 시간입니다! | ||
|
||
**여러분의 강의에 대한 생각과 제안 사항들을 매우 환영합니다**. 피드백이 있으시면 👉 [이 양식](https://docs.google.com/forms/d/e/1FAIpQLSe9VaONn0eglax0uTwi29rIn4tM7H2sYmmybmG5jJNlE5v0xA/viewform?usp=dialog)을 작성해주세요! | ||
|
||
### 존경하는 여러분! 🎩🦇 | ||
배움을 멈추지 마세요 🤗 | ||
|
||
-알프레드- |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
세미나에서 들었을 때 제가 이해한 바로는 일반적으로는 커밋 하나당 하나의 번역 단위로 관리되는 걸로 알고 있어서,
원문 수정을 포함한 경우에는 별도 커밋으로 분리해야 하는지도 함께 검토해보시면 좋겠습니다.
혹시 제가 잘못 알고 있는 부분이이라면 resolved로 체크하고 넘어가시면 될 것 같습니다 😊