import os
from langchain_openai import OpenAIEmbeddings, OpenAI
embeddings_model = OpenAIEmbeddings(
api_key=os.getenv("DASHSCOPE_API_KEY"), # 如果您没有配置环境变量,请在此处用您的API Key进行替换
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
model="text-embedding-v3",
)
embeddings = embeddings_model.embed_documents(
[
"Hi there!",
"Oh, hello!",
"What's your name?",
"My friends call me World",
"Hello World!"
]
)
print(f"Embedding: {embeddings}")
本想按照 LangChain 的教程跑一遍练习,LangChain 原版用的 OpenAI,没有额度,所以我改成 QWen,结果第一次运行遇到如下错误:
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'}
经过跟踪 Debug,发现默认 文本列表 在送入 embeddings.create 之前已经被 token 化了,好在发现一个参数可以禁止该行为: check_embedding_ctx_length = False, 加上此参数完美得到期望结果。
embeddings_model = OpenAIEmbeddings(
api_key=os.getenv("DASHSCOPE_API_KEY"), # 如果您没有配置环境变量,请在此处用您的API Key进行替换
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
model="text-embedding-v3",
check_embedding_ctx_length = False,
)