跳轉至

Panacea OpenAI相容的API閘道

這個食譜解釋了如何將任何基於OpenAI SDK構建的工具指向Panacea,而不需要任何代碼更改,同時仍然可以訪問Panacea特定的RAG擴展,如基於文件的資料來源。

您將學到什麼

  • 如何使用AnoteOpenAI來鏡像真實的openai.OpenAI客戶端介面
  • 如何上傳文件並通過類似聊天完成的API獲取基於文件的答案
  • 如何通過伺服器發送事件(SSE)進行串流,類似OpenAI的風格
  • Panacea特定的擴展(anote_sourcesanote_message_id)在響應中出現的位置

為什麼這很重要

大量現有的工具——LangChain集成、內部腳本、第三方代理框架——都是針對OpenAI SDK的形狀(client.chat.completions.create(...)client.models.list())編寫的。Panacea提供了一個即插即用的客戶端,使用相同的介面,這樣團隊就可以在不重寫其集成代碼的情況下採用Panacea的私有、基於文件的後端,而無需要求每個集成者學習一個定制的Panacea SDK。

主要的Panacea文件

文件 重要性
Panacea/backend/sdk/anoteai/openai_compat.py AnoteOpenAI客戶端:CompletionsClientModelsClientDocumentsClient,以及SSE串流解析器
Panacea/backend/sdk/anoteai/core.py 基礎的PrivateChatbot SDK類,兼容層包裝了它
Panacea/backend/sdk/anoteai/handlers/private_handlers.py 與原生SDK共享的請求處理
伺服器路由:POST /v1/chat/completionsGET /v1/modelsPOST /v1/question-answerPOST /public/upload 客戶端調用的OpenAI形狀(以及一個Panacea特定)的端點

它是如何工作的

  1. 像OpenAI SDK一樣實例化客戶端,但指向您的Panacea後端:

```python from anoteai.openai_compat import AnoteOpenAI

client = AnoteOpenAI( api_key="your-anote-api-key", # 或設置 ANOTE_API_KEY base_url="http://localhost:5000", # 或 https://api.anote.ai ) ```

  1. 對於基於文件的問答,首先上傳文件——client.documents.upload(...)將多部分表單數據發送到/public/upload並返回chat_id
  2. 以與調用OpenAI SDK相同的方式提問,通過extra_body傳遞chat_id,以便伺服器知道要檢索哪些文件:

```python upload_resp = client.documents.upload("path/to/report.pdf") chat_id = upload_resp["chat_id"]

response = client.chat.completions.create( model="gpt-4o", messages=[{"role": "user", "content": "總結關鍵發現。"}], extra_body={"chat_id": chat_id}, ) print(response.choices[0].message.content) print("來源:", response.anote_sources) ```

  1. 響應被映射到與真實OpenAI SDK相鏡像的數據類(ChatCompletionChoiceMessageUsage),以及兩個Panacea擴展:anote_message_idanote_sources(支持答案的檢索片段/引用)。
  2. 傳遞stream=True以獲取從text/event-stream SSE行解析的ChatCompletionChunk對象生成器(每個令牌的data: {...},以data: [DONE]結束)——與OpenAI的串流客戶端生成的形狀相同。
  3. client.models.list()調用GET /v1/models以進行模型發現,返回Model/ModelList對象,與OpenAI SDK一樣。

本地運行

從工作區根目錄(anote/panacea):

bash cd Panacea cp backend/.env.example backend/.env docker compose up --build

安裝客戶端的一個依賴並設置您的API密鑰:

bash pip install requests export ANOTE_API_KEY=your_api_key_here # macOS/Linux set ANOTE_API_KEY=your_api_key_here # Windows cmd

最小化演示

```python from anoteai.openai_compat import AnoteOpenAI

client = AnoteOpenAI(base_url="http://localhost:5000")

普通聊天,無文件:

response = client.chat.completions.create( model="gpt-4o", messages=[{"role": "user", "content": "法國的首都在哪裡?"}], ) print(response.choices[0].message.content)

串流:

for chunk in client.chat.completions.create( model="gpt-4o", messages=[{"role": "user", "content": "數到五。"}], stream=True, ): for choice in chunk.choices: if choice.delta.content: print(choice.delta.content, end="", flush=True) ```

食譜的注意事項

這個食譜是食譜03的良好補充——它是相同的文件問答/RAG能力,但通過現有的基於OpenAI SDK的工具可以無需修改地使用。值得提醒讀者的是,DocumentsClient.upload()/question_answer()是基於OpenAI相容核心之上的Panacea特定輔助工具,而不是OpenAI規範的一部分。