筆記
頂篷團隊不再維護此存儲庫。感謝您對該項目的支持和熱情!如果您正在尋找具有持續更新和改進的高質量託管RAG解決方案,請查看Pinecone助理。
Canopy是建立在Pinecone矢量數據庫頂部的開源檢索增強生成(RAG)框架和上下文引擎。 Canopy使您可以快速輕鬆地使用RAG實驗並構建應用程序。使用一些簡單命令開始與文檔或文本數據聊天。
Canopy竭盡全力來構建抹布應用:從塊和嵌入文本數據到聊天歷史管理,查詢優化,上下文檢索(包括及時的工程)和增強生成。
Canopy提供了可配置的內置服務器,因此您可以輕鬆地將由抹布的聊天應用程序部署到現有的聊天UI或接口。或者,您可以使用Canopy庫構建自己的自定義RAG應用程序。
頂篷讓您可以使用基於CLI的聊天工具來評估RAG工作流程。借助Canopy CLI中的一個簡單命令,您可以與文本數據進行交互式聊天,並並排比較抹布與非抹布工作流程。
查看我們的博客文章以了解更多信息,或在此處查看快速教程。

Canopy實現了完整的RAG工作流程,以防止幻覺並使用自己的文本數據增強您的LLM。
Canopy有兩個流:知識基礎創建和聊天。在知識庫創建流中,用戶上傳文檔並將其轉換為Pinecone矢量數據庫中存儲的有意義的表示形式。在聊天流中,對傳入的查詢和聊天歷史記錄進行了優化以檢索最相關的文檔,查詢知識庫,並為LLM生成有意義的上下文以回答。
ChatEngine為ContextEngine提出了相關查詢,然後使用LLM來生成知識淵博的響應。ContextEngine利用基礎KnowledgeBase來檢索最相關的文檔,然後製定一個連貫的文本上下文,以用作LLM的提示。有關核心庫使用的更多信息,請參見庫文檔中
Canopy Server-這是一個網絡服務,它包裝Canopy Core庫並將其公開為REST API。該服務器建立在Fastapi,Uvicorn和Gunicorn的頂部,可以輕鬆地部署在生產中。該服務器還帶有內置的Swagger UI,可輕鬆測試和文檔。啟動服務器後,您可以在http://host:port/docs (默認: http://localhost:8000/docs )上訪問Swagger UI。
Canopy CLI-一種內置開發工具,允許用戶快速設置自己的Canopy Server並測試其配置。
只需三個CLI命令,您就可以創建一個新的Canopy Server,將文檔上傳到它,然後直接使用終端中的內置聊天應用程序與聊天機器人進行交互。內置的聊天機器人還可以比較注入抹布的響應與本機LLM聊天機器人。
python3 -m venv canopy-env
source canopy-env/bin/activate有關虛擬環境的更多信息可以在此處找到
pip install canopy-sdk| 姓名 | 描述 |
|---|---|
grpc | 通過使用Pinecone客戶端的GRPC版本來解鎖一些性能改進 |
torch | 啟用句子轉換器提供的嵌入 |
transformers | 如果您使用的是EnyScale LLMS,建議使用LLamaTokenizer令牌儀,該kenizer需要變壓器作為依賴項 |
cohere | 使用cohere reranker或/and/and/and cohere llm |
qdrant | 將QDrant作為替代知識庫 |
export PINECONE_API_KEY= " <PINECONE_API_KEY> "
export OPENAI_API_KEY= " <OPENAI_API_KEY> "
export INDEX_NAME= " <INDEX_NAME> "| 姓名 | 描述 | 如何獲得它? |
|---|---|---|
PINECONE_API_KEY | Pinecone的API鍵。用於對Pinecone服務進行身份驗證以創建索引並插入,刪除和搜索數據 | 在控制台中註冊或登錄您的Pinecone帳戶。您可以從儀表板的側邊欄中的“ API鍵”部分訪問API鍵 |
OPENAI_API_KEY | Openai的API密鑰。用於驗證OpenAI的服務以嵌入和聊天API | 您可以在此處找到OpenAI API密鑰。您可能需要登錄或註冊到OpenAI服務 |
INDEX_NAME | Pinecone索引冠層的名稱將與 | 只要遵循Pinecone的限制,您就可以選擇任何名稱 |
CANOPY_CONFIG_FILE | Canopy Server將使用配置YAML文件的路徑。 | 可選 - 如果不提供,將使用默認配置 |
這些可選的環境變量用於對其他支持的嵌入和LLM的支持服務進行身份驗證。如果您配置了Canopy以使用這些提供商中的任何一個 - 您需要設置相關的環境變量。
| 姓名 | 描述 | 如何獲得它? |
|---|---|---|
ANYSCALE_API_KEY | api鍵的Anyscale。用於對開源LLMS的任何規模端點進行身份驗證 | 您可以在此處註冊Anyscale端點並在此處找到API密鑰 |
CO_API_KEY | cohere的API鍵。用於驗證以嵌入服務的服務 | 您可以在此處找到有關註冊到Cohere的更多信息 |
JINA_API_KEY | Jina AI的API密鑰。用於驗證Jinaai的服務以嵌入和聊天API | 您可以在此處找到OpenAI API密鑰。您可能需要登錄或註冊到OpenAI服務 |
AZURE_OPENAI_ENDOINT | 您部署的Azure OpenAI端點的URL。 | 您可以在_keys和endpoints`下的Azure Openai門戶網站中找到它 |
AZURE_OPENAI_API_KEY | 用於Azure OpenAI型號的API鍵。 | 您可以在_keys和endpoints`下的Azure Openai門戶網站中找到它 |
OCTOAI_API_KEY | octoai的API鍵。用於在Octoai提供的開源LLMS驗證 | 您可以註冊Octoai並在此處找到您的API密鑰 |
canopy輸出應與此相似:
Canopy: Ready
Usage: canopy [OPTIONS] COMMAND [ARGS]...
# rest of the help message 在此QuickStart中,我們將向您展示如何使用冠層使用抹布(檢索增強生成)構建一個簡單的問答系統。
作為一次性設置,Canopy需要創建一個新的Pinecone索引,該索引配置為使用Canopy,只需運行:
canopy new並遵循CLI說明。將要創建的索引將具有前綴canopy--<INDEX_NAME> 。
您只需要為要創建的每個冠層索引完成一次此過程即可。
要了解有關Pinecone索引以及如何管理它們的更多信息,請參閱以下指南:了解索引
您可以使用命令將數據加載到冠層索引中:
canopy upsert /path/to/data_directory
# or
canopy upsert /path/to/data_directory/file.parquet
# or
canopy upsert /path/to/data_directory/file.jsonl
# or
canopy upsert /path/to/directory_of_txt_files/
# ... Canopy支持jsonl , parquet和csv格式的文件。此外,您可以以.txt格式加載明文數據文件。在這種情況下,每個文件將被視為一個文檔。文檔ID將是文件名,源將是文件的完整路徑。
注意:文檔字段在抹布流中使用,應符合以下模式:
+----------+--------------+--------------+---------------+
| id(str) | text(str) | source | metadata |
| | | Optional[str] | Optional[dict] |
| ----------+--------------+--------------+--------------- |
| " id1 " | " some text " | " some source " | { " key " : " val " } |
+----------+--------------+--------------+---------------+
# id - unique identifier for the document
#
# text - the text of the document, in utf-8 encoding.
#
# source - the source of the document, can be any string, or null.
# ** this will be used as a reference in the generated context. **
#
# metadata - optional metadata for the document, for filtering or additional context.
# Dict[str, Union[str, int, float, List[str]]]本筆記本顯示瞭如何以這種格式創建數據集,請在上傳數據時按照CLI中的說明進行操作。
提示
如果您想將數據分為名稱空間,則可以使用--namespace選項或INDEX_NAMESPACE環境變量。
Canopy Server通過REST API公開了Canopy的功能。也就是說,它允許您上傳文檔,檢索給定查詢的相關文檔以及與您的數據聊天。服務器曝光了A /chat.completion端點,可以輕鬆地將其與任何聊天應用程序集成在一起。要啟動服務器,請運行:
canopy start現在,應該提示您使用以下標準UVICORN消息:
...
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
就是這樣!現在,您可以開始使用支持A /chat.completion端點的任何聊天應用程序的Canopy Server。
頂式啟動命令將保持終端佔用(建議使用)。如果要在後台運行服務器,則可以使用以下命令
nohup canopy start &
要停止服務器,只需在您啟動的終端中按CTRL+C即可。
Canopy的CLI附帶一個內置的聊天應用程序,可讓您與文本數據進行交互性聊天,並比較抹布與非抹布工作流程,以評估結果
在新的終端窗口中,設置所需的環境變量然後運行:
canopy chat這將在您的終端打開聊天接口。您可以提出問題,注入抹布的聊天機器人將嘗試使用您上傳的數據來回答它們。
用或不帶有抹布的聊天響應,請使用--no-rag標誌
注意:此方法僅在目前由OpenAI支持。
canopy chat --no-rag這將打開一個類似的聊天接口窗口,但將同時顯示抹布和非抹布響應。
感謝您考慮為Canopy做出貢獻!有關更多信息,請參閱我們的貢獻指南。
如果您已經有一個使用OpenAI API的應用程序,則可以通過簡單地將API端點更改為http://host:port/v1 ,例如使用默認配置來遷移到蓋層。
from openai import OpenAI
client = OpenAI ( base_url = "http://localhost:8000/v1" )如果您想使用特定的索引名稱空間進行聊天,則可以將名稱空間附加到API端點:
from openai import OpenAI
client = OpenAI ( base_url = "http://localhost:8000/v1/my-namespace" )Canopy將FastApi用作Web框架,Uvicorn用作ASGI服務器。
要在生產中使用冠層,建議使用Canopy的Docker圖像(可在GitHub軟件包上獲得)來滿足您的生產需求。
有關在Google Cloud平台(GCP)上部署冠層的指南,請參閱部署在GCP文檔中提供的示例。
另外,您可以將Gunicorn用作生產級WSGI,在此處提供更多詳細信息。
設置您所需的PORT和WORKER_COUNT設想變量,並使用以下方式啟動服務器
gunicorn canopy_server.app:app --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0: $PORT --workers $WORKER_COUNT 重要的
服務器使用您自己的身份驗證憑據與Pinecone和OpenAI等服務進行交互。將服務器部署在公共網絡託管提供商上時,建議啟用身份驗證機制,以便您的服務器僅從身份驗證的用戶那裡獲取請求。