Bisher funktioniert das, was ich geschrieben habe, aber es ist sehr unzuverlässig.
Der Grund, warum es unzuverlässig ist, liegt darin, wann Wenn LangChain mein Tool aufruft, liefert es unerwartete/inkonsistente Werte für das einzelne Benutzernamenargument des Benutzererstellungstools.
Manchmal ist das Argument ein richtiger Benutzername, manchmal aber auch ein Benutzername sein, dem der Wert „username=" vorangestellt ist (z. B. „username=jDoe" statt einfach „jdoe“).
Wenn ich außerdem die Erstellung mehrerer Benutzer anfordere, ruft Langchain das Tool manchmal korrekt mehrmals auf, während es manchmal das Tool einmal mit einer Zeichenfolge im Format eines Arrays aufruft (z. B.: "['jDoe','jSmith']")
Meine Fragen sind:
- Ist Das Problem, auf das ich aufgrund der Einschränkungen von LangChain oder des von mir verwendeten Llama3.1:8b-Modells stoße? Oder liegt das Problem woanders?
- Gibt es eine Möglichkeit, LangChain dazu zu bringen, mein Benutzererstellungstool zuverlässiger mit einem korrekt formatierten Benutzernamen aufzurufen?
- Gibt es weitere nützliche Tipps/Empfehlungen, die Sie einem Anfänger wie mir geben können?
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'])