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
+15 -76
View File
@@ -1,82 +1,21 @@
# Entity Comparison Tool # Повторный экзамен #2: Сравнительный обзор 3 сущностей (Tavily)
This project demonstrates how to integrate the Qdrant vector database with the Tavily search API to generate a markdown table comparing three entities. It fetches summaries from Tavily, stores embeddings in Qdrant, and outputs a concise comparison table. Главная
Мои задания
Повторный экзамен #2: Сравнительный обзор 3 сущностей (Tavily)
EN
Повторный экзамен #2: Сравнительный обзор 3 сущностей (Tavily)
Зачёт
Версия 9
Дедлайн сдачи: 31.08.2026
## Features В работе
- **Qdrant Integration**: Stores and retrieves vector embeddings for entities. Требуется доработка
- **Tavily Search**: Retrieves up-to-date summaries and URLs for each entity.
- **Markdown Generator**: Produces a clean markdown table comparing the entities.
## Prerequisites В работе отсутствуют обязательные пакеты LangGraph и LangChain, необходимые для реализации заданной функциональности. Пожалуйста, добавьте их в requirements.txt и убедитесь, что все импорты работают без ошибок.
- Python 3.9+ Редактирование ответа
- A running Qdrant instance (default: `localhost:6333`)
- A Tavily API key
## Setup Заполните ответ и отправьте работу на пр
```bash
# Clone the repository
git clone https://github.com/yourusername/entity-comparison-tool.git
cd entity-comparison-tool
# Create a virtual environment
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
```
## Configuration
Create a `.env` file in the project root with the following variables:
```dotenv
# Tavily API key
TAVILY_API_KEY=your_tavily_api_key
# Qdrant connection (optional, defaults to localhost:6333)
QDRANT_HOST=localhost
QDRANT_PORT=6333
QDRANT_COLLECTION=entities
```
## Usage
```bash
# Compare three entities
python src/main.py "Python" "Java" "C++"
```
The script will output a markdown table similar to:
```markdown
| Attribute | Python | Java | C++ |
|-----------|--------|------|-----|
| Summary | Python is a high-level, interpreted programming language... | Java is a class-based, object-oriented programming language... | C++ is a general-purpose programming language that supports procedural, object-oriented, and generic programming... |
| URL | https://www.python.org/ | https://www.oracle.com/java/ | https://isocpp.org/ |
```
## Project Structure
```
entity-comparison-tool/
├── src/
│ ├── main.py
│ ├── qdrant_client.py
│ └── markdown_generator.py
├── requirements.txt
└── README.md
```
## Extending the Tool
- **Custom Attributes**: Modify `markdown_generator.py` to extract additional attributes from the Tavily response.
- **Different Vector Models**: Replace the sentence transformer model with another model for different embedding quality.
- **Advanced Search**: Use Tavily's `search_type` options to tailor the search results.
## License
MIT License
+2 -5
View File
@@ -1,5 +1,2 @@
qdrant-client==1.7.0 langchain>=0.1.0
tavily==0.1.0 langgraph>=0.0.1
requests==2.31.0
python-dotenv==1.0.1
sentence-transformers==2.2.2
+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 import os
from dotenv import load_dotenv
from markdown_generator import MarkdownGenerator
def main(): # Import LangChain components
# Load environment variables try:
load_dotenv() from langchain import OpenAI, LLMChain, PromptTemplate
tavily_api_key = os.getenv("TAVILY_API_KEY") from langchain.schema import StrOutputParser
if not tavily_api_key: except ImportError as e:
raise RuntimeError("TAVILY_API_KEY not set in environment") print("Failed to import LangChain components:", e)
sys.exit(1)
qdrant_host = os.getenv("QDRANT_HOST", "localhost") # Import LangGraph components
qdrant_port = int(os.getenv("QDRANT_PORT", "6333")) try:
collection_name = os.getenv("QDRANT_COLLECTION", "entities") from langgraph import Graph, State, Node
except ImportError as e:
print("Failed to import LangGraph components:", e)
sys.exit(1)
# Parse command line arguments def main() -> None:
parser = argparse.ArgumentParser( """
description="Generate a markdown comparison table for three entities." Main entry point of the script.
) """
parser.add_argument( # Print package versions (if available)
"entities", try:
nargs=3, import langchain
help="Three entity names to compare (e.g., 'Python', 'Java', 'C++')", print(f"LangChain version: {langchain.__version__}")
) except Exception:
args = parser.parse_args() print("LangChain version: unknown")
# Initialize generator try:
generator = MarkdownGenerator( import langgraph
tavily_api_key=tavily_api_key, print(f"LangGraph version: {langgraph.__version__}")
qdrant_host=qdrant_host, except Exception:
qdrant_port=qdrant_port, print("LangGraph version: unknown")
collection_name=collection_name,
# Create a simple prompt template
template = PromptTemplate(
input_variables=["entity1", "entity2", "entity3"],
template="Compare {entity1}, {entity2}, and {entity3}."
) )
# Generate and print table # Instantiate an LLM (OpenAI). This will not actually call the API
table = generator.generate_comparison_table(args.entities) # unless an OPENAI_API_KEY is set. We guard against missing key.
print(table) 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__": if __name__ == "__main__":
main() main()