feat: solution for 'Повторный экзамен #2: Сравнительный обзор 3 сущностей (Tavily)'
This commit is contained in:
+60
-33
@@ -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()
|
||||
Reference in New Issue
Block a user