幾個開發大模型應用常用的 Python 庫
一、應用層開發
1. FastAPI
FastAPI是構建API的優選。顧名思義,它快速、簡單,并能與Pydantic完美集成,實現無縫數據驗證。
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
@app.post("/items/")
async def create_item(item: Item):
return {"name": item.name, "price": item.price}
2. Jinja
Jinja是一個模板引擎,用于創建動態提示,它簡單而強大,在管理復雜的提示邏輯方面起著關鍵作用。
from jinja2 import Template
template = Template("Hello {{ name }}!")
print(template.render(name="Raj"))
二、任務調度
有時候系統需要處理繁重的工作,Celery庫可以幫助跨多個線程或機器分配任務。即使在要求苛刻的操作中,也能保持應用程序的響應速度。
from celery import Celery
app = Celery('tasks', broker='redis://localhost:6379/0')
@app.task
def add(x, y):
return x + y
三、數據管理
數據是AI的基礎,目前比較常用的兩種數據庫:PostgreSQL和MongoDB,分別對應著結構化和非結構化數據。
1. 連接
一般使用psycopg2管理Postgre SQL,使用PyMongo管理MongoDB。
import psycopg2
conn = psycopg2.connect(
dbname="example", user="user", password="password", host="localhost")
cursor = conn.cursor()
cursor.execute("SELECT * FROM table")
rows = cursor.fetchall()
print(rows)
2. 簡化數據操作
SQLAlchemy可以實現Python API管理數據庫操作,相比SQL,這更干凈,更高效。
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
engine = create_engine('sqlite:///example.db')
Base.metadata.create_all(engine)
四、API集成
將AI大模型集成到應用程序是最重要的步驟,實際上我們的應用就像是LLM的客戶端,OpenAI、Anthropic和Google API 這些庫都是AI應用集成常用的。
import openai
openai.api_key = "your-api-key"
response = openai.Completion.create(
engine="text-davinci-003",
prompt="Write a Python function to add two numbers.",
max_tokens=100
)
print(response.choices[0].text.strip())
五、數據處理
1. 結構化
如果應用想從LLM中得到可靠的結構化輸出,那么Instructor庫是一個很好的選擇。它可與各種模型配合使用,并且提供了高級數據驗證功能。
from instructor import Instructor
instructor = Instructor(api_key="your-api-key")
response = instructor.get_response(prompt="What is the capital of France?", model="text-davinci-003")
print(response)
2. LangChain和LlamaIndex:
這些框架簡化了使用大型語言模型的工作。在一些場景下它們可以容簡化提示管理和嵌入之類的復雜任務,使其易于入門。
from langchain.chains import LLMChain
from langchain.llms import OpenAI
llm = OpenAI(temperature=0.7)
chain = LLMChain(llm=llm)
response = chain.run("What is 2 + 2?")
print(response)
3. 向量數據庫
許多AI應用程序,例如RAG,依賴于存儲上下文,以便于后續進行檢索。
往往會使用到向量數據庫存儲向量以及執行相似性搜索,例如:Pinecone、Weaviate和PGVector。
import pinecone
pinecone.init(api_key="your-api-key", environment="us-west1-gcp")
index = pinecone.Index("example-index")
index.upsert([("id1", [0.1, 0.2, 0.3])])
result = index.query([0.1, 0.2, 0.3], top_k=1)
print(result)
4. DSPy
DSPy有助于自動優化提示,在微調AI響應時節省大量時間以及猜測。
from dsp import PromptOptimizer
optimizer = PromptOptimizer()
optimized_prompt = optimizer.optimize("Write a poem about space.")
print(optimized_prompt)
5. PyMuPDF和PyPDF2
如果AI應用需要從PDF或文檔中提取數據,這些庫是靠譜的選擇。
import fitz
doc = fitz.open("example.pdf")
for page in doc:
print(page.get_text())
6. Pydantic
人工智能項目經常需要處理混亂、不可預測的數據,Pydantic優雅地可以清理、組織數據。
from pydantic import BaseModel
class User(BaseModel):
name: str
age: int
email: str
user = User(name="rose", age=30, email="rose@example.com")
print(user.dict())
六、跟蹤觀察
大模型應用的開發不是一觸而就,開發只是第一步,在開發完之后還需要持續監控它的執行狀況并對其優化。
Langsmith和Langsmith,這兩個平臺適合用于跟蹤LLM調用情況,包括延遲、成本和輸出等關鍵數據。
from langfuse import LangFuse
langfuse = LangFuse(api_key="your-api-key")
langfuse.log_interaction(prompt="What is 5 + 5?", response="10", latency=0.3)
以上這些Python庫可以用于構建可靠、可擴展和高效的AI應用程序。