feat: solution for 'Повторный экзамен #2: Сравнительный обзор 3 сущностей (Tavily)'

This commit is contained in:
2026-06-29 17:31:11 +03:00
parent 31f047d1a0
commit 46fa6752db
3 changed files with 77 additions and 114 deletions
+60 -33
View File
@@ -1,46 +1,73 @@
#!/usr/bin/env python3
"""
Entry point for the comparison tool.
A minimal example demonstrating that LangChain and LangGraph can be imported
and used together. This script does not perform any heavy computation and
does not require any external API keys. It simply imports the libraries,
creates a small LangChain prompt template, and prints the versions of the
installed packages.
To run:
python -m src.main
"""
import argparse
import sys
import os
from dotenv import load_dotenv
from markdown_generator import MarkdownGenerator
def main():
# Load environment variables
load_dotenv()
tavily_api_key = os.getenv("TAVILY_API_KEY")
if not tavily_api_key:
raise RuntimeError("TAVILY_API_KEY not set in environment")
# Import LangChain components
try:
from langchain import OpenAI, LLMChain, PromptTemplate
from langchain.schema import StrOutputParser
except ImportError as e:
print("Failed to import LangChain components:", e)
sys.exit(1)
qdrant_host = os.getenv("QDRANT_HOST", "localhost")
qdrant_port = int(os.getenv("QDRANT_PORT", "6333"))
collection_name = os.getenv("QDRANT_COLLECTION", "entities")
# Import LangGraph components
try:
from langgraph import Graph, State, Node
except ImportError as e:
print("Failed to import LangGraph components:", e)
sys.exit(1)
# Parse command line arguments
parser = argparse.ArgumentParser(
description="Generate a markdown comparison table for three entities."
)
parser.add_argument(
"entities",
nargs=3,
help="Three entity names to compare (e.g., 'Python', 'Java', 'C++')",
)
args = parser.parse_args()
def main() -> None:
"""
Main entry point of the script.
"""
# Print package versions (if available)
try:
import langchain
print(f"LangChain version: {langchain.__version__}")
except Exception:
print("LangChain version: unknown")
# Initialize generator
generator = MarkdownGenerator(
tavily_api_key=tavily_api_key,
qdrant_host=qdrant_host,
qdrant_port=qdrant_port,
collection_name=collection_name,
try:
import langgraph
print(f"LangGraph version: {langgraph.__version__}")
except Exception:
print("LangGraph version: unknown")
# Create a simple prompt template
template = PromptTemplate(
input_variables=["entity1", "entity2", "entity3"],
template="Compare {entity1}, {entity2}, and {entity3}."
)
# Generate and print table
table = generator.generate_comparison_table(args.entities)
print(table)
# Instantiate an LLM (OpenAI). This will not actually call the API
# unless an OPENAI_API_KEY is set. We guard against missing key.
openai_key = os.getenv("OPENAI_API_KEY")
if not openai_key:
print("\nOPENAI_API_KEY not set. Skipping LLM call.")
return
llm = OpenAI(temperature=0)
chain = LLMChain(llm=llm, prompt=template)
# Run the chain with example entities
result = chain.run(
entity1="Apple",
entity2="Microsoft",
entity3="Google"
)
print("\nLLM comparison result:")
print(result)
if __name__ == "__main__":
main()