> 백엔드 개발 > 파이썬 튜토리얼 > ClientAI 및 Ollama를 사용하여 로컬 AI 작업 플래너 구축

ClientAI 및 Ollama를 사용하여 로컬 AI 작업 플래너 구축

Barbara Streisand
풀어 주다: 2024-12-18 01:33:10
원래의
272명이 탐색했습니다.

Building a Local AI Task Planner with ClientAI and Ollama

이 튜토리얼에서는 ClientAI와 Ollama를 사용하여 AI 기반 작업 플래너를 구축해 보겠습니다. 우리의 플래너는 목표를 실행 가능한 작업으로 분류하고, 현실적인 일정을 만들고, 리소스를 관리합니다. 이 모든 작업이 사용자의 컴퓨터에서 실행됩니다.

우리 작업 계획자는 다음을 수행할 수 있습니다.

  • 목표를 구체적이고 실행 가능한 작업으로 세분화
  • 오류 처리를 통해 현실적인 타임라인 만들기
  • 자원의 효과적인 관리 및 배분
  • 체계적이고 형식화된 계획 제공

ClientAI 문서는 여기를, Github Repo는 여기를 참조하세요.

환경 설정

먼저 프로젝트에 대한 새 디렉터리를 만듭니다.

mkdir local_task_planner
cd local_task_planner
로그인 후 복사

Ollama 지원을 통해 ClientAI 설치:

pip install clientai[ollama]
로그인 후 복사

시스템에 Ollama가 설치되어 있는지 확인하세요. 올라마 홈페이지에서 받으실 수 있습니다.

기본 Python 파일 만들기:

touch task_planner.py
로그인 후 복사

핵심 가져오기부터 시작해 보겠습니다.

from datetime import datetime, timedelta
from typing import Dict, List
import logging

from clientai import ClientAI
from clientai.agent import create_agent, tool
from clientai.ollama import OllamaManager

logger = logging.getLogger(__name__)
로그인 후 복사

각 구성 요소가 중요한 역할을 합니다.

  • datetime: 작업 일정 및 일정을 관리하는 데 도움이 됩니다
  • ClientAI: AI 프레임워크 제공
  • OllamaManager: 로컬 AI 모델을 관리합니다
  • 유형 힌트 및 로깅을 위한 다양한 유틸리티 모듈

Task Planner 핵심 구축

먼저 AI 상호작용을 관리할 TaskPlanner 클래스를 만들어 보겠습니다.

class TaskPlanner:
    """A local task planning system using Ollama."""

    def __init__(self):
        """Initialize the task planner with Ollama."""
        self.manager = OllamaManager()
        self.client = None
        self.planner = None

    def start(self):
        """Start the Ollama server and initialize the client."""
        self.manager.start()
        self.client = ClientAI("ollama", host="http://localhost:11434")

        self.planner = create_agent(
            client=self.client,
            role="task planner",
            system_prompt="""You are a practical task planner. Break down goals into
            specific, actionable tasks with realistic time estimates and resource needs.
            Use the tools provided to validate timelines and format plans properly.""",
            model="llama3",
            step="think",
            tools=[validate_timeline, format_plan],
            tool_confidence=0.8,
            stream=True,
        )
로그인 후 복사

이 수업은 우리의 기초가 됩니다. Ollama 서버 라이프사이클을 관리하고 AI 클라이언트를 생성 및 구성하며 특정 기능을 갖춘 계획 에이전트를 설정합니다.

계획 도구 만들기

이제 AI가 사용할 도구를 만들어 보겠습니다. 먼저, 타임라인 검사기:

@tool(name="validate_timeline")
def validate_timeline(tasks: Dict[str, int]) -> Dict[str, dict]:
    """
    Validate time estimates and create a realistic timeline.

    Args:
        tasks: Dictionary of task names and estimated hours

    Returns:
        Dictionary with start dates and deadlines
    """
    try:
        current_date = datetime.now()
        timeline = {}
        accumulated_hours = 0

        for task, hours in tasks.items():
            try:
                hours_int = int(float(str(hours)))

                if hours_int <= 0:
                    logger.warning(f"Skipping task {task}: Invalid hours value {hours}")
                    continue

                days_needed = hours_int / 6
                start_date = current_date + timedelta(hours=accumulated_hours)
                end_date = start_date + timedelta(days=days_needed)

                timeline[task] = {
                    "start": start_date.strftime("%Y-%m-%d"),
                    "end": end_date.strftime("%Y-%m-%d"),
                    "hours": hours_int,
                }

                accumulated_hours += hours_int

            except (ValueError, TypeError) as e:
                logger.warning(f"Skipping task {task}: Invalid hours value {hours} - {e}")
                continue

        return timeline
    except Exception as e:
        logger.error(f"Error validating timeline: {str(e)}")
        return {}
로그인 후 복사

이 유효성 검사기는 예상 시간을 근무일로 변환하고, 유효하지 않은 입력을 적절하게 처리하고, 현실적인 순차적 일정을 생성하고, 디버깅을 위한 자세한 로깅을 제공합니다.

다음으로 계획 포맷터를 만들어 보겠습니다.

@tool(name="format_plan")
def format_plan(
    tasks: List[str],
    timeline: Dict[str, dict],
    resources: List[str]
) -> str:
    """
    Format the plan in a clear, structured way.

    Args:
        tasks: List of tasks
        timeline: Timeline from validate_timeline
        resources: List of required resources

    Returns:
        Formatted plan as a string
    """
    try:
        plan = "== Project Plan ==\n\n"

        plan += "Tasks and Timeline:\n"
        for i, task in enumerate(tasks, 1):
            if task in timeline:
                t = timeline[task]
                plan += f"\n{i}. {task}\n"
                plan += f"   Start: {t['start']}\n"
                plan += f"   End: {t['end']}\n"
                plan += f"   Estimated Hours: {t['hours']}\n"

        plan += "\nRequired Resources:\n"
        for resource in resources:
            plan += f"- {resource}\n"

        return plan
    except Exception as e:
        logger.error(f"Error formatting plan: {str(e)}")
        return "Error: Unable to format plan"
로그인 후 복사

여기서는 작업 번호를 적절하게 매기고 타임라인을 정리하여 일관되고 읽기 쉬운 출력을 만들고 싶습니다.

인터페이스 구축

플래너를 위한 사용자 친화적인 인터페이스를 만들어 보겠습니다.

def get_plan(self, goal: str) -> str:
    """
    Generate a plan for the given goal.

    Args:
        goal: The goal to plan for

    Returns:
        A formatted plan string
    """
    if not self.planner:
        raise RuntimeError("Planner not initialized. Call start() first.")

    return self.planner.run(goal)

def main():
    planner = TaskPlanner()

    try:
        print("Task Planner (Local AI)")
        print("Enter your goal, and I'll create a practical, timeline-based plan.")
        print("Type 'quit' to exit.")

        planner.start()

        while True:
            print("\n" + "=" * 50 + "\n")
            goal = input("Enter your goal: ")

            if goal.lower() == "quit":
                break

            try:
                plan = planner.get_plan(goal)
                print("\nYour Plan:\n")
                for chunk in plan:
                    print(chunk, end="", flush=True)
            except Exception as e:
                print(f"Error: {str(e)}")

    finally:
        planner.stop()

if __name__ == "__main__":
    main()
로그인 후 복사

저희 인터페이스는 다음을 제공합니다.

  • 사용자 지침 지우기
  • 스트리밍을 통한 실시간 계획 생성
  • 올바른 오류 처리
  • 깨끗한 셧다운 관리

사용 예

플래너를 실행하면 다음과 같은 내용이 표시됩니다.

Task Planner (Local AI)
Enter your goal, and I'll create a practical, timeline-based plan.
Type 'quit' to exit.

==================================================

Enter your goal: Create a personal portfolio website

Your Plan:

== Project Plan ==

Tasks and Timeline:
1. Requirements Analysis and Planning
   Start: 2024-12-08
   End: 2024-12-09
   Estimated Hours: 6

2. Design and Wireframing
   Start: 2024-12-09
   End: 2024-12-11
   Estimated Hours: 12

3. Content Creation
   Start: 2024-12-11
   End: 2024-12-12
   Estimated Hours: 8

4. Development
   Start: 2024-12-12
   End: 2024-12-15
   Estimated Hours: 20

Required Resources:
- Design software (e.g., Figma)
- Text editor or IDE
- Web hosting service
- Version control system
로그인 후 복사

향후 개선 사항

작업 계획을 위해 다음 개선 사항을 고려하세요.

  • 작업 간 종속성 추적 추가
  • 리소스 비용 계산 포함
  • 계획을 파일이나 프로젝트 관리 도구에 저장
  • 원래 계획 대비 진행 상황 추적
  • 리소스 가용성 확인 추가
  • 병렬 작업 스케줄링 구현
  • 반복 작업 지원 추가
  • 작업 우선순위 수준 포함

ClientAI에 대해 자세히 알아보려면 문서로 이동하세요.

나와 연결하세요

이 튜토리얼에 대해 질문이 있거나 작업 플래너의 개선 사항을 공유하고 싶다면 언제든지 문의하세요.

  • GitHub: igorbenav
  • X/트위터: @igorbenav
  • 링크드인: Igor

위 내용은 ClientAI 및 Ollama를 사용하여 로컬 AI 작업 플래너 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿