Неожиданное значение передано в аргумент инструмента LangChainPython

Программы на Python
Ответить
Anonymous
 Неожиданное значение передано в аргумент инструмента LangChain

Сообщение Anonymous »

Я пытаюсь создать простой пример инструмента, который создает новые учетные записи пользователей в гипотетическом приложении, когда это указано в командной строке пользователя. Используется llm llama3.1:8b через Ollama.
Пока то, что я написал, работает, но очень ненадежно.
Причина, по которой это ненадежно, заключается в том, что когда LangChain вызывает мой инструмент, он предоставляет неожиданные/несовместимые значения для единственного аргумента имени пользователя инструмента создания пользователей.
Иногда аргументом будет правильное имя пользователя, а иногда это будет имя пользователя со значением "username="", предшествующим имени пользователя (например: "username=jDoe", а не просто "jdoe").
Кроме того, если я запрошу создать несколько пользователей, иногда langchain правильно вызывает инструмент несколько раз, а в других случаях он вызывает инструмент один раз со строкой в ​​формате массива (например: "['jDoe','jSmith']")
Мои вопросы:
  • Это проблема, с которой я столкнулся из-за ограничений LangChain или модели Llama3.1:8b, которую я использую? Или проблема в другом?
  • Есть ли способ заставить LangChain более надежно вызывать мой инструмент создания пользователей с правильно отформатированным именем пользователя?
  • Есть ли другие полезные советы/рекомендации, которые вы можете дать новичку вроде меня?
Ниже приведен мой код:
from dotenv import load_dotenv
from langchain.agents import AgentExecutor, create_react_agent
from langchain.tools import Tool
from langchain_core.prompts import PromptTemplate
from langchain_ollama.chat_models import ChatOllama

load_dotenv()

# Define the tool to create a user account
mock_user_db = ["jDoe", "jRogers", "jsmith"]

def create_user_tool(username: str):
print("USERNAME PROVIDED FOR CREATION: " + username)
if username in mock_user_db:
return f"User {username} already exists."
mock_user_db.append(username)
return f"User {username} created successfully."

# Define the tool to delete a user account
def delete_user_tool(username: str):
print("USERNAME PROVIDED FOR DELETION: " + username)
if username not in mock_user_db:
return f"User {username} does not exist."

mock_user_db.remove(username)
return f"User {username} deleted successfully."

def list_users_tool(ignore) -> list:
return mock_user_db

# Wrap these functions as LangChain Tools
create_user = Tool(
name="Create User",
func=create_user_tool,
description="Creates a new user account in the company HR system."
)

delete_user = Tool(
name="Delete User",
func=delete_user_tool,
description="Deletes an existing user account in company HR system."
)

list_users = Tool(
name="List Users",
func=list_users_tool,
description="Lists all user accounts in company HR system."
)

# Initialize the language model
llm = ChatOllama(model="llama3.1:latest", temperature=0)

# Create the agent using the tools
tools = [create_user, delete_user, list_users]

# Get the prompt to use
#prompt = hub.pull("hwchase17/react") # Does not work with ollama/llama3:8b
prompt = hub.pull("hwchase17/react-chat") # Kinda works with ollama/llama3:8b

agent = create_react_agent(llm, tools, prompt)

# Create an agent executor by passing in the agent and tools
agent_executor = AgentExecutor(agent=agent, tools=tools, handle_parsing_errors=True)

print(agent_executor.invoke({"input": "Please introduce yourself."})['output'])

while True:
user_prompt = input("PROMPT: ")
agent_response = agent_executor.invoke({"input": user_prompt})
print(agent_response['output'])


Подробнее здесь: https://stackoverflow.com/questions/789 ... l-argument
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»