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