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']