请耐心等待,因为这确实是我编写的第一个主要代码,并且是针对 OpenAI 的 ChatGPT API 的。
我打算用这段代码做的是加载一个pdf文档或一组pdf文档。然后把它们分开,以免用完我的代币。然后,用户会提出与所述文档相关的问题,机器人会做出回应。我遇到的问题是,我希望机器人在我提出新问题时能够理解上下文。例如: Q1:什么是瓢虫?A1:瓢虫是甲虫的一种等等等等...... Q2:它们是什么颜色的?A2:它们可以有各种颜色等等等等... Q3:在哪里可以找到它们?A3:瓢虫遍布世界各地......
但我似乎无法启动并运行我的代码。相反,这是我得到的输出: 当我提出需要机器人了解上下文的后续问题时我得到什么
**这是代码:**
import os
import platform
import openai
import gradio as gr
import chromadb
import langchain
from langchain.chat_models import ChatOpenAI
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.text_splitter import TokenTextSplitter
from langchain.document_loaders import PyPDFLoader
from langchain.prompts.prompt import PromptTemplate
from langchain.chains import ConversationalRetrievalChain
from langchain.memory import ConversationBufferMemory
#OpenAI API Key goes here
os.environ["OPENAI_API_KEY"] = 'sk-xxxxxxx'
#load the data here.
def get_document():
loader = PyPDFLoader('docs/ladybug.pdf')
data = loader.load()
return …Run Code Online (Sandbox Code Playgroud) 我正在学习如何使用 langchain,并且我编写了一个小练习来尝试弄清楚代理是如何工作的。
我有一个小的 Python 程序,如下所示:
import os
from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
topic = input("Topic: ")
prompt = PromptTemplate(input_variables = ['topic'],
template = '''
You have been given access to a search
tool. Please gather information about the
AI algorithm topic{topic}, and write a
thousand word blog post on this topic.
'''
)
os.environ['SERPAPI_API_KEY'] = <"my serpapi key">
llm = OpenAI(model = 'text-davinci-003', temperature = 0.7,openai_api_key = "<my openAPI …Run Code Online (Sandbox Code Playgroud) 构建 langchain 问答机器人并提供 python dash 应用程序。
错误:
torch.cuda.OutOfMemoryError:CUDA 内存不足。尝试分配 64.00 MiB(GPU 0;4.00 GiB 总容量;已分配 3.44 GiB;0 字节可用;PyTorch 总共保留 3.44 GiB)
如果保留内存是 >> 已分配内存,请尝试设置 max_split_size_mb 以避免碎片。请参阅内存管理和 PYTORCH_CUDA_ALLOC_CONF 的文档
在CPU上运行良好;尝试让 CUDA 发挥可扩展性。
我尝试过的:
PYTORCH_CUDA_ALLOC_CONF为 512mb。batch_size=1;.上述都没有解决问题。
vector_db = Chroma(
persist_directory = "",
embedding_function = HuggingFaceInstructEmbeddings(
model_name = "hkunlp/instructor-xl",
model_kwargs = {
"device": "cuda"
}))
llm = AzureOpenAI("",batch_size=1)
qa_chain = RetrievalQA.from_chain_type(
llm = llm, chain_type = "map_reduce",
retriever = vector_db.as_retriever(
search_kwargs = {
'k': 1 …Run Code Online (Sandbox Code Playgroud) 我创建了一个检索 QA 链,它使用 chromadb 作为向量 DB 来存储“abc.txt”文件的嵌入。如果我想动态添加更多文档嵌入(比如说另一个文件“def.txt”)怎么办?怎么做?我不想重新加载 abc.txt 嵌入,然后重新加载 def.txt 嵌入,然后将其放入色度数据库实例中。我只想重用相同的色度数据库实例(已经具有 abc.txt 的嵌入)并添加更多 def.txt 的文档嵌入,然后使用相同的内容进行检索。
loader = UnstructuredFileLoader('abc.txt', mode='elements')
documents= loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1500, chunk_overlap=150)
texts = text_splitter.split_documents(documents)
embeddings = OpenAIEmbeddings()
vectordb = Chroma.from_documents(texts,embeddings)
chain = RetrievalQA.from_chain_type(llm=OpenAI(temperature=0.0),chain_type="stuff", retriever=vectordb.as_retriever(search_type="mmr"),return_source_documents=True)
Run Code Online (Sandbox Code Playgroud) 首先也是最重要的,我使用的是最新的 Python ( ==3.11.2) 和最新版本的 langchain ( ==0.0.128)。
根据DirectoryLoader 的最新文档,以下行应该有效:
from langchain.document_loaders import DirectoryLoader
相反,我看到以下错误。有什么建议么?
我使用 langchain 0.0.143 创建了两个像这样的数据库(相同的嵌入):
db1 = Chroma.from_documents(
documents=texts1,
embedding=embeddings,
persist_directory=persist_directory1,
)
db1.persist()
db21 = Chroma.from_documents(
documents=texts2,
embedding=embeddings,
persist_directory=persist_directory2,
)
db2.persist()
Run Code Online (Sandbox Code Playgroud)
然后稍后访问它们
db1 = Chroma(
persist_directory=persist_directory1,
embedding_function=embeddings,
)
db2 = Chroma(
persist_directory=persist_directory2,
embedding_function=embeddings,
)
Run Code Online (Sandbox Code Playgroud)
如何组合 db1 和 db2?我想在 ConversationalRetrievalChain 设置retrieve=db.as_retriever() 中使用它们。
我尝试了一些搜索建议,但缺少一些明显的东西
我想使用StuffDocumentsChain,但文档中建议示例的行为ConversationChain无法按我想要的方式工作:
import fs from 'fs';
import path from 'path';
import { OpenAI } from "langchain/llms/openai";
import { RecursiveCharacterTextSplitter } from "langchain/text_splitter";
import { HNSWLib } from "langchain/vectorstores/hnswlib";
import { OpenAIEmbeddings } from "langchain/embeddings/openai";
import { ConversationalRetrievalQAChain } from "langchain/chains";
const model = new OpenAI({openAIApiKey: 'sk-...', modelName: 'gpt-3.5-turbo'});
const text = fs.readFileSync(path.resolve(__dirname, './data.txt'), 'utf-8');
const textSplitter = new RecursiveCharacterTextSplitter({ chunkSize: 1000 });
const docs = await textSplitter.createDocuments([text]);
const vectorStore = await HNSWLib.fromDocuments(docs, new OpenAIEmbeddings(
{openAIApiKey: 'sk-...', modelName: …Run Code Online (Sandbox Code Playgroud) 我正在尝试修改现有的 Colab 示例以结合 langchain 内存和上下文文档加载。在两个单独的测试中,每个实例都完美运行。现在我想将两者(训练上下文加载和对话记忆)合二为一 - 这样我就可以加载之前训练的数据,并在我的聊天机器人中保存对话历史记录。问题是我不知道如何使用“ConversationChain”来实现这一点,它只需要一个参数,即“输入”。
当我使用“ConversationChain”时,我可以传递以下内容:
query = "What is the title of the document?"
docs = docsearch.similarity_search(query)
chain.run(input_documents=docs, question=query)
有人能指出我正确的方向吗?
我正在使用这里的内存示例:https ://www.pinecone.io/learn/langchain-conversational-memory/
我对 Python 和 langchain 的了解有限。
我试过:
with open('/content/gdrive/My Drive/ai-data/docsearch.pkl', 'rb') as f:
docsearch = pickle.load(f)
model_kwargs = {"model": "text-davinci-003", "temperature": 0.7, "max_tokens": -1, "top_p": 1, "frequency_penalty": 0, "presence_penalty": 0.5, "n": 1, "best_of": 1}
llm = OpenAI(model_kwargs=model_kwargs)
def count_tokens(chain, query):
with get_openai_callback() as cb:
docs = docsearch.similarity_search(query)
# working older version: result = chain.run(query)
result …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现一个 langchain 代理,它能够在某些信息丢失的情况下提出澄清问题。这是可能吗?一个简单的例子是
Input: "Please give me a recipe for a cake"
Agent: "Certainly. What kind of cake do you have in mind?"
Input: "A chocolate cake"
Agent: "Certainly, here is a recipe for a chocolate cake..."
Run Code Online (Sandbox Code Playgroud) 当我们查看 HuggingFaceHub 模型用法时,langchain有这部分作者不知道如何停止生成,https://github.com/hwchase17/langchain/blob/master/langchain/llms/huggingface_pipeline。 py#L182:
class HuggingFacePipeline(LLM):\n ...\n def _call(\n ...\n if stop is not None:\n # This is a bit hacky, but I can\'t figure out a better way to enforce\n # stop tokens when making calls to huggingface_hub.\n text = enforce_stop_tokens(text, stop)\n return text\nRun Code Online (Sandbox Code Playgroud)\n我应该使用什么来将停止标记添加到模板的末尾?
\n如果我们查看https://github.com/hwchase17/langchain/blob/master/langchain/llms/utils.py,它只是一个正则表达式分割,根据停用词列表分割输入字符串,然后取第一个分区re.split
re.split("|".join(stop), text)[0]\nRun Code Online (Sandbox Code Playgroud)\n让我们尝试从 Huggingface 模型中获取生成输出,例如
\nfrom transformers import pipeline\nfrom transformers import GPT2LMHeadModel, AutoTokenizer\n\ntokenizer = AutoTokenizer.from_pretrained(\'gpt2\')\nmodel = GPT2LMHeadModel.from_pretrained(\'gpt2\')\n\ngenerator = pipeline(\'text-generation\', …Run Code Online (Sandbox Code Playgroud) stop-words huggingface-transformers text-generation langchain large-language-model
langchain ×10
python ×4
py-langchain ×3
openai-api ×2
chatgpt-api ×1
chromadb ×1
combiners ×1
plotly-dash ×1
stop-words ×1
typescript ×1