diff --git a/docs/api_reference/guide_imports.json b/docs/api_reference/guide_imports.json index f35c7805a03ad..8e4d0fed32f13 100644 --- a/docs/api_reference/guide_imports.json +++ b/docs/api_reference/guide_imports.json @@ -317,7 +317,7 @@ "Chatbots": "https://python.langchain.com/docs/use_cases/chatbots", "Summarization": "https://python.langchain.com/docs/use_cases/summarization", "Extraction": "https://python.langchain.com/docs/use_cases/extraction", - "SQL": "https://python.langchain.com/docs/use_cases/sql", + "SQL": "https://python.langchain.com/docs/use_cases/qa_structured/sql", "Tagging": "https://python.langchain.com/docs/use_cases/tagging", "Code Understanding": "https://python.langchain.com/docs/use_cases/code_understanding", "AutoGPT": "https://python.langchain.com/docs/use_cases/autonomous_agents/autogpt", @@ -400,7 +400,7 @@ "Summarization": "https://python.langchain.com/docs/use_cases/summarization", "Extraction": "https://python.langchain.com/docs/use_cases/extraction", "Interacting with APIs": "https://python.langchain.com/docs/use_cases/apis", - "SQL": "https://python.langchain.com/docs/use_cases/sql", + "SQL": "https://python.langchain.com/docs/use_cases/qa_structured/sql", "QA over Documents": "https://python.langchain.com/docs/use_cases/question_answering/index", "Retrieve from vector stores directly": "https://python.langchain.com/docs/use_cases/question_answering/how_to/vector_db_text_generation", "Improve document indexing with HyDE": "https://python.langchain.com/docs/use_cases/question_answering/how_to/hyde", @@ -641,7 +641,7 @@ "Chatbots": "https://python.langchain.com/docs/use_cases/chatbots", "Extraction": "https://python.langchain.com/docs/use_cases/extraction", "Interacting with APIs": "https://python.langchain.com/docs/use_cases/apis", - "SQL": "https://python.langchain.com/docs/use_cases/sql", + "SQL": "https://python.langchain.com/docs/use_cases/qa_structured/sql", "HuggingGPT": "https://python.langchain.com/docs/use_cases/autonomous_agents/hugginggpt", "Perform context-aware text splitting": "https://python.langchain.com/docs/use_cases/question_answering/how_to/document-context-aware-QA", "Retrieve from vector stores directly": "https://python.langchain.com/docs/use_cases/question_answering/how_to/vector_db_text_generation", @@ -1009,7 +1009,7 @@ "LangSmith Walkthrough": "https://python.langchain.com/docs/guides/langsmith/walkthrough", "Comparing Chain Outputs": "https://python.langchain.com/docs/guides/evaluation/examples/comparisons", "Agent Trajectory": "https://python.langchain.com/docs/guides/evaluation/trajectory/trajectory_eval", - "SQL": "https://python.langchain.com/docs/use_cases/sql", + "SQL": "https://python.langchain.com/docs/use_cases/qa_structured/sql", "Multi-modal outputs: Image & Text": "https://python.langchain.com/docs/use_cases/multi_modal/image_agent", "Agent Debates with Tools": "https://python.langchain.com/docs/use_cases/agent_simulations/two_agent_debate_tools", "Multiple callback handlers": "https://python.langchain.com/docs/modules/callbacks/multiple_callbacks", @@ -1268,7 +1268,7 @@ "SQL Database Agent": "https://python.langchain.com/docs/integrations/toolkits/sql_database", "JSON Agent": "https://python.langchain.com/docs/integrations/toolkits/json", "NIBittensorLLM": "https://python.langchain.com/docs/integrations/llms/bittensor", - "SQL": "https://python.langchain.com/docs/use_cases/sql", + "SQL": "https://python.langchain.com/docs/use_cases/qa_structured/sql", "BabyAGI with Tools": "https://python.langchain.com/docs/use_cases/agents/baby_agi_with_agent", "Conversational Retrieval Agent": "https://python.langchain.com/docs/use_cases/question_answering/how_to/conversational_retrieval_agents", "Plug-and-Plai": "https://python.langchain.com/docs/use_cases/agents/custom_agent_with_plugin_retrieval_using_plugnplai", @@ -1832,12 +1832,12 @@ "create_sql_agent": { "CnosDB": "https://python.langchain.com/docs/integrations/providers/cnosdb", "SQL Database Agent": "https://python.langchain.com/docs/integrations/toolkits/sql_database", - "SQL": "https://python.langchain.com/docs/use_cases/sql" + "SQL": "https://python.langchain.com/docs/use_cases/qa_structured/sql" }, "SQLDatabaseToolkit": { "CnosDB": "https://python.langchain.com/docs/integrations/providers/cnosdb", "SQL Database Agent": "https://python.langchain.com/docs/integrations/toolkits/sql_database", - "SQL": "https://python.langchain.com/docs/use_cases/sql", + "SQL": "https://python.langchain.com/docs/use_cases/qa_structured/sql", "Use ToolKits with OpenAI Functions": "https://python.langchain.com/docs/modules/agents/how_to/use_toolkits_with_openai_functions" }, "SageMakerCallbackHandler": { @@ -1899,7 +1899,7 @@ "Rebuff": "https://python.langchain.com/docs/integrations/providers/rebuff", "SQL Database Agent": "https://python.langchain.com/docs/integrations/toolkits/sql_database", "Cookbook": "https://python.langchain.com/docs/guides/expression_language/cookbook", - "SQL": "https://python.langchain.com/docs/use_cases/sql", + "SQL": "https://python.langchain.com/docs/use_cases/qa_structured/sql", "Multiple Retrieval Sources": "https://python.langchain.com/docs/use_cases/question_answering/how_to/multiple_retrieval" }, "Weaviate": { @@ -3035,11 +3035,11 @@ "Interacting with APIs": "https://python.langchain.com/docs/use_cases/apis" }, "create_sql_query_chain": { - "SQL": "https://python.langchain.com/docs/use_cases/sql", + "SQL": "https://python.langchain.com/docs/use_cases/qa_structured/sql", "Multiple Retrieval Sources": "https://python.langchain.com/docs/use_cases/question_answering/how_to/multiple_retrieval" }, "ElasticsearchDatabaseChain": { - "SQL": "https://python.langchain.com/docs/use_cases/sql" + "SQL": "https://python.langchain.com/docs/use_cases/qa_structured/sql" }, "FileChatMessageHistory": { "AutoGPT": "https://python.langchain.com/docs/use_cases/autonomous_agents/autogpt" diff --git a/docs/docs_skeleton/docs/use_cases/question_answering/_category_.yml b/docs/docs_skeleton/docs/use_cases/question_answering/_category_.yml index 7c931cf41b79f..75252fdc392d8 100644 --- a/docs/docs_skeleton/docs/use_cases/question_answering/_category_.yml +++ b/docs/docs_skeleton/docs/use_cases/question_answering/_category_.yml @@ -1 +1,2 @@ position: 0 +collapsed: false diff --git a/docs/docs_skeleton/vercel.json b/docs/docs_skeleton/vercel.json index dfa378952a5d7..2f560db73a0e2 100644 --- a/docs/docs_skeleton/vercel.json +++ b/docs/docs_skeleton/vercel.json @@ -3178,7 +3178,11 @@ }, { "source": "/en/latest/use_cases/tabular.html", - "destination": "/docs/use_cases/tabular" + "destination": "/docs/use_cases/qa_structured" + }, + { + "source": "/docs/use_cases/sql(/?)", + "destination": "/docs/use_cases/qa_structured/sql" }, { "source": "/en/latest/youtube.html", @@ -3370,7 +3374,7 @@ }, { "source": "/docs/modules/chains/popular/sqlite", - "destination": "/docs/use_cases/tabular/sqlite" + "destination": "/docs/use_cases/qa_structured/sql" }, { "source": "/docs/modules/chains/popular/openai_functions", @@ -3582,7 +3586,7 @@ }, { "source": "/docs/modules/chains/additional/elasticsearch_database", - "destination": "/docs/use_cases/tabular/elasticsearch_database" + "destination": "/docs/use_cases/qa_structured/integrations/elasticsearch" }, { "source": "/docs/modules/chains/additional/tagging", diff --git a/docs/extras/use_cases/more/agents/agents.ipynb b/docs/extras/use_cases/more/agents/agents.ipynb index 98b65d1bbecc7..54ba5c29dbd31 100644 --- a/docs/extras/use_cases/more/agents/agents.ipynb +++ b/docs/extras/use_cases/more/agents/agents.ipynb @@ -584,7 +584,7 @@ "\n", "Collectivly, this tells us: carefully inspect Agent traces and tool outputs. \n", "\n", - "As we saw with the [SQL use case](/docs/use_cases/sql), `ReAct agents` can be work very well for specific problems. \n", + "As we saw with the [SQL use case](/docs/use_cases/qa_structured/sql), `ReAct agents` can be work very well for specific problems. \n", "\n", "But, as shown here, the result is degraded relative to what we see with the OpenAI agent." ] diff --git a/docs/extras/use_cases/qa_structured/_category_.yml b/docs/extras/use_cases/qa_structured/_category_.yml new file mode 100644 index 0000000000000..209e3895ff5b9 --- /dev/null +++ b/docs/extras/use_cases/qa_structured/_category_.yml @@ -0,0 +1,3 @@ +label: 'QA over structured data' +collapsed: false +position: 0.5 diff --git a/docs/extras/use_cases/qa_structured/integrations/_category_.yml b/docs/extras/use_cases/qa_structured/integrations/_category_.yml new file mode 100644 index 0000000000000..4a4b0b2f28a09 --- /dev/null +++ b/docs/extras/use_cases/qa_structured/integrations/_category_.yml @@ -0,0 +1 @@ +label: 'Integration-specific' diff --git a/docs/extras/use_cases/qa_structured/integrations/elasticsearch.ipynb b/docs/extras/use_cases/qa_structured/integrations/elasticsearch.ipynb new file mode 100644 index 0000000000000..e28bc6bf6186c --- /dev/null +++ b/docs/extras/use_cases/qa_structured/integrations/elasticsearch.ipynb @@ -0,0 +1,158 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Elasticsearch\n", + "\n", + "[![Open In Collab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/langchain-ai/langchain/blob/master/docs/extras/use_cases/qa_structured/integrations/elasticsearch.ipynb)\n", + "\n", + "We can use LLMs to interact with Elasticsearch analytics databases in natural language.\n", + "\n", + "This chain builds search queries via the Elasticsearch DSL API (filters and aggregations).\n", + "\n", + "The Elasticsearch client must have permissions for index listing, mapping description and search queries.\n", + "\n", + "See [here](https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html) for instructions on how to run Elasticsearch locally." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "! pip install langchain langchain-experimental openai elasticsearch\n", + "\n", + "# Set env var OPENAI_API_KEY or load from a .env file\n", + "# import dotenv\n", + "\n", + "# dotenv.load_dotenv()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "from elasticsearch import Elasticsearch\n", + "\n", + "from langchain.chat_models import ChatOpenAI\n", + "from langchain.chains.elasticsearch_database import ElasticsearchDatabaseChain" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Initialize Elasticsearch python client.\n", + "# See https://elasticsearch-py.readthedocs.io/en/v8.8.2/api.html#elasticsearch.Elasticsearch\n", + "ELASTIC_SEARCH_SERVER = \"https://elastic:pass@localhost:9200\"\n", + "db = Elasticsearch(ELASTIC_SEARCH_SERVER)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Uncomment the next cell to initially populate your db." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# customers = [\n", + "# {\"firstname\": \"Jennifer\", \"lastname\": \"Walters\"},\n", + "# {\"firstname\": \"Monica\",\"lastname\":\"Rambeau\"},\n", + "# {\"firstname\": \"Carol\",\"lastname\":\"Danvers\"},\n", + "# {\"firstname\": \"Wanda\",\"lastname\":\"Maximoff\"},\n", + "# {\"firstname\": \"Jennifer\",\"lastname\":\"Takeda\"},\n", + "# ]\n", + "# for i, customer in enumerate(customers):\n", + "# db.create(index=\"customers\", document=customer, id=i)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "llm = ChatOpenAI(model_name=\"gpt-4\", temperature=0)\n", + "chain = ElasticsearchDatabaseChain.from_llm(llm=llm, database=db, verbose=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "question = \"What are the first names of all the customers?\"\n", + "chain.run(question)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can customize the prompt." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.chains.elasticsearch_database.prompts import DEFAULT_DSL_TEMPLATE\n", + "from langchain.prompts.prompt import PromptTemplate\n", + "\n", + "PROMPT_TEMPLATE = \"\"\"Given an input question, create a syntactically correct Elasticsearch query to run. Unless the user specifies in their question a specific number of examples they wish to obtain, always limit your query to at most {top_k} results. You can order the results by a relevant column to return the most interesting examples in the database.\n", + "\n", + "Unless told to do not query for all the columns from a specific index, only ask for a the few relevant columns given the question.\n", + "\n", + "Pay attention to use only the column names that you can see in the mapping description. Be careful to not query for columns that do not exist. Also, pay attention to which column is in which index. Return the query as valid json.\n", + "\n", + "Use the following format:\n", + "\n", + "Question: Question here\n", + "ESQuery: Elasticsearch Query formatted as json\n", + "\"\"\"\n", + "\n", + "PROMPT = PromptTemplate.from_template(\n", + " PROMPT_TEMPLATE,\n", + ")\n", + "chain = ElasticsearchDatabaseChain.from_llm(llm=llm, database=db, query_prompt=PROMPT)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.1" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/docs/extras/use_cases/sql.ipynb b/docs/extras/use_cases/qa_structured/sql.ipynb similarity index 99% rename from docs/extras/use_cases/sql.ipynb rename to docs/extras/use_cases/qa_structured/sql.ipynb index 02eab3db4c3c4..23bde6a2a53ee 100644 --- a/docs/extras/use_cases/sql.ipynb +++ b/docs/extras/use_cases/qa_structured/sql.ipynb @@ -5,8 +5,8 @@ "metadata": {}, "source": [ "---\n", - "sidebar_position: 1\n", "title: SQL\n", + "sidebar_position: 2\n", "---" ] }, @@ -14,7 +14,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "[![Open In Collab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/langchain-ai/langchain/blob/master/docs/extras/use_cases/sql.ipynb)\n", + "[![Open In Collab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/langchain-ai/langchain/blob/master/docs/extras/use_cases/qa_structured/sql.ipynb)\n", "\n", "## Use case\n", "\n",