Spaces:
Running
Running
| import os | |
| from dotenv import load_dotenv | |
| from langchain_core.messages import HumanMessage | |
| from langchain_openai import ChatOpenAI | |
| from langgraph.prebuilt import create_react_agent | |
| from app.state.state import GraphState | |
| from app.tools.tools import ( | |
| search_library, | |
| get_popular_books, | |
| check_book_availability, | |
| get_trending_books, | |
| get_book_recommendations, | |
| get_book_isbn, | |
| ) | |
| load_dotenv() | |
| os.environ.setdefault("OPENAI_API_KEY", os.getenv("OPENAI_API_KEY", "")) | |
| tools = [ | |
| search_library, | |
| get_popular_books, | |
| check_book_availability, | |
| get_trending_books, | |
| get_book_recommendations, | |
| get_book_isbn, | |
| ] | |
| llm = ChatOpenAI(model="gpt-4o-mini", temperature=0) | |
| system_prompt = """λΉμ μ λμκ΄ μ± μΆμ² νλ μ΄ν°μ λλ€. | |
| [μΆλ ₯ νμ - λ°λμ μ§ν¬ κ²] | |
| μΆμ² λμλ§λ€ μλ νμμΌλ‘ μμ±νμΈμ. | |
| --- | |
| π {μ± μ λͺ©} | {μ μ} | |
|  | |
| βοΈ μΆμ² μ΄μ | |
| (μ λ¬λ°μ μΆμ² μ΄μ λ₯Ό κ·Έλλ‘ μμ±) | |
| π λμΆ κ°λ₯ μ¬λΆ | |
| - (λꡬ νΈμΆλ‘ μ»μ μ€μ λμκ΄ μ΄λ¦): (λμΆ κ°λ₯) or (λμΆ λΆκ°) or (λ―Έμμ₯) | |
| --- | |
| [μ£Όμμ¬ν] | |
| - μΆμ² λμ λͺ©λ‘μ 3κΆμ λ°λμ λͺ¨λ μ νμμΌλ‘ μΆλ ₯νμΈμ. μμΈλ μμ΅λλ€. | |
| - λμΆ κ°λ₯ μ¬λΆμ κ΄κ³μμ΄ 3κΆ μ λΆ μΆλ ₯νμΈμ. | |
| - νλͺ©μλ search_library λκ΅¬λ‘ μ‘°νν μ€μ λμκ΄ μ΄λ¦μ κ·Έλλ‘ μ¬μ©νμΈμ. | |
| - λꡬ νΈμΆμ μ€ν¨νκ±°λ μ 보λ₯Ό νμΈν μ μλ κ²½μ° "νμΈ λΆκ°"λ‘ νμνκ³ μΆλ ₯ νμμ λ°λμ μ μ§νμΈμ. | |
| - μ΄λ―Έμ§ URLμ κ°μ Έμ€μ§ λͺ»ν κ²½μ° μ΄λ―Έμ§ λΌμΈμ μλ΅νμΈμ. | |
| - μ± μ μ κ±°νκ±°λ λ€λ₯Έ μ± μΌλ‘ λ체νλ κ²μ μ λ κΈμ§μ λλ€. | |
| - λμΆ λΆκ°λ₯Ό μ΄μ λ‘ μΆκ° λ©νΈ, λμ μ μ, λμκ΄ λ°©λ¬Έ κΆμ λ± λΆνμν λ΄μ©μ λ§λΆμ΄μ§ λ§μΈμ. | |
| - ISBN, μ΄λ―Έμ§ URL, λμΆ μ 보λ λ°λμ λꡬ νΈμΆ κ²°κ³Όλ§ μ¬μ©νμΈμ. μ λ μ§μ΄λ΄μ§ λ§μΈμ. | |
| """ | |
| agent_executor = create_react_agent(llm, tools, prompt=system_prompt) | |
| def api_tool_calling_node(state: GraphState) -> dict: | |
| recommendations = state.get("recommendations", []) | |
| summary = state.get("summary", "") | |
| district = "κ°λ¨κ΅¬" | |
| if isinstance(recommendations, str): | |
| rec_text = recommendations | |
| else: | |
| rec_text = "\n".join([ | |
| f"- μ λͺ©: {r['title']}, μ μ: {r['author']}, ISBN: {r['isbn']}, μΆμ² μ΄μ : {r['reason']}" | |
| for r in recommendations | |
| ]) | |
| query = f""" | |
| μλ μΆμ² λμ 3κΆμ νμ§ μ΄λ―Έμ§μ {district} λμκ΄ λμΆ κ°λ₯ μ¬λΆλ₯Ό νμΈν΄μ μ΅μ’ μΆμ² λ΅λ³μ λ§λ€μ΄μ€. | |
| [μΆμ² λμ] | |
| {rec_text} | |
| [μ¬μ©μ νλ‘νμΌ] | |
| {summary} | |
| """ | |
| result = agent_executor.invoke({"messages": [HumanMessage(content=query)]}) | |
| return {"messages": [result["messages"][-1]]} | |