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

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

Сообщение Anonymous »

Я новичок в LLM, разработке приложений искусственного интеллекта и LangChain.
Я пытаюсь создать простой пример инструмента, который создает новые учетные записи пользователей в гипотетическом приложении, когда это указано в командной строке пользователя. Используется 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

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