LangChain如何使用通义千问的向量模型
1、问题
开始用的代码如下:
import os
from langchain_openai import OpenAIEmbeddings, OpenAIembeddings_model = OpenAIEmbeddings(api_key=os.getenv("DASHSCOPE_API_KEY"), # 换成你的API KEYbase_url="https://dashscope.aliyuncs.com/compatible-mode/v1",model="text-embedding-v3"
)
embeddings = embeddings_model.embed_documents(["你好!", "你能做什么"])
print(f"Embedding: {embeddings}")
执行时报错:
openai.BadRequestError: Error code: 400 - {'error': {'code': 'InvalidParameter', 'param': None, 'message': '<400> InternalError.Algo.InvalidParameter: Value error, contents is neither str nor list of str.: input.contents', 'type': 'InvalidParameter'}, 'id': '2aadf398-7093-9b37-be4c-c85829fce932', 'request_id': '2aadf398-7093-9b37-be4c-c85829fce932'}
2、原因
文本列表 在送入 embeddings.create 之前已经被 token 化了,发送给模型的并不是文本原文
3、方案
增加参数check_embedding_ctx_length = False。最终代码如下:
import os
from langchain_openai import OpenAIEmbeddings, OpenAIembeddings_model = OpenAIEmbeddings(api_key=os.getenv("DASHSCOPE_API_KEY"), # 换成你的API KEYbase_url="https://dashscope.aliyuncs.com/compatible-mode/v1",model="text-embedding-v3",check_embedding_ctx_length = False
)
embeddings = embeddings_model.embed_documents(["你好!", "你能做什么"])
print(f"Embedding: {embeddings}")