标签: langchain

如何在 Python 中使用 ChatGPT 和 langchain 将上下文/聊天历史合并到 OpenAI ChatBot 中?

请耐心等待,因为这确实是我编写的第一个主要代码,并且是针对 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)

python openai-api chatgpt-api langchain py-langchain

6
推荐指数
1
解决办法
3982
查看次数

我无法让 langchain 代理模块实际执行我的提示

我正在学习如何使用 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)

python langchain

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

使用 python dash 应用程序运行 langchain 问答机器人时出现 CUDA 内存问题:如何修复“torch.cuda.OutOfMemoryError”?

构建 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 发挥可扩展性。

我尝试过的:

  1. 设置PYTORCH_CUDA_ALLOC_CONF为 512mb。
  2. 介绍batch_size=1;.
  3. 在 chain_type 的“stuff”和“map_reduce”之间切换。

上述都没有解决问题。

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)

python plotly-dash langchain

6
推荐指数
0
解决办法
1110
查看次数

在色度数据库中动态添加更多新文档的嵌入 - Langchain

我创建了一个检索 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)

langchain large-language-model chromadb py-langchain

6
推荐指数
1
解决办法
6012
查看次数

langchain:没有名为“langchain.document_loaders”的模块

首先也是最重要的,我使用的是最新的 Python ( ==3.11.2) 和最新版本的 langchain ( ==0.0.128)。

根据DirectoryLoader 的最新文档,以下行应该有效:

from langchain.document_loaders import DirectoryLoader

相反,我看到以下错误。有什么建议么?

在此输入图像描述

jupyter-notebook langchain

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

如何合并两个 Chroma 数据库

我使用 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() 中使用它们。

我尝试了一些搜索建议,但缺少一些明显的东西

python combiners langchain

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

如何在 LangChain 中使用 StuffDocumentsChain 和 ConversationChain?

我想使用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)

artificial-intelligence typescript openai-api langchain

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

具有上下文和内存的langchain

我正在尝试修改现有的 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 py-langchain

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

让LangChain代理提出澄清问题

我正在尝试实现一个 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)

langchain

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

`enforce_stop_tokens` 如何在 LangChain 中与 Huggingface 模型一起工作?

当我们查看 HuggingFaceHub 模型用法时,langchain有这部分作者不知道如何停止生成,https://github.com/hwchase17/langchain/blob/master/langchain/llms/huggingface_pipeline。 py#L182

\n
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\n
Run Code Online (Sandbox Code Playgroud)\n

我应该使用什么来将停止标记添加到模板的末尾?

\n
\n

如果我们查看https://github.com/hwchase17/langchain/blob/master/langchain/llms/utils.py,它只是一个正则表达式分割,根据停用词列表分割输入字符串,然后取第一个分区re.split

\n
re.split("|".join(stop), text)[0]\n
Run Code Online (Sandbox Code Playgroud)\n

让我们尝试从 Huggingface 模型中获取生成输出,例如

\n
from 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

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