add main.py

This commit is contained in:
2026-05-28 10:10:50 +00:00
commit 4bf8b8c504
+57
View File
@@ -0,0 +1,57 @@
from langchain_openai import ChatOpenAI
from pydantic import SecretStr
from langchain.tools import tool
from langchain.agents import create_agent
import json
# 1. LLM connection
llm = ChatOpenAI(
model="gpt-4o-mini", # replace with your LM Studio model name
base_url="http://localhost:1234/v1",
api_key=SecretStr("fake"),
temperature=0.7,
)
# 2. Subagent that generates a price table
@tool
def get_price(product: str, city: str) -> str:
"""Return a realistic price for the product in the given city.
The function internally creates a small agent that asks the LLM to produce a markdown table.
"""
# Subagent prompt keep it short and deterministic
sub_prompt = (
f"You are a market analyst. Provide a realistic price for {product} in {city}. "
"Return a markdown table with columns: Продукт, Цена (руб.), Магазин."
)
# Create the subagent
sub_agent = create_agent(
model=llm,
tools=[], # no external tools needed for this simple query
system_prompt=sub_prompt,
)
# Ask the subagent and get its response
result = sub_agent.invoke({"messages": [{"role": "human", "content": "Generate table"}]})
return result["messages"][-1]["content"]
# 3. Main agent with get_price tool
main_agent = create_agent(
model=llm,
tools=[get_price],
system_prompt="Ты помощник по планированию покупок.",
)
# 4. Run the main agent on a sample query
query = "Помоги составить список покупок: молоко, хлеб, яблоки. Я нахожусь в Казани."
response = main_agent.invoke({"messages": [{"role": "human", "content": query}]})
# Prettyprint all messages (including tool calls)
for msg in response["messages"]:
if msg.get("content"):
print(msg["content"])
elif msg.get("tool_calls"):
for call in msg["tool_calls"]:
name = call["name"]
args = json.dumps(call["args"], ensure_ascii=False)
print(f"{name}({args})")
# Final answer (last message content)
print("\n---\nAnswer:\n", response["messages"][-1]["content"])