🔑 技术教程

文章标题

RAG 问答系统

RAG(Retrieval-Augmented Generation)通过将外部知识库与 LLM 结合,让模型能够基于最新、最相关的信息进行回答。

为什么搜索比微调更好

  • 模型权重:通过微调学习(成本高、更新慢)
  • 模型输入:通过输入消息插入知识(灵活、实时)

两阶段检索方法

  1. 搜索阶段:使用 embedding 相似度搜索相关文档
  2. 问答阶段:将搜索到的文档与问题一起发送给 LLM

实现代码

from openai import OpenAI
import numpy as np

client = OpenAI()

def get_embedding(text): response = client.embeddings.create( model=“text-embedding-3-small”, input=text ) return np.array(response.data[0].embedding)

def cosine_similarity(v1, v2): return np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2))

def search_documents(query, documents, top_k=3): query_emb = get_embedding(query) doc_embs = [get_embedding(doc) for doc in documents] sims = [cosine_similarity(query_emb, emb) for emb in doc_embs] top_indices = np.argsort(sims)[-top_k:][::-1] return [documents[i] for i in top_indices]

def answer_question(query, documents): relevant_docs = search_documents(query, documents) context = “\n”.join(relevant_docs) response = client.chat.completions.create( model=“gpt-4o”, messages=[ {“role”: “system”, “content”: f”基于以下文档回答问题:\n{context}”}, {“role”: “user”, “content”: query} ] ) return response.choices[0].message.content

优化策略

  • 使用混合搜索(向量 + 关键词)
  • 实现 HyDE(假设性文档嵌入)
  • 添加元数据过滤
  • 使用交叉编码器重排序
广告
📢 Google AdSense 广告位

🔥 推荐 AI 工具

🤖
OpenAI API
免费试用 →
🧠
LangChain
了解更多 →