This guide shows you how to set up and use Pinecone Assistant, a service that allows you to upload documents, ask questions, and receive responses that reference your documents.
1. Install the Python SDK
You can use the Assistant API directly or via the Pinecone Python SDK.
To interact with Pinecone Assistant using the Python SDK, install the client and the pinecone-plugin-assistant
package as follows:
pip install pinecone
pip install pinecone-plugin-assistant
2. Get an API key
You need an API key to make calls to your assistant.
Create a new API key in the Pinecone console, or use the widget below to generate a key. If you don’t have a Pinecone account, the widget will sign you up for the free Starter plan.
Your generated API key:
3. Create an assistant
To create an assistant, use the create_assistant
operation as in the following example:
from pinecone import Pinecone
pc = Pinecone(api_key="YOUR_API_KEY")
assistant = pc.assistant.create_assistant(
assistant_name="example-assistant",
instructions="Answer directly and succinctly. Do not provide any additional information.",
timeout=30
)
4. Upload a file to the assistant
With Pinecone Assistant, you can upload documents, ask questions, and receive responses that reference your documents. This is known as retrieval-augmented generation (RAG).
For this quickstart, download a sample 10-k filing file to your local device.
Next, use the create_file
operation to upload the file to your assistant:
from pinecone import Pinecone
pc = Pinecone(api_key="YOUR_API_KEY")
assistant = pc.assistant.Assistant(
assistant_name="example-assistant",
)
response = assistant.upload_file(
file_path="/path/to/file/Netflix-10-K-01262024.pdf",
timeout=None
)
5. Chat with the assistant
With the sample file uploaded, you can now ask the assistant questions about your document.
To chat with a Pinecone assistant, use the chat_assistant
endpoint. It returns either a JSON object or a text stream.
The following example requests a JSON response to the message, “How many employees did Netflix have by the end of 2023?”:
from pinecone import Pinecone
from pinecone_plugins.assistant.models.chat import Message
pc = Pinecone(api_key='YOUR_API_KEY')
assistant = pc.assistant.Assistant(assistant_name="example-assistant")
msg = Message(content="How many employees did Netflix have by the end of 2023?")
resp = assistant.chat(messages=[msg])
print(resp)
The example above returns a response like the following:
{'citations': [{'position': 72,
'references': [{'file': {'created_on': '2024-11-04T18:11:52.243609916Z',
'id': 'b8a4e98e-56e8-4e51-b68c-4e5282770ecb',
'metadata': None,
'name': 'Netflix-10-K-01262024.pdf',
'percent_done': 1.0,
'signed_url': 'https://storage.googleapis.com/knowledge-prod-files/3ed21848-b4a0-4aa9-a292-efd09abba1fa%2F270d1996-e9ad-46aa-b5d5-1dc5e82351b7%2Fb8a4e98e-56e8-4e51-b68c-4e5282770ecb.pdf?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=ke-prod-1%40pc-knowledge-prod.iam.gserviceaccount.com%2F20241104%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20241104T181819Z&X-Goog-Expires=3600&X-Goog-SignedHeaders=host&response-content-disposition=inline&response-content-type=application%2Fpdf&X-Goog-Signature=827de3a4d68b7a64982bf3eedc735a2225a03170a55866abf82454670556300a9690634e323b9bd50a16035930cd4dc9c12b3f8351f8c8ecb1cbac8b59e0d0665ea8fa0b9b393b4b36a385a260859cc108c5e5f2d91a9b17efe77b1f2cd111c2cb678762fb2a109ac6588d51a503416d8498eacc0571ba4bcb85e4afdd5121dc32d4535d37f66ee0455255029759c8f2bf7de8a3c022c8c21ed30aab62237ac588ad0a55dfcc6c919b6a111235be516a212783f3d438fecd6e778497ad043468c2e6c2caec02f934b28464fe59ddbf11c4fbf594d4259f751f11a6e8aecc88002f7a6c0e332527566ded5ccf86732afd5610f5ea379f36f17e1e206e3ff41199',
'size': 1073470.0,
'status': 'Available',
'updated_on': '2024-11-04T18:12:29.663628217Z'},
'pages': [5]}]}],
'finish_reason': 'stop',
'id': '0000000000000000591358cd74e3e938',
'message': {'content': 'By the end of 2023, Netflix had approximately 13,000 '
'full-time employees.',
'role': '"assistant"'},
'model': 'gpt-4o-2024-05-13',
'usage': {'completion_tokens': 28,
'prompt_tokens': 15111,
'total_tokens': 15139}}
6. Clean up
When you no longer need the example-assistant
, use the delete_assistant
operation to delete it:
Deleting an assistant also deletes all files uploaded to the assistant.
from pinecone import Pinecone
pc = Pinecone(api_key="YOUR_API_KEY")
pc.assistant.delete_assistant(
assistant_name="example-assistant",
)
Next steps