1 도구 호출 에이전트 (Tool Calling Agent)
- LLM에 Binding Tool을 호출 및 커스텀 tool을 개발하여 LLM에 붙이고 적절한 시점에 적절한 tool을 호출(invoke)하는 일련의 복잡한 작업을 간소화 및 편리하게 구현하는 방법을 다룬다.
- Tool Calling Agent는 LLM에게 개발자가 Tool을 개발하여 쥐어주게하고 적절한 시점에 적절한 tool을 알아서 사용하도록 하는 역할을 한다.
- 도구 호출을 사용하면 모델이 하나 이상의 도구(tool) 가 호출되어야 하는 시기를 감지하고 해당 도구에 전달해야 하는 입력 으로 전달할 수 있다.
- API 호출에서 도구를 설명하고 모델이 이러한 도구를 호출하기 위한 인수가 포함된 JSON과 같은 구조화된 객체를 출력하도록 지능적으로 선택할 수 있다.
- 도구 API 의 목표는 일반 텍스트 완성이나 채팅 API를 사용하여 수행할 수 있는 것보다 더 안정적으로 유효하고 유용한 도구 호출(tool call) 을 반환하는 것이다.
- 이러한 구조화된 출력을 도구 호출 채팅 모델에 여러 도구를 바인딩하고 모델이 호출할 도구를 선택할 수 있다는 사실과 결합하여 쿼리가 해결될 때까지 반복적으로 도구를 호출하고 결과를 수신하는 에이전트를 만들 수 있다.
- 이것은 OpenAI 의 특정 도구 호출 스타일에 맞게 설계된 OpenAI 도구 에이전트의 보다 일반화된 버전 이다.
- 이 에이전트는 LangChain의 ToolCall 인터페이스를 사용하여 OpenAI 외에도
Anthropic,Google Gemini,Mistral과 같은 더 광범위한 공급자 구현을 지원 - 무료 모델인 Ollama도 Tool Calling Agent기능을 제공
- Agent = LLM + Tool + Decision Cylcle
- Tool = LLM + (Tool1(웹검색), Tool2(문서검색), Tool3(코드실행), …)
- Cycle = Query (질문) > Tool (LLM + Tools) > Thought (어떤 도구를 선택해야하는지) + Memory (이전 대화내용 + 사용 Tool 활용) > Action (선택된 Tool 사용) > Observation (검색결과) > 정보확인
- 정보확인 단계에서 정보가 유익하면 출력 안유익하면 Thought 단계로 돌아간다 (다른 Tool 선택)
- 예시: 특정 맥락에 대한 파이썬 코드를 작성해달라고 LLM에 요청하면 LLM이 Tool을 선택하여 Action을 취하다가 파이썬 코드에 오류가 나면 다시 Thought 돌아가는 Cycle을 반복한다.
참고 링크

True
# LangSmith 추적을 설정한다. https://smith.langchain.com
# !pip install -qU langchain-teddynote
from langchain_teddynote import logging
# 프로젝트 이름을 입력한다.
logging.langsmith("CH15-Agents")LangSmith 추적을 시작한다.
[프로젝트명]
CH15-Agents
from langchain.tools import tool
from typing import List, Dict, Annotated
from langchain_teddynote.tools import GoogleNews
from langchain_experimental.utilities import PythonREPL
# 도구 생성
@tool
def search_news(query: str) -> List[Dict[str, str]]:
"""Search Google News by input keyword"""
news_tool = GoogleNews()
return news_tool.search_by_keyword(query, k=5)
# 커스텀 도구 생성
@tool
def python_repl_tool(
code: Annotated[str, "The python code to execute to generate your chart."],
):
"""Use this to execute python code. If you want to see the output of a value,
you should print it out with `print(...)`. This is visible to the user."""
result = ""
try:
result = PythonREPL().run(code)
except BaseException as e:
print(f"Failed to execute. Error: {repr(e)}")
finally:
return result
print(f"도구 이름: {search_news.name}")
print(f"도구 설명: {search_news.description}")
print(f"도구 이름: {python_repl_tool.name}")
print(f"도구 설명: {python_repl_tool.description}")도구 이름: search_news
도구 설명: Search Google News by input keyword
도구 이름: python_repl_tool
도구 설명: Use this to execute python code. If you want to see the output of a value,
you should print it out with `print(...)`. This is visible to the user.
1.1 Agent 프롬프트 생성
chat_history: 이전 대화 내용을 저장하는 변수 (멀티턴을 지원하지 않는다면, 생략 가능하다.)- 싱글턴: 1문 1답 하는 방식으로 이전의 대화를 기억하지 않음
- 멀티턴: 과거의 여러 대화들을 기억 및 활용해 다음 답변을 출력하는 방법
agent_scratchpad: 에이전트가 임시로 저장하는 변수로 에이전트가 사고하는 과정을 임시로 기억함input: 사용자의 입력
from langchain_core.prompts import ChatPromptTemplate
# 프롬프트 생성
# 프롬프트는 에이전트에게 모델이 수행할 작업을 설명하는 텍스트를 제공한다. (도구의 이름과 역할을 입력)
prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"You are a helpful assistant. "
"Make sure to use the `search_news` tool for searching keyword related news.",
),
("placeholder", "{chat_history}"),
("human", "{input}"),
("placeholder", "{agent_scratchpad}"),
]
)1.2 Agent 생성
1.3 AgentExecutor
- AgentExecutor는 도구를 사용하는 에이전트를 실행하는 클래스
- Agent와 중첩되는 기능들이 있지만 Agent의 움직임을 통제해주는 기능때문에 사용해야한다.
- 후에 multi agent를 구현할 시 Executor의 활용이 중요해진다.
주요 속성 - agent: 실행 루프의 각 단계에서 계획을 생성하고 행동을 결정하는 에이전트 - tools: 에이전트가 사용할 수 있는 유효한 도구 목록 - return_intermediate_steps: 최종 출력과 함께 에이전트의 중간 단계 경로를 반환할지 여부 - max_iterations: 실행 루프를 종료하기 전 최대 단계 수, agent가 무한 cycle에 빠지지 않도록 제어 가능 - max_execution_time: 실행 루프에 소요될 수 있는 최대 시간, agent가 무한 cycle에 빠지지 않도록 제어 가능 - early_stopping_method: 에이전트가 AgentFinish를 반환하지 않을 때 사용할 조기 종료 방법. (“force” or “generate”), agent가 무한 cycle에 빠지지 않도록 제어 가능 - "force" 는 시간 또는 반복 제한에 도달하여 중지되었다는 문자열을 반환한다. - "generate" 는 에이전트의 LLM 체인을 마지막으로 한 번 호출하여 이전 단계에 따라 최종 답변을 생성한다. - handle_parsing_errors: 에이전트의 출력 파서에서 발생한 오류 처리 방법. (True, False, 또는 오류 처리 함수) - True: error가 발생했을때 llm이 error을 개선하여 유연하게 출력을 생성 - trim_intermediate_steps: 중간 단계를 트리밍하는 방법. (-1 trim 하지 않음, 또는 트리밍 함수)
주요 메서드 1. invoke: 에이전트 실행 2. stream: 최종 출력에 도달하는 데 필요한 단계를 스트리밍
주요 기능 1. 도구 검증: 에이전트와 호환되는 도구인지 확인 2. 실행 제어: 최대 반복 횟수 및 실행 시간 제한 설정 가능 3. 오류 처리: 출력 파싱 오류에 대한 다양한 처리 옵션 제공 4. 중간 단계 관리: 중간 단계 트리밍 및 반환 옵션 5. 비동기 지원: 비동기 실행 및 스트리밍 지원
최적화 팁 - max_iterations와 max_execution_time을 적절히 설정하여 실행 시간 관리 - trim_intermediate_steps를 활용하여 메모리 사용량 최적화 - 복잡한 작업의 경우 stream 메서드를 사용하여 단계별 결과 모니터링
from langchain.agents import AgentExecutor
# AgentExecutor 생성
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
verbose=True,
max_iterations=10,
max_execution_time=10,
handle_parsing_errors=True,
)
# AgentExecutor 실행
result = agent_executor.invoke({"input": "AI 투자와 관련된 뉴스를 검색해 주세요."})
print("Agent 실행 결과:")
print(result["output"])Invoking: `search_news` with `{'query': 'AI 투자'}`
[{'url': 'https://news.google.com/rss/articles/CBMiS0FVX3lxTE51YlpldHRJY3JiQld5aTB2WDNYQXFUVmhaeGFkbE1ybERvZWE5QW5qOEt6MS10R3RFR0tBSHFDZWttazJPUjJzeVRzNA?oc=5', 'content': 'AI 투자 늘리는 통신사, 주파수 재할당 대가 마련 부담 - 전자신문'}, {'url': 'https://news.google.com/rss/articles/CBMiU0FVX3lxTFB1VDRjTlIxeHRjV3NKaERHMFJLOFNpUlNUVnZzQ0JvOUpISVE2cW9rbTZPVU9lQXZuUURJNHF0aDZyaDdQM0F5NFhsc0NrN1dHNEZz?oc=5', 'content': '글로벌 CEO들 "향후 3년 무조건 AI 투자···직원도 더 뽑을 것" - 네이트 뉴스'}, {'url': 'https://news.google.com/rss/articles/CBMiakFVX3lxTE9BQUtjd3pDS1dXRkZQTlo4Y2w2d2laZFFQRXdsbGlCMFRTcWJYLTNLaksxbFlnYzk3clVnYlFxZF93U2xubXY1VVhBTDQ2SDhLbm9hcDdXQ3prTlJtV0VCYTFINmNRbjR5N3c?oc=5', 'content': 'MIT 경제학자 "10년간 AI에 영향받을 직업은 5% 불과...기업은 투자비만 날리게 될 것" - AI타임스'}, {'url': 'https://news.google.com/rss/articles/CBMiW0FVX3lxTE9oenZObVAzOV9hbUliNGhkLTBXZXZrTGpvT0ljcXlpWE5leld2b3RLbUJFTFRtZnU4c0VFaC1oYkVvTTdESEZCYmZUTDJSMFFYdGVXeXN3OVdRTEE?oc=5', 'content': 'MS, 이탈리아에 AI 인프라 6조4천억 투자 결정 - 연합뉴스'}, {'url': 'https://news.google.com/rss/articles/CBMiiAFBVV95cUxOSVBVSnBvY2tXMnZQZTQ2OEliRTQyT0NSVTRMLUNNRFZQSnYzWXN5T3dyWDBnc1NZS2ZzOV9CSjFqT3kxZXFVck1qczJJUlRKZDh6cm5STHZteWk1bVltekdQVG1ZdnlpLUo3Rl9WQ0lSYjM4bFNHOXRYeUU3LVc0WkpfVW5kZDY10gGcAUFVX3lxTE5KRmdOOGkwYi1NZktDVXpWYWhRX0dlTW91NU45T1RURmlWNi14TU1ERnIxSzVwbTJEZnlOQVBnTUFsNHk5b3NjUzUyM2ljWFBuRl9OSFNTeVNhZ3BKV0pPWUNrRFIyRzJOS09GOFRnX1pZVHBxVnVGekRUWlRSSlozcmFPSFNpcEo4cThZOGxyel8wbzZuU2xNcjJUcg?oc=5', 'content': '“전 세계 CEO 72%, 3년간 경제 성장 낙관적… 투자 1순위 AI” - 조선비즈 - 조선비즈'}]다음은 AI 투자와 관련된 최근 뉴스 기사들입니다:
1. [AI 투자 늘리는 통신사, 주파수 재할당 대가 마련 부담 - 전자신문](https://news.google.com/rss/articles/CBMiS0FVX3lxTE51YlpldHRJY3JiQld5aTB2WDNYQXFUVmhaeGFkbE1ybERvZWE5QW5qOEt6MS10R3RFR0tBSHFDZWttazJPUjJzeVRzNA?oc=5)
2. [글로벌 CEO들 "향후 3년 무조건 AI 투자···직원도 더 뽑을 것" - 네이트 뉴스](https://news.google.com/rss/articles/CBMiU0FVX3lxTFB1VDRjTlIxeHRjV3NKaERHMFJLOFNpUlNUVnZzQ0JvOUpISVE2cW9rbTZPVU9lQXZuUURJNHF0aDZyaDdQM0F5NFhsc0NrN1dHNEZz?oc=5)
3. [MIT 경제학자 "10년간 AI에 영향받을 직업은 5% 불과...기업은 투자비만 날리게 될 것" - AI타임스](https://news.google.com/rss/articles/CBMiakFVX3lxTE9BQUtjd3pDS1dXRkZQTlo4Y2w2d2laZFFQRXdsbGlCMFRTcWJYLTNLaksxbFlnYzk3clVnYlFxZF93U2xubXY1VVhBTDQ2SDhLbm9hcDdXQ3prTlJtV0VCYTFINmNRbjR5N3c?oc=5)
4. [MS, 이탈리아에 AI 인프라 6조4천억 투자 결정 - 연합뉴스](https://news.google.com/rss/articles/CBMiW0FVX3lxTE9oenZObVAzOV9hbUliNGhkLTBXZXZrTGpvT0ljcXlpWE5leld2b3RLbUJFTFRtZnU4c0VFaC1oYkVvTTdESEZCYmZUTDJSMFFYdGVXeXN3OVdRTEE?oc=5)
5. [“전 세계 CEO 72%, 3년간 경제 성장 낙관적… 투자 1순위 AI” - 조선비즈](https://news.google.com/rss/articles/CBMiiAFBVV95cUxOSVBVSnBvY2tXMnZQZTQ2OEliRTQyT0NSVTRMLUNNRFZQSnYzWXN5T3dyWDBnc1NZS2ZzOV9CSjFqT3kxZXFVck1qczJJUlRKZDh6cm5STHZteWk1bVltekdQVG1ZdnlpLUo3Rl9WQ0lSYjM4bFNHOXRYeUU3LVc0WkpfVW5kZDY10gGcAUFVX3lxTE5KRmdOOGkwYi1NZktDVXpWYWhRX0dlTW91NU45T1RURmlWNi14TU1ERnIxSzVwbTJEZnlOQVBnTUFsNHk5b3NjUzUyM2ljWFBuRl9OSFNTeVNhZ3BKV0pPWUNrRFIyRzJOS09GOFRnX1pZVHBxVnVGekRUWlRSSlozcmFPSFNpcEo4cThZOGxyel8wbzZuU2xNcjJUcg?oc=5)
이 기사들은 AI 투자에 대한 다양한 관점과 최근 동향을 다루고 있습니다.
Agent 실행 결과:
다음은 AI 투자와 관련된 최근 뉴스 기사들입니다:
1. [AI 투자 늘리는 통신사, 주파수 재할당 대가 마련 부담 - 전자신문](https://news.google.com/rss/articles/CBMiS0FVX3lxTE51YlpldHRJY3JiQld5aTB2WDNYQXFUVmhaeGFkbE1ybERvZWE5QW5qOEt6MS10R3RFR0tBSHFDZWttazJPUjJzeVRzNA?oc=5)
2. [글로벌 CEO들 "향후 3년 무조건 AI 투자···직원도 더 뽑을 것" - 네이트 뉴스](https://news.google.com/rss/articles/CBMiU0FVX3lxTFB1VDRjTlIxeHRjV3NKaERHMFJLOFNpUlNUVnZzQ0JvOUpISVE2cW9rbTZPVU9lQXZuUURJNHF0aDZyaDdQM0F5NFhsc0NrN1dHNEZz?oc=5)
3. [MIT 경제학자 "10년간 AI에 영향받을 직업은 5% 불과...기업은 투자비만 날리게 될 것" - AI타임스](https://news.google.com/rss/articles/CBMiakFVX3lxTE9BQUtjd3pDS1dXRkZQTlo4Y2w2d2laZFFQRXdsbGlCMFRTcWJYLTNLaksxbFlnYzk3clVnYlFxZF93U2xubXY1VVhBTDQ2SDhLbm9hcDdXQ3prTlJtV0VCYTFINmNRbjR5N3c?oc=5)
4. [MS, 이탈리아에 AI 인프라 6조4천억 투자 결정 - 연합뉴스](https://news.google.com/rss/articles/CBMiW0FVX3lxTE9oenZObVAzOV9hbUliNGhkLTBXZXZrTGpvT0ljcXlpWE5leld2b3RLbUJFTFRtZnU4c0VFaC1oYkVvTTdESEZCYmZUTDJSMFFYdGVXeXN3OVdRTEE?oc=5)
5. [“전 세계 CEO 72%, 3년간 경제 성장 낙관적… 투자 1순위 AI” - 조선비즈](https://news.google.com/rss/articles/CBMiiAFBVV95cUxOSVBVSnBvY2tXMnZQZTQ2OEliRTQyT0NSVTRMLUNNRFZQSnYzWXN5T3dyWDBnc1NZS2ZzOV9CSjFqT3kxZXFVck1qczJJUlRKZDh6cm5STHZteWk1bVltekdQVG1ZdnlpLUo3Rl9WQ0lSYjM4bFNHOXRYeUU3LVc0WkpfVW5kZDY10gGcAUFVX3lxTE5KRmdOOGkwYi1NZktDVXpWYWhRX0dlTW91NU45T1RURmlWNi14TU1ERnIxSzVwbTJEZnlOQVBnTUFsNHk5b3NjUzUyM2ljWFBuRl9OSFNTeVNhZ3BKV0pPWUNrRFIyRzJOS09GOFRnX1pZVHBxVnVGekRUWlRSSlozcmFPSFNpcEo4cThZOGxyel8wbzZuU2xNcjJUcg?oc=5)
이 기사들은 AI 투자에 대한 다양한 관점과 최근 동향을 다루고 있습니다.
1.4 Stream 출력으로 단계별 결과 확인
- AgentExecutor의
stream()메소드를 사용하여 에이전트의 중간 단계 출력을 스트리밍할 것 - 중간 단계 출력이 약간 복잡해서 확인하기 어려워 구현이 필요하다.
stream()의 출력은 (Action, Observation) 쌍 사이에서 번갈아 나타나며, 최종적으로 에이전트가 목표를 달성했다면 답변으로 마무리된다.- 다음과 같은 형태로 보일 것이다.
- Action 출력
- Observation 출력
- Action 출력
- Observation 출력
… (목표 달성까지 계속) …
그 다음, 최종 목표가 달성되면 에이전트는 최종 답변을 출력할 것이다.
이러한 출력의 내용은 다음과 같이 요약된다.
| 출력 | 내용 |
|---|---|
| Action | actions: AgentAction 또는 그 하위 클래스messages: 액션 호출에 해당하는 채팅 메시지 |
| Observation | steps: 현재 액션과 그 관찰을 포함한 에이전트가 지금까지 수행한 작업을 기록messages: 함수 호출 결과(즉, 관찰)를 포함한 채팅 메시지 |
| Final Answer | output: AgentFinishmessages: 최종 출력을 포함한 채팅 메시지 |
from langchain.agents import AgentExecutor
# AgentExecutor 생성
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
verbose=False,
handle_parsing_errors=True,
)# 스트리밍 모드로 실행한다
result = agent_executor.stream({"input": "AI 투자와 관련된 뉴스를 검색해 주세요."})
for step in result:
# 중간 단계 출력
print(step)
print("===" * 20) # 단계 구분{'actions': [ToolAgentAction(tool='search_news', tool_input={'query': 'AI 투자'}, log="\nInvoking: `search_news` with `{'query': 'AI 투자'}`\n\n\n", message_log=[AIMessageChunk(content='', additional_kwargs={'tool_calls': [{'index': 0, 'id': 'call_dWv4C6NpksKE1IyaVmXjuDtT', 'function': {'arguments': '{"query":"AI 투자"}', 'name': 'search_news'}, 'type': 'function'}]}, response_metadata={'finish_reason': 'tool_calls', 'model_name': 'gpt-4o-mini-2024-07-18', 'system_fingerprint': 'fp_f85bea6784'}, id='run-75795ef1-9b6b-4733-9dff-009486316af6', tool_calls=[{'name': 'search_news', 'args': {'query': 'AI 투자'}, 'id': 'call_dWv4C6NpksKE1IyaVmXjuDtT', 'type': 'tool_call'}], tool_call_chunks=[{'name': 'search_news', 'args': '{"query":"AI 투자"}', 'id': 'call_dWv4C6NpksKE1IyaVmXjuDtT', 'index': 0, 'type': 'tool_call_chunk'}])], tool_call_id='call_dWv4C6NpksKE1IyaVmXjuDtT')], 'messages': [AIMessageChunk(content='', additional_kwargs={'tool_calls': [{'index': 0, 'id': 'call_dWv4C6NpksKE1IyaVmXjuDtT', 'function': {'arguments': '{"query":"AI 투자"}', 'name': 'search_news'}, 'type': 'function'}]}, response_metadata={'finish_reason': 'tool_calls', 'model_name': 'gpt-4o-mini-2024-07-18', 'system_fingerprint': 'fp_f85bea6784'}, id='run-75795ef1-9b6b-4733-9dff-009486316af6', tool_calls=[{'name': 'search_news', 'args': {'query': 'AI 투자'}, 'id': 'call_dWv4C6NpksKE1IyaVmXjuDtT', 'type': 'tool_call'}], tool_call_chunks=[{'name': 'search_news', 'args': '{"query":"AI 투자"}', 'id': 'call_dWv4C6NpksKE1IyaVmXjuDtT', 'index': 0, 'type': 'tool_call_chunk'}])]}
{'steps': [AgentStep(action=ToolAgentAction(tool='search_news', tool_input={'query': 'AI 투자'}, log="\nInvoking: `search_news` with `{'query': 'AI 투자'}`\n\n\n", message_log=[AIMessageChunk(content='', additional_kwargs={'tool_calls': [{'index': 0, 'id': 'call_dWv4C6NpksKE1IyaVmXjuDtT', 'function': {'arguments': '{"query":"AI 투자"}', 'name': 'search_news'}, 'type': 'function'}]}, response_metadata={'finish_reason': 'tool_calls', 'model_name': 'gpt-4o-mini-2024-07-18', 'system_fingerprint': 'fp_f85bea6784'}, id='run-75795ef1-9b6b-4733-9dff-009486316af6', tool_calls=[{'name': 'search_news', 'args': {'query': 'AI 투자'}, 'id': 'call_dWv4C6NpksKE1IyaVmXjuDtT', 'type': 'tool_call'}], tool_call_chunks=[{'name': 'search_news', 'args': '{"query":"AI 투자"}', 'id': 'call_dWv4C6NpksKE1IyaVmXjuDtT', 'index': 0, 'type': 'tool_call_chunk'}])], tool_call_id='call_dWv4C6NpksKE1IyaVmXjuDtT'), observation=[{'url': 'https://news.google.com/rss/articles/CBMiS0FVX3lxTE51YlpldHRJY3JiQld5aTB2WDNYQXFUVmhaeGFkbE1ybERvZWE5QW5qOEt6MS10R3RFR0tBSHFDZWttazJPUjJzeVRzNA?oc=5', 'content': 'AI 투자 늘리는 통신사, 주파수 재할당 대가 마련 부담 - 전자신문'}, {'url': 'https://news.google.com/rss/articles/CBMiU0FVX3lxTFB1VDRjTlIxeHRjV3NKaERHMFJLOFNpUlNUVnZzQ0JvOUpISVE2cW9rbTZPVU9lQXZuUURJNHF0aDZyaDdQM0F5NFhsc0NrN1dHNEZz?oc=5', 'content': '글로벌 CEO들 "향후 3년 무조건 AI 투자···직원도 더 뽑을 것" - 네이트 뉴스'}, {'url': 'https://news.google.com/rss/articles/CBMiakFVX3lxTE9BQUtjd3pDS1dXRkZQTlo4Y2w2d2laZFFQRXdsbGlCMFRTcWJYLTNLaksxbFlnYzk3clVnYlFxZF93U2xubXY1VVhBTDQ2SDhLbm9hcDdXQ3prTlJtV0VCYTFINmNRbjR5N3c?oc=5', 'content': 'MIT 경제학자 "10년간 AI에 영향받을 직업은 5% 불과...기업은 투자비만 날리게 될 것" - AI타임스'}, {'url': 'https://news.google.com/rss/articles/CBMiW0FVX3lxTE9oenZObVAzOV9hbUliNGhkLTBXZXZrTGpvT0ljcXlpWE5leld2b3RLbUJFTFRtZnU4c0VFaC1oYkVvTTdESEZCYmZUTDJSMFFYdGVXeXN3OVdRTEE?oc=5', 'content': 'MS, 이탈리아에 AI 인프라 6조4천억 투자 결정 - 연합뉴스'}, {'url': 'https://news.google.com/rss/articles/CBMiiAFBVV95cUxOSVBVSnBvY2tXMnZQZTQ2OEliRTQyT0NSVTRMLUNNRFZQSnYzWXN5T3dyWDBnc1NZS2ZzOV9CSjFqT3kxZXFVck1qczJJUlRKZDh6cm5STHZteWk1bVltekdQVG1ZdnlpLUo3Rl9WQ0lSYjM4bFNHOXRYeUU3LVc0WkpfVW5kZDY10gGcAUFVX3lxTE5KRmdOOGkwYi1NZktDVXpWYWhRX0dlTW91NU45T1RURmlWNi14TU1ERnIxSzVwbTJEZnlOQVBnTUFsNHk5b3NjUzUyM2ljWFBuRl9OSFNTeVNhZ3BKV0pPWUNrRFIyRzJOS09GOFRnX1pZVHBxVnVGekRUWlRSSlozcmFPSFNpcEo4cThZOGxyel8wbzZuU2xNcjJUcg?oc=5', 'content': '“전 세계 CEO 72%, 3년간 경제 성장 낙관적… 투자 1순위 AI” - 조선비즈 - 조선비즈'}])], 'messages': [FunctionMessage(content='[{"url": "https://news.google.com/rss/articles/CBMiS0FVX3lxTE51YlpldHRJY3JiQld5aTB2WDNYQXFUVmhaeGFkbE1ybERvZWE5QW5qOEt6MS10R3RFR0tBSHFDZWttazJPUjJzeVRzNA?oc=5", "content": "AI 투자 늘리는 통신사, 주파수 재할당 대가 마련 부담 - 전자신문"}, {"url": "https://news.google.com/rss/articles/CBMiU0FVX3lxTFB1VDRjTlIxeHRjV3NKaERHMFJLOFNpUlNUVnZzQ0JvOUpISVE2cW9rbTZPVU9lQXZuUURJNHF0aDZyaDdQM0F5NFhsc0NrN1dHNEZz?oc=5", "content": "글로벌 CEO들 \\"향후 3년 무조건 AI 투자···직원도 더 뽑을 것\\" - 네이트 뉴스"}, {"url": "https://news.google.com/rss/articles/CBMiakFVX3lxTE9BQUtjd3pDS1dXRkZQTlo4Y2w2d2laZFFQRXdsbGlCMFRTcWJYLTNLaksxbFlnYzk3clVnYlFxZF93U2xubXY1VVhBTDQ2SDhLbm9hcDdXQ3prTlJtV0VCYTFINmNRbjR5N3c?oc=5", "content": "MIT 경제학자 \\"10년간 AI에 영향받을 직업은 5% 불과...기업은 투자비만 날리게 될 것\\" - AI타임스"}, {"url": "https://news.google.com/rss/articles/CBMiW0FVX3lxTE9oenZObVAzOV9hbUliNGhkLTBXZXZrTGpvT0ljcXlpWE5leld2b3RLbUJFTFRtZnU4c0VFaC1oYkVvTTdESEZCYmZUTDJSMFFYdGVXeXN3OVdRTEE?oc=5", "content": "MS, 이탈리아에 AI 인프라 6조4천억 투자 결정 - 연합뉴스"}, {"url": "https://news.google.com/rss/articles/CBMiiAFBVV95cUxOSVBVSnBvY2tXMnZQZTQ2OEliRTQyT0NSVTRMLUNNRFZQSnYzWXN5T3dyWDBnc1NZS2ZzOV9CSjFqT3kxZXFVck1qczJJUlRKZDh6cm5STHZteWk1bVltekdQVG1ZdnlpLUo3Rl9WQ0lSYjM4bFNHOXRYeUU3LVc0WkpfVW5kZDY10gGcAUFVX3lxTE5KRmdOOGkwYi1NZktDVXpWYWhRX0dlTW91NU45T1RURmlWNi14TU1ERnIxSzVwbTJEZnlOQVBnTUFsNHk5b3NjUzUyM2ljWFBuRl9OSFNTeVNhZ3BKV0pPWUNrRFIyRzJOS09GOFRnX1pZVHBxVnVGekRUWlRSSlozcmFPSFNpcEo4cThZOGxyel8wbzZuU2xNcjJUcg?oc=5", "content": "“전 세계 CEO 72%, 3년간 경제 성장 낙관적… 투자 1순위 AI” - 조선비즈 - 조선비즈"}]', name='search_news')]}
{'output': '다음은 AI 투자와 관련된 최근 뉴스 기사들입니다:\n\n1. [AI 투자 늘리는 통신사, 주파수 재할당 대가 마련 부담 - 전자신문](https://news.google.com/rss/articles/CBMiS0FVX3lxTE51YlpldHRJY3JiQld5aTB2WDNYQXFUVmhaeGFkbE1ybERvZWE5QW5qOEt6MS10R3RFR0tBSHFDZWttazJPUjJzeVRzNA?oc=5)\n\n2. [글로벌 CEO들 "향후 3년 무조건 AI 투자···직원도 더 뽑을 것" - 네이트 뉴스](https://news.google.com/rss/articles/CBMiU0FVX3lxTFB1VDRjTlIxeHRjV3NKaERHMFJLOFNpUlNUVnZzQ0JvOUpISVE2cW9rbTZPVU9lQXZuUURJNHF0aDZyaDdQM0F5NFhsc0NrN1dHNEZz?oc=5)\n\n3. [MIT 경제학자 "10년간 AI에 영향받을 직업은 5% 불과...기업은 투자비만 날리게 될 것" - AI타임스](https://news.google.com/rss/articles/CBMiakFVX3lxTE9BQUtjd3pDS1dXRkZQTlo4Y2w2d2laZFFQRXdsbGlCMFRTcWJYLTNLaksxbFlnYzk3clVnYlFxZF93U2xubXY1VVhBTDQ2SDhLbm9hcDdXQ3prTlJtV0VCYTFINmNRbjR5N3c?oc=5)\n\n4. [MS, 이탈리아에 AI 인프라 6조4천억 투자 결정 - 연합뉴스](https://news.google.com/rss/articles/CBMiW0FVX3lxTE9oenZObVAzOV9hbUliNGhkLTBXZXZrTGpvT0ljcXlpWE5leld2b3RLbUJFTFRtZnU4c0VFaC1oYkVvTTdESEZCYmZUTDJSMFFYdGVXeXN3OVdRTEE?oc=5)\n\n5. [“전 세계 CEO 72%, 3년간 경제 성장 낙관적… 투자 1순위 AI” - 조선비즈](https://news.google.com/rss/articles/CBMiiAFBVV95cUxOSVBVSnBvY2tXMnZQZTQ2OEliRTQyT0NSVTRMLUNNRFZQSnYzWXN5T3dyWDBnc1NZS2ZzOV9CSjFqT3kxZXFVck1qczJJUlRKZDh6cm5STHZteWk1bVltekdQVG1ZdnlpLUo3Rl9WQ0lSYjM4bFNHOXRYeUU3LVc0WkpfVW5kZDY10gGcAUFVX3lxTE5KRmdOOGkwYi1NZktDVXpWYWhRX0dlTW91NU45T1RURmlWNi14TU1ERnIxSzVwbTJEZnlOQVBnTUFsNHk5b3NjUzUyM2ljWFBuRl9OSFNTeVNhZ3BKV0pPWUNrRFIyRzJOS09GOFRnX1pZVHBxVnVGekRUWlRSSlozcmFPSFNpcEo4cThZOGxyel8wbzZuU2xNcjJUcg?oc=5)\n\n이 기사들은 AI 투자에 대한 다양한 관점과 최근 동향을 다루고 있습니다.', 'messages': [AIMessage(content='다음은 AI 투자와 관련된 최근 뉴스 기사들입니다:\n\n1. [AI 투자 늘리는 통신사, 주파수 재할당 대가 마련 부담 - 전자신문](https://news.google.com/rss/articles/CBMiS0FVX3lxTE51YlpldHRJY3JiQld5aTB2WDNYQXFUVmhaeGFkbE1ybERvZWE5QW5qOEt6MS10R3RFR0tBSHFDZWttazJPUjJzeVRzNA?oc=5)\n\n2. [글로벌 CEO들 "향후 3년 무조건 AI 투자···직원도 더 뽑을 것" - 네이트 뉴스](https://news.google.com/rss/articles/CBMiU0FVX3lxTFB1VDRjTlIxeHRjV3NKaERHMFJLOFNpUlNUVnZzQ0JvOUpISVE2cW9rbTZPVU9lQXZuUURJNHF0aDZyaDdQM0F5NFhsc0NrN1dHNEZz?oc=5)\n\n3. [MIT 경제학자 "10년간 AI에 영향받을 직업은 5% 불과...기업은 투자비만 날리게 될 것" - AI타임스](https://news.google.com/rss/articles/CBMiakFVX3lxTE9BQUtjd3pDS1dXRkZQTlo4Y2w2d2laZFFQRXdsbGlCMFRTcWJYLTNLaksxbFlnYzk3clVnYlFxZF93U2xubXY1VVhBTDQ2SDhLbm9hcDdXQ3prTlJtV0VCYTFINmNRbjR5N3c?oc=5)\n\n4. [MS, 이탈리아에 AI 인프라 6조4천억 투자 결정 - 연합뉴스](https://news.google.com/rss/articles/CBMiW0FVX3lxTE9oenZObVAzOV9hbUliNGhkLTBXZXZrTGpvT0ljcXlpWE5leld2b3RLbUJFTFRtZnU4c0VFaC1oYkVvTTdESEZCYmZUTDJSMFFYdGVXeXN3OVdRTEE?oc=5)\n\n5. [“전 세계 CEO 72%, 3년간 경제 성장 낙관적… 투자 1순위 AI” - 조선비즈](https://news.google.com/rss/articles/CBMiiAFBVV95cUxOSVBVSnBvY2tXMnZQZTQ2OEliRTQyT0NSVTRMLUNNRFZQSnYzWXN5T3dyWDBnc1NZS2ZzOV9CSjFqT3kxZXFVck1qczJJUlRKZDh6cm5STHZteWk1bVltekdQVG1ZdnlpLUo3Rl9WQ0lSYjM4bFNHOXRYeUU3LVc0WkpfVW5kZDY10gGcAUFVX3lxTE5KRmdOOGkwYi1NZktDVXpWYWhRX0dlTW91NU45T1RURmlWNi14TU1ERnIxSzVwbTJEZnlOQVBnTUFsNHk5b3NjUzUyM2ljWFBuRl9OSFNTeVNhZ3BKV0pPWUNrRFIyRzJOS09GOFRnX1pZVHBxVnVGekRUWlRSSlozcmFPSFNpcEo4cThZOGxyel8wbzZuU2xNcjJUcg?oc=5)\n\n이 기사들은 AI 투자에 대한 다양한 관점과 최근 동향을 다루고 있습니다.')]}
1.4.1 중간 단계 출력을 사용자 정의 함수로 출력
다음의 3개 함수를 정의하고 이를 통해 중간 단계 출력을 사용자 정의한다.
tool_callback: 도구 호출 출력을 처리하는 함수 (엄밀히 말하면 parser에 좀 가까움)observation_callback: 관찰(Observation) 출력을 처리하는 함수result_callback: 최종 답변 출력을 처리하는 함수
아래는 Agent 의 중간 단계 과정을 깔끔하게 출력하기 위하여 사용되는 콜백 함수다.
이 콜백 함수는 Streamlit 에서 중간 단계를 출력하여 사용자에게 제공할 때 유용할 수 있다.
from langchain_teddynote.messages import AgentStreamParser
agent_stream_parser = AgentStreamParser()스트리밍 방식으로 Agent 의 응답 과정을 확인한다.
# 질의에 대한 답변을 스트리밍으로 출력 요청
result = agent_executor.stream(
{"input": "matplotlib 을 사용하여 pie 차트를 그리는 코드를 작성하고 실행하세요."}
)
for step in result:
# 중간 단계를 parser 를 사용하여 단계별로 출력
# print(step)
agent_stream_parser.process_agent_steps(step)[도구 호출]
Tool: python_repl_tool
code: import matplotlib.pyplot as plt
# 데이터
sizes = [15, 30, 45, 10]
labels = ['A', 'B', 'C', 'D']
colors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue']
# 파이 차트 그리기
plt.figure(figsize=(8, 6))
plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', startangle=140)
plt.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle.
plt.title('Pie Chart Example')
plt.show()
Log:
Invoking: `python_repl_tool` with `{'code': "import matplotlib.pyplot as plt\n\n# 데이터\nsizes = [15, 30, 45, 10]\nlabels = ['A', 'B', 'C', 'D']\ncolors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue']\n\n# 파이 차트 그리기\nplt.figure(figsize=(8, 6))\nplt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', startangle=140)\nplt.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle.\nplt.title('Pie Chart Example')\nplt.show()"}`
[관찰 내용]
Observation:
[최종 답변]
파이 차트가 성공적으로 그려졌습니다. 차트에는 A, B, C, D의 네 가지 카테고리가 포함되어 있으며, 각 카테고리의 비율이 표시되어 있습니다. 추가적인 질문이나 요청이 있으시면 말씀해 주세요!
- 서비스할때 도구 호출을 통해 중간 결과물을 보여주고 싶을 때 프린트문을 바로 보여주긴 번거롭다.
- 다음은 callback (커스텀 코드 작성) 을 수정하여 사용하여 중간 결과물을 보여줄 수 있는 방법이다.
# AgentCallbacks와 AgentStreamParser를 langchain_teddynote.messages에서 가져온다.
from langchain_teddynote.messages import AgentCallbacks, AgentStreamParser
# 도구 호출 시 실행되는 콜백 함수다. (Action부분을 출력)
def tool_callback(tool) -> None:
print("<<<<<<< 도구 호출 >>>>>>")
print(f"Tool: {tool.get('tool')}") # 사용된 도구의 이름을 출력한다.
#st.markdown(f"Tool: {tool.get('tool')}") # streamlit 서비스에 중간 산출물 보여줌
print("<<<<<<< 도구 호출 >>>>>>")
# 관찰 결과를 출력하는 콜백 함수다. (Observation 부분을 출력)
# 1번째 중간단계만 호출하고 있지만 반복문 작성을 통해 여러 중간 산출물을 출력할 수 있다.
def observation_callback(observation) -> None:
print("<<<<<<< 관찰 내용 >>>>>>")
print(
f"Observation: {observation.get('observation')[0]}"
) # 관찰 내용을 출력한다.
#st.markdown(f"Observation: {observation.get('observation')[0]}") # streamlit 서비스에 중간 산출물 보여줌
print("<<<<<<< 관찰 내용 >>>>>>")
# 최종 결과를 출력하는 콜백 함수다. (Final Answer부분을 출력)
def result_callback(result: str) -> None:
print("<<<<<<< 최종 답변 >>>>>>")
print(result) # 최종 답변을 출력한다.
print("<<<<<<< 최종 답변 >>>>>>")
# AgentCallbacks 객체를 생성하여 각 단계별 콜백 함수를 설정한다.
agent_callbacks = AgentCallbacks(
tool_callback=tool_callback,
observation_callback=observation_callback,
result_callback=result_callback,
)
# AgentStreamParser 객체를 생성하여 에이전트의 실행 과정을 파싱한다.
agent_stream_parser = AgentStreamParser(agent_callbacks)아래의 출력 내용을 확인해 보면 중간 내용의 출력 값이 내가 변경한 콜백 함수의 출력 값으로 변경된 것을 확인할 수 있다.
# 질의에 대한 답변을 스트리밍으로 출력 요청
result = agent_executor.stream({"input": "AI 투자관련 뉴스를 검색해 주세요."})
for step in result:
# 중간 단계를 parser 를 사용하여 단계별로 출력
agent_stream_parser.process_agent_steps(step)<<<<<<< 도구 호출 >>>>>>
Tool: search_news
<<<<<<< 도구 호출 >>>>>>
<<<<<<< 관찰 내용 >>>>>>
Observation: {'url': 'https://news.google.com/rss/articles/CBMiS0FVX3lxTE51YlpldHRJY3JiQld5aTB2WDNYQXFUVmhaeGFkbE1ybERvZWE5QW5qOEt6MS10R3RFR0tBSHFDZWttazJPUjJzeVRzNA?oc=5', 'content': 'AI 투자 늘리는 통신사, 주파수 재할당 대가 마련 부담 - 전자신문'}
<<<<<<< 관찰 내용 >>>>>>
<<<<<<< 최종 답변 >>>>>>
다음은 AI 투자와 관련된 최근 뉴스 기사들입니다:
1. [AI 투자 늘리는 통신사, 주파수 재할당 대가 마련 부담 - 전자신문](https://news.google.com/rss/articles/CBMiS0FVX3lxTE51YlpldHRJY3JiQld5aTB2WDNYQXFUVmhaeGFkbE1ybERvZWE5QW5qOEt6MS10R3RFR0tBSHFDZWttazJPUjJzeVRzNA?oc=5)
2. [글로벌 CEO들 "향후 3년 무조건 AI 투자···직원도 더 뽑을 것" - 네이트 뉴스](https://news.google.com/rss/articles/CBMiU0FVX3lxTFB1VDRjTlIxeHRjV3NKaERHMFJLOFNpUlNUVnZzQ0JvOUpISVE2cW9rbTZPVU9lQXZuUURJNHF0aDZyaDdQM0F5NFhsc0NrN1dHNEZz?oc=5)
3. [MIT 경제학자 "10년간 AI에 영향받을 직업은 5% 불과...기업은 투자비만 날리게 될 것" - AI타임스](https://news.google.com/rss/articles/CBMiakFVX3lxTE9BQUtjd3pDS1dXRkZQTlo4Y2w2d2laZFFQRXdsbGlCMFRTcWJYLTNLaksxbFlnYzk3clVnYlFxZF93U2xubXY1VVhBTDQ2SDhLbm9hcDdXQ3prTlJtV0VCYTFINmNRbjR5N3c?oc=5)
4. [MS, 이탈리아에 AI 인프라 6조4천억 투자 결정 - 연합뉴스](https://news.google.com/rss/articles/CBMiW0FVX3lxTE9oenZObVAzOV9hbUliNGhkLTBXZXZrTGpvT0ljcXlpWE5leld2b3RLbUJFTFRtZnU4c0VFaC1oYkVvTTdESEZCYmZUTDJSMFFYdGVXeXN3OVdRTEE?oc=5)
5. [“전 세계 CEO 72%, 3년간 경제 성장 낙관적… 투자 1순위 AI” - 조선비즈](https://news.google.com/rss/articles/CBMiiAFBVV95cUxOSVBVSnBvY2tXMnZQZTQ2OEliRTQyT0NSVTRMLUNNRFZQSnYzWXN5T3dyWDBnc1NZS2ZzOV9CSjFqT3kxZXFVck1qczJJUlRKZDh6cm5STHZteWk1bVltekdQVG1ZdnlpLUo3Rl9WQ0lSYjM4bFNHOXRYeUU3LVc0WkpfVW5kZDY10gGcAUFVX3lxTE5KRmdOOGkwYi1NZktDVXpWYWhRX0dlTW91NU45T1RURmlWNi14TU1ERnIxSzVwbTJEZnlOQVBnTUFsNHk5b3NjUzUyM2ljWFBuRl9OSFNTeVNhZ3BKV0pPWUNrRFIyRzJOS09GOFRnX1pZVHBxVnVGekRUWlRSSlozcmFPSFNpcEo4cThZOGxyel8wbzZuU2xNcjJUcg?oc=5)
이 기사들은 AI 투자에 대한 다양한 관점과 최근 동향을 다루고 있습니다.
<<<<<<< 최종 답변 >>>>>>
1.5 이전 대화내용 기억하는 Agent
- 이전의 대화내용을 기억하기 위해서는
RunnableWithMessageHistory를 사용하여AgentExecutor를 감싸준다.
RunnableWithMessageHistory 에 대한 자세한 내용은 아래 링크를 참고한다.
참고 - RunnableWithMessageHistory
from langchain_community.chat_message_histories import ChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory
# 대화내용을 저장: session_id (각 사용자의 여러 대화 채널들의 ID값) 를 저장할 딕셔너리 생성
store = {}
# session_id 를 기반으로 세션 기록을 가져오는 함수
def get_session_history(session_ids):
if session_ids not in store: # session_id 가 store에 없는 경우
# 새로운 ChatMessageHistory 객체를 생성하여 store에 저장
store[session_ids] = ChatMessageHistory()
return store[session_ids] # 해당 세션 ID에 대한 세션 기록 반환
# 채팅 메시지 기록이 추가된 에이전트를 생성한다.
agent_with_chat_history = RunnableWithMessageHistory(
agent_executor,
# 대화 session_id
get_session_history,
# 프롬프트의 질문이 입력되는 key: "input"
input_messages_key="input",
# 프롬프트의 메시지가 입력되는 key: "chat_history"
history_messages_key="chat_history",
)# 질의에 대한 답변을 스트리밍으로 출력 요청 (간단하기 때문에 도구 호출이 발생하지 않음)
response = agent_with_chat_history.stream(
{"input": "안녕? 내 이름은 테디야!"},
# session_id 설정
config={"configurable": {"session_id": "abc123"}},
)
# 출력 확인
for step in response:
agent_stream_parser.process_agent_steps(step)<<<<<<< 최종 답변 >>>>>>
안녕하세요, 테디! 만나서 반가워요. 어떻게 도와드릴까요?
<<<<<<< 최종 답변 >>>>>>
# 질의에 대한 답변을 스트리밍으로 출력 요청
response = agent_with_chat_history.stream(
{"input": "내 이름이 뭐라고?"},
# session_id 설정
config={"configurable": {"session_id": "abc123"}},
)
# 출력 확인
for step in response:
agent_stream_parser.process_agent_steps(step)<<<<<<< 최종 답변 >>>>>>
당신의 이름은 테디입니다!
<<<<<<< 최종 답변 >>>>>>
# 질의에 대한 답변을 스트리밍으로 출력 요청
response = agent_with_chat_history.stream(
{
"input": "내 이메일 주소는 teddy@teddynote.com 이야. 회사 이름은 테디노트 주식회사야."
},
# session_id 설정
config={"configurable": {"session_id": "abc123"}},
)
# 출력 확인
for step in response:
agent_stream_parser.process_agent_steps(step)<<<<<<< 최종 답변 >>>>>>
감사합니다, 테디! 테디노트 주식회사에 대해 더 알고 싶으신가요? 아니면 다른 도움이 필요하신가요?
<<<<<<< 최종 답변 >>>>>>
# 질의에 대한 답변을 스트리밍으로 출력 요청
response = agent_with_chat_history.stream(
{
"input": "최신 뉴스 5개를 검색해서 이메일의 본문으로 작성해줘. "
"수신인에는 `셜리 상무님` 그리고, 발신인에는 내 인적정보를 적어줘."
"정중한 어조로 작성하고, 메일의 시작과 끝에는 적절한 인사말과 맺음말을 적어줘."
},
# session_id 설정
config={"configurable": {"session_id": "abc123"}},
)
# 출력 확인
for step in response:
agent_stream_parser.process_agent_steps(step)<<<<<<< 도구 호출 >>>>>>
Tool: search_news
<<<<<<< 도구 호출 >>>>>>
<<<<<<< 관찰 내용 >>>>>>
Observation: {'url': 'https://news.google.com/rss/articles/CBMiakFVX3lxTFB6b3FPREFINURLSy1pVUZDbXB4X3JwaW1fVGNCRks1RklJMDFNTWxCbURTbGMwU05kWVRRLU9xNnVFUkNPVFNLaUlTOThQaDRoQzlKQWtsQnVETnFqbEhGc2hIQnU2RERoS3c?oc=5', 'content': '인사이드 구글 - The Keyword'}
<<<<<<< 관찰 내용 >>>>>>
<<<<<<< 최종 답변 >>>>>>
아래는 셜리 상무님께 보낼 이메일 본문입니다.
---
제목: 최신 뉴스 업데이트
안녕하세요, 셜리 상무님.
테디노트 주식회사의 테디입니다. 최근의 주요 뉴스를 아래와 같이 정리하여 전달드립니다.
1. [인사이드 구글 - The Keyword](https://news.google.com/rss/articles/CBMiakFVX3lxTFB6b3FPREFINURLSy1pVUZDbXB4X3JwaW1fVGNCRks1RklJMDFNTWxCbURTbGMwU05kWVRRLU9xNnVFUkNPVFNLaUlTOThQaDRoQzlKQWtsQnVETnFqbEhGc2hIQnU2RERoS3c?oc=5)
2. [지역별 가격 조정 예고 - Riot Games](https://news.google.com/rss/articles/CBMickFVX3lxTE9USmRUM2lXX0NkdXgwdWlYMk1MQnprMmEwT3UySUd0MFg1VTJzQldNMGNXVEw4N0VvUlJDaklEX2Vybl9QcGIwTGwyNzhYeS1sVkJmSDRDbDliRm9FOWRpMlJiM0FrWDBsb0RCeExKTVhYZw?oc=5)
3. ['제135회 중국수출입박람회' 광저우서 개막 - 최신 뉴스 온라인 선전시 정부](https://news.google.com/rss/articles/CBMieEFVX3lxTE1lUzhZOU9WTGE1Z2JwcTdJbldlZG5ac0QxSy1WWkI4b3lGQVFBU2ItUUwwbGZJZEVDaGZrVE5xMzl0OVVmZEtIaEoxaHVIX3RERkgzVEltOFRvS0dOX05ReDBSelJXaktNWVF0N2RxMU44MVNCdDNXcw?oc=5)
4. [김정은 전용차 또 바꿨나…최신 마이바흐 SUV 포착 - 연합뉴스TV](https://news.google.com/rss/articles/CBMiZ0FVX3lxTFBsU0pmcm9Cb0RId2FVTFBzZVg0UTN5WFBjTVVRbDhBTG1DMmdTYlFNaGJVUl9hVjhBUlpSNGRBM3QzdGFxcWVZT0pCTkhIMGRLbmRITUR3ZXNHMVJURE90Y1U1SmQ0NFU?oc=5)
5. [군, 대북 확성기 방송…최신 탈북자 뉴스부터 ‘탈출하라’ 내용까지 - KBS뉴스](https://news.google.com/rss/articles/CBMiW0FVX3lxTE0tU0xLX21DLUlJb2ZDemhUYlNpMDlHNmdwLVJ4Z1FYVmJFdk1GWndBd29LMmVVV1hJYTRta3lMLWFMMUtxS1BBc1hHdXBERjZFU2hodnpPQUtzbTA?oc=5)
이 정보가 도움이 되길 바랍니다. 추가적인 질문이나 요청이 있으시면 언제든지 말씀해 주세요.
감사합니다.
테디
teddy@teddynote.com
테디노트 주식회사
---
이메일을 보내실 준비가 되셨나요? 추가로 수정할 부분이 있으면 말씀해 주세요!
<<<<<<< 최종 답변 >>>>>>
# 질의에 대한 답변을 스트리밍으로 출력 요청
response = agent_with_chat_history.stream(
{
"input": "내 이름이 뭐야?"
},
# session_id 설정
config={"configurable": {"session_id": "def456"}},
)
# 출력 확인
for step in response:
agent_stream_parser.process_agent_steps(step)- 만약
session_id가 위와 같이def456으로 바뀐다면 agent는 맥락을 잃게되고 기억이 초기화 된다. - 서비스시, 맥락 및 기억을 유지시켜주기 위해선
session_id를 반드시 고정시켜줘야한다.