标签: langchain

使用Vicuna + langchain + llama_index 创建自托管LLM模型

我想创建一个自托管的 LLM 模型,该模型将能够拥有我自己的自定义数据的上下文(就此而言,Slack 对话)。

我听说 Vicuna 是 ChatGPT 的一个很好的替代品,所以我编写了以下代码:

from llama_index import SimpleDirectoryReader, LangchainEmbedding, GPTListIndex, \
    GPTSimpleVectorIndex, PromptHelper, LLMPredictor, Document, ServiceContext
from langchain.embeddings.huggingface import HuggingFaceEmbeddings
import torch
from langchain.llms.base import LLM
from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM

!export PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:512
    
class CustomLLM(LLM):
    model_name = "eachadea/vicuna-13b-1.1"
    tokenizer = AutoTokenizer.from_pretrained(model_name)
    model = AutoModelForCausalLM.from_pretrained(model_name)

    pipeline = pipeline("text2text-generation", model=model, tokenizer=tokenizer, device=0,
                        model_kwargs={"torch_dtype":torch.bfloat16})

    def _call(self, prompt, stop=None):
        return self.pipeline(prompt, max_length=9999)[0]["generated_text"]
 
    def _identifying_params(self):
        return {"name_of_model": self.model_name}

    def _llm_type(self):
        return "custom"


llm_predictor = LLMPredictor(llm=CustomLLM())
Run Code Online (Sandbox Code Playgroud)

但遗憾的是我遇到了以下错误:

OutOfMemoryError: CUDA out …
Run Code Online (Sandbox Code Playgroud)

python machine-learning pytorch chatgpt-api langchain

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

关于差异/比较,请参考使用LangChain和问答的具体文件

我还没有找到有关基于多个文本文件的问答的文档,同时单独引用文本文件。

示例:我已经file1.txt通过了file20.txtfile1.txt是从 2023 年 4 月开始,file5.txt是从 2023 年 3 月开始。

给定两个文件,我希望 chatGPT 读取这两个文件并回答比较问题,例如:

“从 3 月份的文件到 4 月份的文件,关于 ___ 的情绪有何变化/进展?”
“两个文件在 ___ 的讨论方面有何不同?”
“每个文件中 ___ 被提及多少次?”

这是非工作代码,说明了我想要实现的目标:

from langchain.chains.qa_with_sources import load_qa_with_sources_chain
from langchain.llms import OpenAI

chain = load_qa_with_sources_chain(OpenAI(temperature=0), chain_type="stuff")
query = "How has sentiment regarding medical devices changed/progressed from March to April?"
docs = [March_file, April_file]
chain({"input_documents": docs, "question": query}, return_only_outputs=True)
Run Code Online (Sandbox Code Playgroud)

我遇到的问题:

  1. 分块 - langchain 的 QA 假设将您的所有个人文件分块为许多单独的、但仍然连续的块/ documents。然而,我的任务的性质需要分离文件,因为需要以某种方式通过不同的日期引用它们(并且仍然需要分块,因为文件很大)。

  2. 对特定文件的引用 - …

openai-api langchain py-langchain

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

使用 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 获得更详细的结果来源

我正在尝试使用 Langchain 和特定 URL 作为源数据来整理一个简单的“来源问答”。URL 由一个页面组成,其中包含大量信息。

问题是RetrievalQAWithSourcesChain只给我返回整个 URL 作为结果的来源,这在这种情况下不是很有用。

有没有办法获得更详细的源信息?也许页面上特定部分的标题?指向页面正确部分的可点击 URL 会更有帮助!

我有点不确定 的生成是result source语言模型、URL 加载器的函数还是仅仅是RetrievalQAWithSourcesChain单独的。

我尝试过使用UnstructuredURLLoader和 ,SeleniumURLLoader希望更详细的数据读取和输入会有所帮助 - 遗憾的是没有。

相关代码摘录:

llm = ChatOpenAI(temperature=0, model_name='gpt-3.5-turbo')
chain = RetrievalQAWithSourcesChain.from_llm(llm=llm, retriever=VectorStore.as_retriever())

result = chain({"question": question})

print(result['answer'])
print("\n Sources : ",result['sources'] )
Run Code Online (Sandbox Code Playgroud)

python openai-api gpt-3 chatgpt-api langchain

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

如何向pandas工具包代理添加会话记忆?

我想添加一个ConversationBufferMemorypandas_dataframe_agent但到目前为止我还没有成功。

  • 我尝试通过 construcor: 添加内存,create_pandas_dataframe_agent(llm, df, verbose=True, memory=memory)这不会破坏代码,但不会导致代理记住我之前的问题。
  • 我还尝试通过这段代码将内存添加到代理中:pd_agent.agent.llm_chain.memory = memory。这导致了ValueError: One input key expected got ['input', 'agent_scratchpad']

这是我到目前为止的代码(不起作用):

llm = ChatOpenAI(temperature=0, model_name="gpt-4-0613")

memory = ConversationBufferMemory()

pd_agent = create_pandas_dataframe_agent(llm, df, verbose=True, memory=memory)
#pd_agent.agent.llm_chain.memory = memory #Or if I use this approach the code breaks when calling the .run() methods

pd_agent.run("Look into the data in step 12. Are there any weird patterns? What can we say about this part of the dataset.")
pd_agent.run("What …
Run Code Online (Sandbox Code Playgroud)

python openai-api langchain

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

如何在 Next JS 应用程序中使用 langchain ConversationalRetrievalQA 链存储聊天记录?

我正在创建一个文本文档 QA 聊天机器人,我使用LangchainjsOpenAI LLM 来创建嵌入,并使用 Chat 和Pinecone作为我的矢量存储。

见图: 在此输入图像描述

成功上传嵌入并在松果上创建索引后。我正在使用 Next JS 应用程序与 OpenAI 和 Pinecone 进行通信。

我的应用程序的当前结构如下所示:

1:前端 -> 用户输入 aquestion并对 NEXT js 服务器 API 路由进行 POST 调用/ask

2:服务器功能如下所示:

const vectorStore = await PineconeStore.fromExistingIndex(
        new OpenAIEmbeddings(),
        { pineconeIndex })

const model = new ChatOpenAI({ temperature: 0.5, modelName: 'gpt-3.5-turbo' })

const memory = new ConversationSummaryMemory({
    memoryKey: 'chat_history',
    llm: new ChatOpenAI({ modelName: 'gpt-3.5-turbo', temperature: 0 }),
})

const chain = ConversationalRetrievalQAChain.fromLLM(
    model,
    vectorStore.asRetriever(),
    { …
Run Code Online (Sandbox Code Playgroud)

chatbot next.js openai-api langchain pinecone

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

在色度数据库中动态添加更多新文档的嵌入 - 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 查询 mongo 集合

我想使用 lanchain 查询我的 mongo 集合。

就像我们在 langchain 中有 SQLDatabaseChain 来连接 sql 数据库(如 postgres)一样,我们是否有类似的东西来连接 nosql 数据库(如 mongo)?

我查看了文档,没有找到 nosql 的任何替代方案。

openai-api langchain

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

如何从 LangChain QAMapReduceChain 流式传输响应

我正在使用 Langchain 与一长段文本进行交互。文本被分成块,这些块作为下面的变量传入docs

我已经建立了一个链来传输我的响应,但是我发现handleLLMNewToken在 OpenAI 返回所有代的令牌(其中包括每个文档的映射步骤)时调用该链。

这会导致混乱的响应,这是所有一代的组合,而不仅仅是输出一代。我找不到一种方法可以让我仅在生成最终结果时对其进行流式传输。

如果我使用该变量,我可以访问已完成的提示chainResult- 但与回调不同,它不可流式传输。

const SUMMARISE_MODEL = {
        temperature: 0.5,
        modelName: "gpt-3.5-turbo-16k",
        maxTokens: 5000,
        verbose: false,
        maxConcurrency: 2,
        streaming: true,
}

//...OTHER CODE

const chain = loadQAMapReduceChain(model, {returnIntermediateSteps: true});
const chainResult = await chain.call({
            input_documents: docs,
            question: templateString,
        }, [

            {
                handleLLMNewToken(token: string) {
                    updateResponse(token);
                },
            }
        ],);
Run Code Online (Sandbox Code Playgroud)

typescript openai-api langchain

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

PromptTemplate 如何与 RetrievalQA 交互?

我是 LangChain 的新手,我正在尝试创建一个简单的问答机器人(通过文档)。按照他们网站上的文档和指南,我创建了一个简单的工作机器人,但我很难理解代码的某些部分。

template = """Use the following pieces of context to answer the question at the end. 
If you don't know the answer, just say that you don't know, don't try to make up an answer. 
Use three sentences maximum and keep the answer as concise as possible. 
Always say "thanks for asking!" at the end of the answer. 
{context}
Question: {question}
Helpful Answer:"""

QA_CHAIN_PROMPT = PromptTemplate(input_variables=["context", "question"], template=template)

llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)
qa = RetrievalQA.from_chain_type(llm,
                                chain_type='stuff',
                                retriever=vectorstore.as_retriever(),
                                chain_type_kwargs={"prompt": …
Run Code Online (Sandbox Code Playgroud)

langchain py-langchain

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