这是我的剧本:
1.客户端有一个Azure SQL数据库,其中包含人口统计信息的配置文件表。
1.我们创建了一个Azure认知搜索并对该数据库进行了索引,我们将所有字段连接到一个称为内容的字段中。因为根据文档,所有内容都需要在一个字段中。https://python.langchain.com/docs/modules/data_connection/retrievers/integrations/azure_cognitive_search
现在我们正在使用LangChain创建一个聊天机器人,我们可以在其中提出以下问题:约翰·史密斯是谁?简·史密斯多大了,他喜欢园艺。
我发现的方法在这里:https://shweta-lodha.medium.com/integrating-azure-cognitive-search-with-azure-openai-and-langchain-51280d1026f2
基本上,首先查询认知搜索并返回一些文档,然后将这些文档保存为ChromaDB中的向量,然后查询ChromaDB,并使用langchain和openAI以简单的英语接收结果。
但是ChromaDB非常慢。并且在这一步中花费大约50秒。
所以我想试试weaviate,但是我得到了一些非常奇怪的错误,比如:
[ERROR] Batch ConnectionError Exception occurred! Retrying in 2s. [1/3]
{'error': [{'message': "'@search.score' is not a valid property name. Property names in Weaviate are restricted to valid GraphQL names, which must be “/[_A-Za-z][_0-9A-Za-z]*/”., no such prop with name '@search.score' found in class 'LangChain_df32d6b6d10c4bb895db75f88aaabd75' in the schema. Check your schema files for which properties in this class are available"}]}
我的代码是这样的:
@timer
def from_documentsWeaviate(docs, embeddings):
return Weaviate.from_documents(docs, embeddings, weaviate_url=WEAVIATE_URL, by_text=False)
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
embeddings = OpenAIEmbeddings(deployment=OPENAI_EMBEDDING_DEPLOYMENT_NAME, model=OPENAI_EMBEDDING_MODEL_NAME, chunk_size=1)
user_input = get_text()
retriever = AzureCognitiveSearchRetriever(content_key="content")
llm = AzureChatOpenAI(
openai_api_base=OPENAI_DEPLOYMENT_ENDPOINT,
openai_api_version=OPENAI_API_VERSION ,
deployment_name=OPENAI_DEPLOYMENT_NAME,
openai_api_key=OPENAI_API_KEY,
openai_api_type = OPENAI_API_TYPE ,
model_name=OPENAI_MODEL_NAME,
temperature=0)
docs = get_relevant_documents(retriever, user_input)
#vectorstore = from_documentsChromaDb(docs=docs, embedding=embeddings)
vectorstore = from_documentsWeaviate(docs, embeddings)
我想知道我是否应该首先索引表中的所有行,避免认知搜索部分。
1条答案
按热度按时间bybem2ql1#
但我会得到一些奇怪的错误,比如:
该错误意味着您的属性名称无效,例如。
@search.score
无效,因为它不符合以下正则表达式:/[_A-Za-z][_0-9A-Za-z]*/
我想知道我是否应该首先索引表中的所有行,避免认知搜索部分。
在我看来,Azure认知搜索部分在这个用例中是多余的,应该用一个管道来替换,该管道从Azure SQL中获取行,将其合并到一个字段中,并将其上传到Web。