标签: langchain

有没有办法在langchain中加载通过VectorstoreIndexCreator创建的索引?它是如何工作的?

我正在尝试 langchains 及其应用程序,但作为一个新手,我无法理解嵌入和索引如何在这里真正协同工作。我知道这两个是什么,但我无法找出使用我创建并保存的索引的方法persist_directory

我使用以下代码成功保存了 VectorstoreIndexCreator 创建的对象:

index = VectorstoreIndexCreator(vectorstore_kwargs={"persist_directory":"./custom_save_dir_path"}).from_loaders([loader])
Run Code Online (Sandbox Code Playgroud)

但我找不到使用创建的 .pkl 文件的方法。如何使用我的链中的这些文件来检索数据?

另外,openAI 中的计费是如何进行的?如果我无法使用任何保存的嵌入或索引,每次运行代码时它都会重新嵌入所有数据吗?作为初学者,我仍在学习中,任何帮助将不胜感激。

这是完整的代码:

from langchain.document_loaders import CSVLoader
from langchain.indexes import VectorstoreIndexCreator
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI
import os
os.environ["OPENAI_API_KEY"] = "sk-xxx"
# Load the documents
loader = CSVLoader(file_path='data/data.csv')

#creates an object with vectorstoreindexcreator
index = VectorstoreIndexCreator(vectorstore_kwargs={"persist_directory":"./custom_save_dir_path"}).from_loaders([loader])

# Create a question-answering chain using the index
chain = RetrievalQA.from_chain_type(llm=OpenAI(), chain_type="stuff", retriever=index.vectorstore.as_retriever(), input_key="question")

# Pass a query to the chain
while True:
    query = input("query: ") …
Run Code Online (Sandbox Code Playgroud)

python indexing langchain

5
推荐指数
1
解决办法
7481
查看次数

AzureOpenAI 和 LangChain 奇怪,多个答案

我正在使用AzureOpenAI来测试LangChain使用宪法的自我批评。

\n

这一切都有效,除了我得到了多个答案,最奇怪的部分是,它生成随机的、不需要的问题,并回答它们。

\n

这是我的 Python 代码(我用 替换了敏感信息[XXX-XXX]):

\n
import os\nfrom langchain.llms import AzureOpenAI\nfrom langchain.prompts import PromptTemplate\nfrom langchain.chains.llm import LLMChain\n\nfrom langchain.chains.constitutional_ai.base import ConstitutionalChain\nfrom langchain.chains.constitutional_ai.models import ConstitutionalPrinciple\n\nos.environ["OPENAI_API_TYPE"] = "azure"\nos.environ["OPENAI_API_VERSION"] = "2023-03-15-preview"\nos.environ["OPENAI_API_BASE"] = "https://[XXX-XXX].openai.azure.com/"\nos.environ["OPENAI_API_KEY"] = "[XXX-XXX]"\n\nqa_prompt = PromptTemplate(\n    template="""You are a Microsoft specialist and know everything about the software it sells.  Your aim is to help operators and employees when using the software.\n\nQuestion: {question}\n\nAnswer:""",\n    input_variables=["question"],\n)\n\nllm = AzureOpenAI(\n    deployment_name="[XXX-XXX]",\n    model_name="[XXX-XXX]"\n)\n\n\nqa_chain = LLMChain(llm=llm, prompt=qa_prompt)\n\nethical_principle = ConstitutionalPrinciple(\n    name="Ethical Principle",\n    critique_request="The model should only …
Run Code Online (Sandbox Code Playgroud)

python azure openai-api azure-openai langchain

5
推荐指数
1
解决办法
2640
查看次数

ValueError:当不存在一个输出键时,不支持“run”。得到['answer'、'sources'、'source_documents']。(langchain/Streamlit)

我收到一个错误说

ValueError: `run` not supported when there is not exactly one output key. Got ['answer', 'sources', 'source_documents'].
Run Code Online (Sandbox Code Playgroud)

这是回溯错误

File "C:\Users\Science-01\anaconda3\envs\gpt-dev\lib\site-packages\streamlit\runtime\scriptrunner\script_runner.py", line 565, in _run_script
    exec(code, module.__dict__)
File "C:\Users\Science-01\Documents\Working Folder\Chat Bot\Streamlit\alpha-test.py", line 67, in <module>
    response = chain.run(prompt, return_only_outputs=True)
File "C:\Users\Science-01\anaconda3\envs\gpt-dev\lib\site-packages\langchain\chains\base.py", line 228, in run
    raise ValueError(
Run Code Online (Sandbox Code Playgroud)

我尝试在 Streamlit 上运行 langchain。我使用RetrievalQAWithSourcesChainChatPromptTemplate

这是我的代码

import os

import streamlit as st

from apikey import apikey

from langchain.document_loaders import PyPDFLoader
from langchain.document_loaders import DirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings.openai import OpenAIEmbeddings …
Run Code Online (Sandbox Code Playgroud)

python openai-api langchain py-langchain

5
推荐指数
1
解决办法
1万
查看次数

使用 Pyton Flask API 传输来自 LangChain 的 OpenAI 的响应

我正在使用 Python Flask 应用程序进行数据聊天。因此,在控制台中,我可以直接从 OpenAI 获得流式响应,因为我可以使用 flag 启用流处理streaming=True

\n

问题是,我无法在 API 调用中 \xe2\x80\x9cforward\xe2\x80\x9d 流或 \xe2\x80\x9cshow\xe2\x80\x9d 流。

\n

处理 OpenAI 和链的代码是:

\n
def askQuestion(self, collection_id, question):\n        collection_name = "collection-" + str(collection_id)\n        self.llm = ChatOpenAI(model_name=self.model_name, temperature=self.temperature, openai_api_key=os.environ.get('OPENAI_API_KEY'), streaming=True, callback_manager=CallbackManager([StreamingStdOutCallbackHandler()]))\n        self.memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True,  output_key='answer')\n        \n        chroma_Vectorstore = Chroma(collection_name=collection_name, embedding_function=self.embeddingsOpenAi, client=self.chroma_client)\n\n\n        self.chain = ConversationalRetrievalChain.from_llm(self.llm, chroma_Vectorstore.as_retriever(similarity_search_with_score=True),\n                                                            return_source_documents=True,verbose=VERBOSE, \n                                                            memory=self.memory)\n        \n\n        result = self.chain({"question": question})\n        \n        res_dict = {\n            "answer": result["answer"],\n        }\n\n        res_dict["source_documents"] = []\n\n        for source in result["source_documents"]:\n            res_dict["source_documents"].append({\n                "page_content": source.page_content,\n                "metadata": …
Run Code Online (Sandbox Code Playgroud)

python flask openai-api langchain

5
推荐指数
1
解决办法
4741
查看次数

查询现有的 Pinecone 索引,无需重新加载上下文数据

我正在学习 Langchain 和矢量数据库。

按照原始文档,我可以阅读一些文档,更新数据库,然后进行查询。

https://python.langchain.com/en/harrison-docs-refactor-3-24/modules/indexes/vectorstores/examples/pinecone.html

我想访问相同的索引并再次查询它,但不需要重新加载嵌入并将向量再次添加到 ddbb。

如何docsearch在不创建新向量的情况下生成相同的对象?

# Load source Word doc
loader = UnstructuredWordDocumentLoader("C:/Users/ELECTROPC/utilities/openai/data_test.docx", mode="elements")
data = loader.load()

# Text splitting
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(data)

# Upsert vectors to Pinecone Index
pinecone.init(
    api_key=PINECONE_API_KEY,  # find at app.pinecone.io
    environment=PINECONE_API_ENV
)
index_name = "mlqai"
embeddings = OpenAIEmbeddings(openai_api_key=os.environ['OPENAI_API_KEY'])

docsearch = Pinecone.from_texts([t.page_content for t in texts], embeddings, index_name=index_name)


# Query
llm = OpenAI(temperature=0, openai_api_key=os.environ['OPENAI_API_KEY'])
chain = load_qa_chain(llm, chain_type="stuff")

query = "que sabes de los patinetes?"
docs = …
Run Code Online (Sandbox Code Playgroud)

python langchain

5
推荐指数
1
解决办法
3827
查看次数

如何更改LangChain默认返回的4个文档?

我有以下代码实现 LangChain + ChatGPT 以回答给定数据的问题:

import { PineconeStore } from 'langchain/vectorstores/pinecone';
import { ConversationalRetrievalQAChain } from 'langchain/chains';

const CONDENSE_PROMPT = `Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question.

Chat History:
{chat_history}
Follow Up Input: {question}
Standalone question:`;

const QA_PROMPT = `You are a helpful AI assistant. Use the following pieces of context to answer the question at the end.
If you don't know the answer, just say you don't …
Run Code Online (Sandbox Code Playgroud)

openai-api gpt-4 langchain

5
推荐指数
1
解决办法
1304
查看次数

Langchain:文本分割器行为

我不明白 Langchain 递归文本分割器的以下行为。这是我的代码和输出。

from langchain.text_splitter import RecursiveCharacterTextSplitter
r_splitter = RecursiveCharacterTextSplitter(
    chunk_size=10,
    chunk_overlap=0,
#     separators=["\n"]#, "\n", " ", ""]
)
test = """a\nbcefg\nhij\nk"""
print(len(test))
tmp = r_splitter.split_text(test)
print(tmp)
Run Code Online (Sandbox Code Playgroud)

输出

13
['a\nbcefg', 'hij\nk']
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它输出大小为 7 和 5 的块,并且仅在新行字符之一上进行分割。我期望输出为 ['a','bcefg','hij','k']

python langchain py-langchain

5
推荐指数
1
解决办法
2万
查看次数

如何使用 LangChain 的 LLMChain (python) 获取发送到 LLM 的准确消息?

目前,在 LangChain 中使用时LLMChain,我可以获取使用的模板提示和模型的响应,但是是否可以获取作为查询发送到模型的确切文本消息,而无需手动进行提示模板填充?

一个例子:

from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain

llm = OpenAI(model_name="gpt-3.5-turbo-0613")
prompt = PromptTemplate(input_variables=["a", "b"], template="Hello {a} and {b}")
chain = LLMChain(llm=llm, prompt=prompt)
result = chain.call({"a": "some text", "b": "some other text"})
Run Code Online (Sandbox Code Playgroud)

chain我无法在或对象中找到我正在寻找的东西result。我尝试了一些选项,例如return_final_only=Trueinclude_run_info=True但它们不包含我正在寻找的内容。

python langchain py-langchain

5
推荐指数
1
解决办法
3201
查看次数

Langchain 上多个 JSON 文件的查询机器人

我有大约 30 GB 的 JSON 数据和多个文件,想要在此基础上构建查询机器人。我已经用文本文件构建了相同的内容,但我不确定它如何适用于 JSON 数据。

我已经探索过 JSONLoader,但不知道如何使用它将 JSON 数据转换为向量并将其存储到 ChromaDB 中,以便我可以查询它们。 https://python.langchain.com/docs/modules/data_connection/document_loaders/json

示例 JSON 文件:http://jsonblob.com/1147948130921996288

文本数据代码:

# Loading and Splitting the Documents
from langchain.document_loaders import DirectoryLoader

directory = '/content/drive/MyDrive/Data Science/LLM/docs/text files'

def load_docs(directory):
  loader = DirectoryLoader(directory)
  documents = loader.load()
  return documents

documents = load_docs(directory)
len(documents)


from langchain.text_splitter import RecursiveCharacterTextSplitter

def split_docs(documents,chunk_size=1000,chunk_overlap=20):
  text_splitter = RecursiveCharacterTextSplitter(chunk_size=chunk_size, chunk_overlap=chunk_overlap)
  docs = text_splitter.split_documents(documents)
  return docs

docs = split_docs(documents)
print(len(docs))

# Embedding Text Using Langchain
from langchain.embeddings import SentenceTransformerEmbeddings
embeddings = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2") …
Run Code Online (Sandbox Code Playgroud)

python langchain large-language-model chromadb jsonloader

5
推荐指数
0
解决办法
1788
查看次数

如何在 Langchain 中激活详细程度

我正在使用 Langchain 0.0.345。我无法使用LCEL 方法构建链来获得幕后发生的情况的详细输出。

我有这个代码:

from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.schema.output_parser import StrOutputParser
from langchain.globals import set_verbose

set_verbose(True)

prompt = ChatPromptTemplate.from_template("tell me a joke about {topic}")
model = ChatOpenAI()
output_parser = StrOutputParser()

chain = prompt | model | output_parser

chain.invoke({"topic": "ice cream"})
Run Code Online (Sandbox Code Playgroud)

根据文档,使用的set_verbose是显示中间步骤、提示构建等的详细输出的方法。但是该脚本的输出只是一个字符串,没有任何中间步骤。实际上, API 文档langchain.globals中甚至没有提及该模块。

我也尝试过verbose=True在模型创建中设置参数,但也不起作用。这用于与前一种方法一起使用类等进行构建。

建议和当前的方法是如何记录输出以便您了解发生了什么?

谢谢!

python langchain large-language-model

5
推荐指数
1
解决办法
1550
查看次数