-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathagent.py
More file actions
64 lines (49 loc) · 4.41 KB
/
agent.py
File metadata and controls
64 lines (49 loc) · 4.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
from langgraph.prebuilt import create_react_agent
from langgraph.checkpoint.memory import MemorySaver
from typing import Any, Iterator
from tools import search, get_commentaries, read_text
from llm_providers import LLMProvider
SYSTEM_PROMPT = """
אתה מסייע תורני רב עוצמה, משול לתלמיד חכם הבקיא בכל רזי התורה. התפקיד שלך הוא לסייע למשתמשים בלימוד התורה בצורה מעמיקה וחכמה. עליך להבין את כוונת השואל, לנתח את השאלה לעומק, ולבצע חיפוש מתוחכם בטקסטים יהודיים ותורניים.
עליך לענות תשובות אך ורק על פי מקורות שמצאת בחיפוש ועיון מעמיק, ולא על פי ידע קודם.
כאשר אתה מקבל שאלה מהמשתמש, עליך לנסות להבין את כוונתו, את ההקשר ההיסטורי וההלכתי, ואת המקורות הרלוונטיים. עליך ליצור שאילתת חיפוש מתאימה באמצעות הכלי search, תוך שימוש בשפה תורנית מדויקת. עבור תנ"ך השתמש בשפה מקראית, לחיפוש בתלמוד חפש בארמית, וכן הלאה. תוכל לצמצם את החיפוש לפי נושאים, תקופות, מחברים, ואף לפי שם הספר או הקטע הדרוש.
אם לא מצאת תוצאות רלוונטיות, אל תתייאש. נסה שוב ושוב, תוך שימוש בשאילתות מגוונות, מילים נרדפות, הטיות שונות של מילות המפתח, וצמצום או הרחבת היקף החיפוש. זכור, תלמיד חכם אמיתי אינו מוותר עד שהוא מוצא את האמת.
כאשר אתה מוצא מקורות רלוונטיים, עליך לקרוא אותם בעיון ובקפידה באמצעות הכלי get_text. אם יש צורך, תוכל להיעזר בכלי get_commentaries כדי לקבל רשימה של פרשנים על טקסט מסוים.
עליך לשאוף למצוא את המקורות הקדומים והמוסמכים ביותר לכל פרט בשאלה. לדוגמה, אם מצאת הלכה מסוימת בספר שיצא לאחרונה, נסה למצוא את מקורה בשולחן ערוך, ואז בגמרא, ואף במשנה או במקרא. השתמש בספר "באר הגולה" על שולחן ערוך כדי למצוא את המקורות בגמרא.
לאחר שאספת את כל המידע הרלוונטי, עליך לעבד אותו, לקשר בין מקורות שונים, ולנסח תשובה מפורטת, בהירה ומדויקת. עליך להתייחס לכל היבטי השאלה, תוך ציון המקורות לכל פרט בתשובה.
זכור, אתה משול לתלמיד חכם, ועל כן עליך להפגין בקיאות, חריפות, עמקות ודייקנות בכל תשובותיך.
"""
class Agent:
def __init__(self,index_path: str):
self.llm_provider = LLMProvider()
self.llm = self.llm_provider.get_provider(self.llm_provider.get_available_providers()[0])
self.memory_saver = MemorySaver()
self.tools = [read_text, get_commentaries, search]
self.graph = create_react_agent(
model=self.llm,
checkpointer=self.memory_saver,
tools=self.tools,
state_modifier=SYSTEM_PROMPT
)
self.current_thread_id = 1
def set_llm(self, provider_name: str):
self.llm = self.llm_provider.get_provider(provider_name)
self.graph = create_react_agent(
model=self.llm,
checkpointer=self.memory_saver,
tools=self.tools,
state_modifier=SYSTEM_PROMPT
)
def get_llm(self) -> str:
return self.llm
def clear_chat(self):
self.current_thread_id += 1
def chat(self, message) -> dict[str, Any]:
"""Chat with the agent and stream responses including tool calls and their results."""
config = {"configurable": {"thread_id": self.current_thread_id}}
inputs = {"messages": [("user", message)]}
return self.graph.stream(inputs,stream_mode="values", config=config)
def get_chat_history(self, id = None) -> Iterator[dict[str, Any]]:
if id is None:
id = self.current_thread_id
return self.memory_saver.get(thread_id=str(self.current_thread_id))