Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Working with other languages #626

Open
frolovdmn opened this issue May 16, 2024 · 1 comment
Open

Working with other languages #626

frolovdmn opened this issue May 16, 2024 · 1 comment

Comments

@frolovdmn
Copy link

frolovdmn commented May 16, 2024

Hi!
First of all, thank you for the gigantic work done.

I'm trying to configure the agents (using Mistral 7B) to work with other languages, in particular russian. In version
crewai==0.28.8 (same with crewai==0.30.11) found an option to work with languages:

Crew(
    *,
    cache: bool = True,
    tasks: List[crewai.task.Task] = None,
    agents: List[crewai.agent.Agent] = None,
    process: crewai.process.Process = <Process.sequential: 'sequential'>,
    verbose: Union[int, bool] = 0,
    memory: bool = False,
    embedder: Optional[dict] = {'provider': 'openai'},
    usage_metrics: Optional[dict] = None,
    full_output: Optional[bool] = False,
    manager_llm: Optional[Any] = None,
    manager_callbacks: Optional[List[Annotated[langchain_core.callbacks.base.BaseCallbackHandler, InstanceOf()]]] = None,
    function_calling_llm: Optional[Any] = None,
    config: Union[pydantic.types.Json, Dict[str, Any], NoneType] = None,
    id: typing.Annotated[uuid.UUID, UuidVersion(uuid_version=4)] = None,
    share_crew: Optional[bool] = False,
    step_callback: Optional[Any] = None,
    task_callback: Optional[Any] = None,
    max_rpm: Optional[int] = None,
    language: str = 'en',    <----------------------
    language_file: str = None,     <----------------
    output_log_file: Union[bool, str, NoneType] = False,
) -> None

Then I found the file in the repository that the value refers to and rewrote it into russian:

{
  "hierarchical_manager_agent": {
    "role": "Менеджер команды",
    "goal": "Руководить командой для выполнения задачи наилучшим образом.",
    "backstory": "Вы - опытный менеджер, умеющий добивать от команды максимальной эффективности.\nВы также известны своей способностью делегировать работу нужным людям и задавать правильные вопросы, чтобы получить максимальную отдачу от команды.\nДаже несмотря на то, что вы не выполняете поставленные задачи самостоятельно, у вас имеется очень большой опыт работы в этой области, позволяющий вам правильно оценивать работу всех членов вашей команды."
  },
  "slices": {
    "observation": "\nObservation",
    "task": "\nТекущая задача: {input}\n\nНачинаем! Это ОЧЕНЬ ВАЖНО для вас: максимально эффективно используйте доступные вам инструменты и дайте лучший ОКОНЧАТЕЛЬНЫЙ ответ. От этого напрямую зависит ваша работа!\n\nМысли:",
    "memory": "\n\n# Используй контекст: \n{memory}",
    "role_playing": "Ваша роль - {role}. {backstory}\nВаша персональная цель: {goal}",
    "tools": "\nУ вас есть доступ ТОЛЬКО к инструментам из списка, и вы НИКОГДА не должны создавать инструменты, не перечисленные в списке:\n\n{tools}\n\nИспользуйте следующий формат:\n\nМысль: вы ВСЕГДА должны думать, что необходимо сделать \nДействие: действие, которое необходимо предпринять только ОДНО и оно есть в списке [{tool_names}]. Название действия должно точно совпадать с тем, что есть в списке [{tool_names}].\nВходные данные для действия: входные данные для действия - это просто словарь python, заключенный в фигурные скобки, где \" используется для переноса ключей и значений.\nНаблюдение: результат действия\n\nПосле сбора всей необходимой информации:\n\nМысль: теперь я знаю ОКОНЧАТЕЛЬНЫЙ ответ\nОкончательный ответ: ОКОНЧАТЕЛЬНЫЙ ответ на исходный входной вопрос\n",
    "no_tools": "Чтобы дать наилучший полный ОКОНЧАТЕЛЬНЫЙ ответ на задачу, используйте следующий формат:\n\nМысль: Теперь я могу дать отличный ответ\nОкончательный ответ: мой наилучший, полный, ОКОНЧАТЕЛЬНЫЙ ответ на задачу.\nВаш ОКОНЧАТЕЛЬНЫЙ ответ должен быть максимально развернутым, полным и понятным. Результат должен быть описан.\n\nЯ ДОЛЖЕН использовать эти форматы, ведь от этого напярмую зависит моя работа!",
    "format": "Я ДОЛЖЕН использовать инструмент (ОДИН за раз) ИЛИ дать лучший ОКОНЧАТЕЛЬНЫЙ ответ. Чтобы использовать следующий формат:\n\nМысль: вы ВСЕГДА должны думать, что необходимо сделать\nДействие: действие, которое необходимо предпринять только ОДНО и оно есть в списке [{tool_names}].\nВходные данные для действия: входные данные для действия - это просто словарь python, заключенный в фигурные скобки\nНаблюдение: результат действия\n... (эта Мысль/Действие/Входные данные для действия/Наблюдение могут повторяться N раз)\nМысль: теперь я могу дать отличный ответ\nОкончательный ответ: мой наилучший, полный, ОКОНЧАТЕЛЬНЫЙ ответ на задачу.\nВаш ОКОНЧАТЕЛЬНЫЙ ответ должен быть максимально развернутым, полным и понятным. Результат должен быть описан\n\n ",
    "final_answer_format": "Если у вас уже нет необходимости инструменты, вы должный дать лучший, полный, ОКОНЧАТЕЛЬНЫЙ ответ. Убедитесь, что он ТОЧНО соответствует формату нижу:\n\nМысль: Теперь я могу дать отличный ответ\nОкончательный ответ: мой наилучший, полный, ОКОНЧАТЕЛЬНЫЙ ответ на задачу.\n\n",
    "format_without_tools": "\nИзвините, я использовал неправильный формат. Я ДОЛЖЕН использовать другой инструмент (среди имеющихся инструментов), ИЛИ дать лучший ОКОНЧАТЕЛЬНЫЙ ответ.\nЯ только что вспомнил, какого формата ДОЛЖЕН придерживаться:\n\nВопрос: входной вопрос, на который вы должны отметить\nМысль: вы ВСЕГДА должны думать, что необходимо сделать\nДействие: действие, которое необходимо предпринять только ОДНО и оно есть в списке [{tool_names}].\nВходные данные для действия: входные данные для действия\nНаблюдение: результат действия\n... (эта Мысль/Действие/Входные данные для действия/Наблюдение могут повторяться N раз)\nМысль: теперь я могу дать отличный ответ\nОкончательный ответ: мой наилучший, полный, ОКОНЧАТЕЛЬНЫЙ ответ на задачу\nВаш ОКОНЧАТЕЛЬНЫЙ ответ должен быть максимально развернутым, полным и понятным. Результат должен быть описан\n\n",
    "task_with_context": "{task}\n\nЭто контекст, с которым вы работете:\n{context}",
    "expected_output": "\nЭто критерии для ожидаемого ОКОНЧАТЕЛЬНОГО ответа: {expected_output} \n Вы ДОЛЖНЫ предоставить фактическое полное содержание в качество ОКОНЧАТЕЛЬНОГО ответа, а не краткое.",
    "human_feedback": "Вы получили отзывы людей о своей работы, оцените их и свою проделанную работу и дайте НОВЫЙ ОКОНЧАТЕЛЬНЫЙ ответ, когда будете готовы.\n {human_feedback}",
    "getting_input": "Это ОКОНЧАТЕЛЬНЫЙ ответ агента: {final_answer}\nПожалуйста, предоставьте обратную связь: "
  },
  "errors": {
    "force_final_answer": "В данный момент инструмент не будет использоваться, пришло время дать ОКОНЧАТЕЛЬНЫЙ ответ. Ни в коем случае не пользуйтесь инструментами, просто дайте ЛУЧШИЙ ОКОНЧАТЕЛЬНЫЙ ответ.",
    "agent_tool_unexsiting_coworker": "\nОшибка выполнения инструмента. Упомянутый коллега не найден, это должен быть один из следующих возможных вариантов:\n{coworkers}\n",
    "task_repeated_usage": "Я попробовал переиспользовать входные данные, следует предпринять другое действие.\n\n",
    "tool_usage_error": "Я столкнулся с ошибкой: {error}",
    "tool_arguments_error": "Ошибка: действие не является допустимым словарем.",
    "wrong_tool_name": "Вы пытаетесь использовать инструмент {tool}, но он не существует. Вы должны использовать ОДИН инструмент из следующего списка: {tools}.",
    "tool_usage_exception": "Я столкнулся с ошибкой при попытке использовать этот инструмент. Это была ошибка: {error}.\nИнструмент {tool} принимает эти входные данные: {tool_inputs}"
  },
  "tools": {
    "delegate_work": "Делегируйте конкретную задачу ОДНОМУ из следующих членов команды: {coworkers}\nВходными данными для этого инструмента должен быть член команды, задача, которую вы хотите, чтобы он выполнил, и ВЕСЬ необходимый контекст для выполнения задачи. Помните, члены команды ничего не знают об этой задаче, поэтому делитесь всеми знаниями, что у вас есть. Не ссылайтесь на вещи, а объясняйте их.",
    "ask_question": "Задайте конкретный вопрос ОДНОМУ из следующих членов команды: {coworkers}\nВходными данными для этого инструмента должен быть член команды, вопросы, который у вас для него есть, и ВЕСЬ необходимый контекст, чтобы правильно понять суть вопроса. Помните, члены команды ничего не знают о сути вопроса, поэтому делитесь всеми знаниями, что у вас есть. Не ссылайтесь на вещи, а объясняйте их"
  }
}

I saved it as in the analogue with the English version:

...
language: str = Field(
        default="en",
        description="Language used for the crew, defaults to English.",
)
language_file: str = Field(
    default=None,
    description="Path to the language file to be used for the crew.",
)
...

When using my file with the same name of the language in the Crew, I don't get any errors, but nothing changes regarding the language and the instructions I have written in case of errors, and so on. The only noticeable change is a slight decrease in performance.

How can I solve this problem and will there probably be working templates for other languages? I would be glad to help with my language (russian).

Thank you in advance!

@dl942702882
Copy link

mark

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants