這 30 天裡,我們學了文字、圖片、語音、Embeddings 等各種功能。
那如果把這些功能整合起來,能做什麼?
答案是:
讓 AI 幫你「讀文件、抓重點、回答問題」。今天,我們就要做一個小型「智慧文件助理」
這個小工具能讀取使用者上傳的 PDF/TXT檔
使用 Embeddings 轉成向量,用 Chat Completions 分析與回答問題
from openai import OpenAI
import os, json
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
client = OpenAI(api_key="YOUR OPENAI API KEY")
def get_embeddings(texts):
    vectors = []
    for t in texts:
        emb = client.embeddings.create(
            model="text-embedding-3-small",
            input=t
        )
        vectors.append(emb.data[0].embedding)
    return np.array(vectors)
def find_best_match(question, texts, vectors):
    q_emb = client.embeddings.create(
        model="text-embedding-3-small",
        input=question
    ).data[0].embedding
    sims = cosine_similarity([q_emb], vectors)[0]
    best_idx = int(np.argmax(sims))
    return texts[best_idx]
def ask_ai(question, context):
    messages = [
        {"role": "system", "content": "你是一位文件助理,根據內容回答問題。"},
        {"role": "user", "content": f"文件內容:{context}\n\n問題:{question}"}
    ]
    resp = client.chat.completions.create(model="gpt-4o-mini", messages=messages)
    return resp.choices[0].message.content
texts = [
    "OpenAI API 提供 Chat, Image, Audio, Embeddings 等功能。",
    "Chat 模型可以生成對話與程式碼。",
    "Embeddings 可用於語意搜尋與推薦系統。"
]
vectors = get_embeddings(texts)
question = input("請輸入問題:")
context = find_best_match(question, texts, vectors)
answer = ask_ai(question, context)
print("\nAI 回答:", answer)

OpenAI API 的每個功能都很強,但真正厲害的地方,是 把它們整合起來解決問題
今天的智慧文件助理,就是一個縮小版的 ChatGPT 文件問答系統。
明天就是最後一天,我們要總結這 30 天學到的全部內容!