Files
2026-05-28 10:10:50 +00:00

58 lines
2.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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"])