FastAPI中使用RAGAS的answer_similarity遇embeddings must be set错误求助
解决RAGAS在FastAPI中调用answer_similarity时的embeddings未设置错误
问题出在FastAPI的异步环境下,RAGAS无法自动完成embeddings的初始化,而普通同步脚本中这个自动初始化逻辑能正常运行。解决方法是显式创建embeddings实例,并绑定到AnswerSimilarity度量对象上。
步骤说明
安装必要依赖:根据选择的embeddings模型安装对应包
- 若用开源HuggingFace模型:
pip install langchain-community sentence-transformers - 若用OpenAI嵌入模型:
pip install langchain-openai openai
- 若用开源HuggingFace模型:
修改代码,显式初始化embeddings和度量对象
替换原代码中直接调用answer_similarity的逻辑,改为先初始化embeddings,再创建绑定了embeddings的AnswerSimilarity实例,最后调用其异步score方法。
修改后的完整代码
from fastapi import FastAPI, HTTPException from pydantic import BaseModel from ragas.metrics import AnswerSimilarity # 选择一种embeddings模型,二选一即可 from langchain_community.embeddings import HuggingFaceEmbeddings # 开源模型 # from langchain_openai import OpenAIEmbeddings # OpenAI模型 # 初始化embeddings实例 # 开源模型示例(无需API密钥) embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2") # OpenAI模型示例(需替换为你的API密钥) # embeddings = OpenAIEmbeddings(api_key="your-openai-api-key") # 创建绑定了embeddings的相似度度量实例 answer_similarity_metric = AnswerSimilarity(embeddings=embeddings) app = FastAPI() class Query(BaseModel): question: str answer: str reference_answer: str @app.post("/similarity/") async def calculate_similarity(query: Query): try: # 调用异步score方法计算相似度 similarity_score = await answer_similarity_metric.score( answer=query.answer, reference_answer=query.reference_answer, question=query.question ) return {"similarity_score": similarity_score} except AssertionError as e: raise HTTPException(status_code=500, detail=str(e)) if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)
关键说明
- 原代码中直接调用的
answer_similarity是RAGAS预定义的度量实例,在异步环境下未自动初始化embeddings,因此报错。 - 显式初始化embeddings后绑定到
AnswerSimilarity实例,确保度量对象能正常访问嵌入模型。 score方法是异步方法,需用await调用,适配FastAPI的异步路由机制。
内容的提问来源于stack exchange,提问作者FranzF
相关产品推荐
相关产品推荐

