AttributeError: объект «кортеж» не имеет атрибута «is_single_input»

Я пытаюсь использовать агентов langchain, чтобы получить ответы на вопросы, заданные с помощью API, но столкнулся с ошибкой «AttributeError: объект 'tuple' не имеет атрибута 'is_single_input'». Ниже приведен код и ошибка. Открыт для решения и предложений.

      from langchain.tools import StructuredTool
from langchain.agents import initialize_agent
from langchain.llms import OpenAI
import requests

Шаг 1. Реализуйте функцию или класс API

      def process_document(document):
    # Process the document using your API logic
    url = 'api'

    data = {'file': open(document, 'rb')}

    response = requests.post(url, auth=requests.auth.HTTPBasicAuth('dfg', ''), files=data)
    return response

Шаг 2. Создайте инструмент

      tool = StructuredTool.from_function(process_document,description="Process the document using the API")

Шаг 3. Инициализируйте языковую модель

      llm = OpenAI(temperature=0, model_name="text-davinci-003", openai_api_key="key")

Шаг 4. Инициализируйте агента

      agent = initialize_agent(tool, llm)

Шаг 5. Используйте агента

      document = ""  # Provide the document to be processed
result = agent.process(document)  # Process the document using the agent and the API
question = "What is Registration number and registration date?"  # Provide the question to ask about    the processed result
answer = agent.generate(question)  # Generate an answer to the question using the agent

При реализации этого я столкнулся со следующей ошибкой:

      AttributeError                            Traceback (most recent call last)
<ipython-input-3-dea540cbc5b0> in <cell line: 28>()
     26 
     27 # Step 4: Initialize the Agent
---> 28 agent = initialize_agent(tool, llm)
     29 
     30 # Step 5: Use the Agent

3 frames
/usr/local/lib/python3.10/dist-packages/langchain/agents/utils.py in validate_tools_single_input(class_name, tools)
      7     """Validate tools for single input."""
      8     for tool in tools:
----> 9         if not tool.is_single_input:
     10             raise ValueError(
     11                 f"{class_name} does not support multi-input tool {tool.name}."

AttributeError: 'tuple' object has no attribute 'is_single_input'
 

2 ответа

Проблема здесь

      agent = initialize_agent(tool, llm)

Вы должны передать это как список. Не кортеж.

Измените его на

      agent = initialize_agent([tool] , llm)

документация

Я не очень хорошо знаком с langchain, но вprocess_documentвы должны вернуть строку, как описано здесь .

поэтому ваш код должен выглядеть так

      def process_document(document) -> str:
    # Process the document using your API logic
    url = 'api'

    data = {'file': open(document, 'rb')}

    response = requests.post(url, auth=requests.auth.HTTPBasicAuth('dfg', ''), files=data)
    return response.json()['YOUR_FIELD']
Другие вопросы по тегам