我正在尝试 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) 我正在使用AzureOpenAI来测试LangChain使用宪法的自我批评。
\n这一切都有效,除了我得到了多个答案,最奇怪的部分是,它生成随机的、不需要的问题,并回答它们。
\n这是我的 Python 代码(我用 替换了敏感信息[XXX-XXX]):
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) 我收到一个错误说
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。我使用RetrievalQAWithSourcesChain和ChatPromptTemplate
这是我的代码
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 Flask 应用程序进行数据聊天。因此,在控制台中,我可以直接从 OpenAI 获得流式响应,因为我可以使用 flag 启用流处理streaming=True。
问题是,我无法在 API 调用中 \xe2\x80\x9cforward\xe2\x80\x9d 流或 \xe2\x80\x9cshow\xe2\x80\x9d 流。
\n处理 OpenAI 和链的代码是:
\ndef 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) 我正在学习 Langchain 和矢量数据库。
按照原始文档,我可以阅读一些文档,更新数据库,然后进行查询。
我想访问相同的索引并再次查询它,但不需要重新加载嵌入并将向量再次添加到 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) 我有以下代码实现 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) 我不明白 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']
目前,在 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=True和include_run_info=True但它们不包含我正在寻找的内容。
我有大约 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) 我正在使用 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在模型创建中设置参数,但也不起作用。这用于与前一种方法一起使用类等进行构建。
建议和当前的方法是如何记录输出以便您了解发生了什么?
谢谢!
langchain ×10
python ×9
openai-api ×4
py-langchain ×3
azure ×1
azure-openai ×1
chromadb ×1
flask ×1
gpt-4 ×1
indexing ×1
jsonloader ×1