Adding RAG to LangGraph Agents Agent를 이용해 이메일을 생성합니다.
Source를 참조합니다.
from typing_extensions import TypedDict
from typing import List
### State
class GraphState(TypedDict):
"""
Represents the state of our graph.
Attributes:
initial_email: email
email_category: email category
draft_email: LLM generation
final_email: LLM generation
research_info: list of documents
info_needed: whether to add search info
num_steps: number of steps
"""
initial_email : str
email_category : str
draft_email : str
final_email : str
research_info : List[str] # this will now be the RAG results
info_needed : bool
num_steps : int
draft_email_feedback : dict
rag_questions : List[str]
workflow = StateGraph(GraphState)
# Define the nodes
workflow.add_node("categorize_email", categorize_email) # categorize email
workflow.add_node("research_info_search", research_info_search) # web search
workflow.add_node("state_printer", state_printer)
workflow.add_node("draft_email_writer", draft_email_writer)
workflow.add_node("analyze_draft_email", analyze_draft_email)
workflow.add_node("rewrite_email", rewrite_email)
workflow.add_node("no_rewrite", no_rewrite)
workflow.set_entry_point("categorize_email")
workflow.add_edge("categorize_email", "research_info_search")
workflow.add_edge("research_info_search", "draft_email_writer")
workflow.add_conditional_edges(
"draft_email_writer",
route_to_rewrite,
{
"rewrite": "analyze_draft_email",
"no_rewrite": "no_rewrite",
},
)
workflow.add_edge("analyze_draft_email", "rewrite_email")
workflow.add_edge("no_rewrite", "state_printer")
workflow.add_edge("rewrite_email", "state_printer")
workflow.add_edge("state_printer", END)
app = workflow.compile()