标签: py-langchain

关于差异/比较,请参考使用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
查看次数

为 langchain 中的嵌套 json 定义输出模式

为嵌套 json 定义输出模式的推荐方法是什么,我使用的方法感觉不太理想。

# adding to planner -> from langchain.experimental.plan_and_execute import load_chat_planner

refinement_response_schemas = [
        ResponseSchema(name="plan", description="""{'1': {'step': '','tools': [],'data_sources': [],'sub_steps_needed': bool},
 '2': {'step': '','tools': [<empty list>],'data_sources': [<>], 'sub_steps_needed': bool},}"""),] #define json schema in description, works but doesn't feel proper
    
refinement_output_parser = StructuredOutputParser.from_response_schemas(refinement_response_schemas)
refinement_format_instructions = refinement_output_parser.get_format_instructions()

refinement_output_parser.parse(output)
Run Code Online (Sandbox Code Playgroud)

给出:

{'plan': {'1': {'step': 'Identify the top 5 strikers in La Liga',
   'tools': [],
   'data_sources': ['sports websites', 'official league statistics'],
   'sub_steps_needed': False},
  '2': {'step': 'Identify the top 5 strikers in the Premier League', …
Run Code Online (Sandbox Code Playgroud)

python openai-api langchain py-langchain

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

Langchain 工具包可以修改吗?我们可以向 pandas_dataframe_agent 工具包添加工具吗?

我是 langchain 的新手,所以我猜这是可能的,但这表明我对 langchain 中的组件缺乏充分的了解。我已成功创建并使用 Pandas Dataframe Agent 工具包来分析小型数据框。我还成功地使用 SERPAPI 工具来利用 Google 搜索 API 并从互联网上检索答案。我的目标是将这两件事结合到一个代理中......一个代理可以在数据中存在答案时查询数据以获取答案,而在数据中不存在答案时默认使用互联网。我觉得可能有一种方法可以向现有代理 takeit 添加工具。另一种选择似乎是从头开始创建一个新代理,复制 pandas 数据框代理的功能并添加其他工具......但这超出了我目前的技能范围。

给定一个数据框 sales_df:

from langchain.agents import create_pandas_dataframe_agent
from langchain.llms import OpenAI

question = 'Which itemnumber has the most sales?'
agent = create_pandas_dataframe_agent(OpenAI(temperature=0), 
                                      sales_df,
                                      verbose=True,
                                     )
agent.run(question)
Run Code Online (Sandbox Code Playgroud)

此代码成功返回我的 pandas 数据框问题的正确答案。

鉴于上面的项目编号(出于隐私原因,xxx 已被删除):

from langchain.agents import initialize_agent, load_tools, AgentType
from langchain.llms import OpenAI

llm = OpenAI(temperature=0)
tools = load_tools(['serpapi'], serpapi_api_key=SERPAPI_API_KEY)

agent = initialize_agent(
    tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True
)

agent.run("What is the description of the …
Run Code Online (Sandbox Code Playgroud)

agent pandas py-langchain

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

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

我正在尝试修改现有的 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万
查看次数

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万
查看次数

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
查看次数

为什么 RecursiveCharacterTextSplitter 没有给出任何块重叠?

我正在尝试创建(最大)350 个字符长、100 个块重叠的块。

我知道这chunk_size是一个上限,所以我可能会得到比这个更短的块。但为什么我没有得到任何chunk_overlap

是因为重叠也必须在分隔符之一上分割吗?那么如果separator分割的 100 个字符以内可以分割,那么它就是 100 个字符 chunk_overlap 吗?

from langchain.text_splitter import RecursiveCharacterTextSplitter

some_text = """When writing documents, writers will use document structure to group content. \
This can convey to the reader, which idea's are related. For example, closely related ideas \
are in sentances. Similar ideas are in paragraphs. Paragraphs form a document. \n\n  \
Paragraphs are often delimited with a carriage return or two carriage returns. \
Carriage returns …
Run Code Online (Sandbox Code Playgroud)

python langchain py-langchain

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

LangChain,在特定工具输出上终止链

我使用会话代理和一些工具,其中之一是计算器工具(作为示例)。

代理初始化如下:

conversational_agent = initialize_agent(
        agent='chat-conversational-react-description',
        tools=[CalculatorTool()],
        llm=llm_gpt4,
        verbose=True,
        max_iterations=2,
        early_stopping_method="generate",
        memory=memory,
        # agent_kwargs=dict(output_parser=output_parser),
    )

Run Code Online (Sandbox Code Playgroud)

CalculatorTool激活时,它将返回一个字符串输出,代理获取该输出并进一步处理它以获得“最终答案”,从而更改输出的格式CalculatorTool

例如,对于 input 10*10,工具run()函数将返回100,该函数将被传播回代理,代理将调用self._take_next_step()并继续处理输出。

它将创建类似的最终输出the result of your prompt of 10x10 is 100

我不想要LLM添加的格式,只想要100.

我想在CalculatorTool完成后打破链条,并将其输出按原样返回给客户端。

我还有返回序列化数据的工具,对于图表来说,由代理的下一次迭代重新处理该数据将使其无效。

langchain py-langchain

4
推荐指数
1
解决办法
3700
查看次数