본문 바로가기
디지털노마드

[AI 챗봇 비교] ChatGPT(챗GPT) vs Le Chat(르샤) 비교하기

by 인텔리노마드라이프 2024. 5. 4.
728x90

안녕하세요. 인텔리원스튜디오(IntelliOneStudio)입니다.

오늘은 ChatGPT(챗GPT) vs Le Chat(르샤) 를 비교해볼까해요.

 

Le Chat(르샤)

Le Chat는 프랑스 신생 기업이 만든 AI 챗봇이예요.

르 샤(Le Chat)는 프랑스의 AI 신생 기업인 미스트랄 AI에서 개발한 대화형 AI 챗봇입니다. 이 챗봇은 현재 베타 버전으로 제공되고 있으며, 미스트랄 AI의 기술을 활용하여 개발되었습니다. 르 샤는 Mistral Small, Mistral Large, 그리고 Mistral Next라는 세 가지 모델을 제공합니다.

르 샤는 다른 챗봇들과 유사하게 대화형 AI 기능을 수행하며, 현재 무료로 제공되고 있습니다. 향후에는 기업 고객을 대상으로 하는 유료 버전도 출시될 예정입니다. 이 챗봇은 웹에 접근할 수 없는 제한이 있지만, 다양한 언어를 지원하고 있으며, 간결한 응답을 위해 특화된 모델도 제공하고 있습니다​ ​.

 

ChatGPT(4.0) vs Le Chat(베타) 비교 : 코드 설명

기능 비교를 위해 동일한 질문을 ChatGPT와 Le Chat에 해봤어요.

[질문] 안녕 ChatGPT or Le Chat, 아래 코드를 설명해줄래? .
using Platformer.Core;
using Platformer.Mechanics;
using Platformer.Model;

namespace Platformer.Gameplay
{
    /// <summary>
    /// Fired when the player is spawned after dying.
    /// </summary>
    public class PlayerSpawn : Simulation.Event<PlayerSpawn>
    {
        PlatformerModel model = Simulation.GetModel<PlatformerModel>();

        public override void Execute()
        {
            var player = model.player;
            player.collider2d.enabled = true;
            player.controlEnabled = false;
            if (player.audioSource && player.respawnAudio)
                player.audioSource.PlayOneShot(player.respawnAudio);
            player.health.Increment();
            player.Teleport(model.spawnPoint.transform.position);
            player.jumpState = PlayerController.JumpState.Grounded;
            player.animator.SetBool("dead", false);
            model.virtualCamera.m_Follow = player.transform;
            model.virtualCamera.m_LookAt = player.transform;
            Simulation.Schedule<EnablePlayerInput>(2f);
        }
    }
}

 

아래는 ChatGPT의 답변 내용이예요.

[답변]

이 코드는 유니티(Unity) 엔진을 사용하여 만든 플랫폼 게임에서 플레이어 캐릭터의 스폰을 처리하는 C# 클래스입니다. 이 클래스는 플레이어가 죽은 후 부활하는 순간에 관련된 로직을 처리합니다.

네임스페이스 및 의존성

  • 이 클래스는 Platformer.Gameplay 네임스페이스에 속해 있습니다.
  • Platformer.Core, Platformer.Mechanics, Platformer.Model 네임스페이스의 다양한 기능을 사용합니다.

클래스 구조

  • 클래스 이름은 PlayerSpawn이며, Simulation.Event<PlayerSpawn>를 상속받는 이벤트 클래스입니다.
  • Simulation.Event<PlayerSpawn>는 제네릭 이벤트 클래스의 일종으로, 이 이벤트가 PlayerSpawn 타입의 이벤트임을 나타냅니다.
  • PlatformerModel 모델을 가져오기 위해 Simulation.GetModel<PlatformerModel>() 메서드를 사용하고 있습니다.

메서드: Execute

  • 이 클래스의 주요 기능은 Execute 메서드에 있습니다.
  • Execute 메서드는 플레이어가 스폰될 때 실행되는 로직을 정의합니다.
  1. 플레이어 상태 초기화:
    • 플레이어 캐릭터를 model.player로 가져옵니다.
    • 플레이어의 콜라이더(collider2d)를 활성화하고, 플레이어의 제어를 비활성화합니다.
  2. 음향 처리:
    • 플레이어에게 오디오 소스(audioSource)와 리스폰 소리(respawnAudio)가 설정되어 있는 경우, 리스폰 소리를 재생합니다.
  3. 플레이어 건강 및 위치 설정:
    • 플레이어의 건강을 증가시킵니다.
    • 플레이어를 스폰 지점(spawnPoint)으로 이동시킵니다.
    • 점프 상태를 Grounded로 설정합니다.
  4. 애니메이션 및 카메라 처리:
    • 애니메이터를 통해 '죽음' 상태를 false로 설정합니다.
    • 가상 카메라의 팔로우 및 관찰 대상을 플레이어로 설정합니다.
  5. 입력 활성화 스케줄링:
    • Simulation.Schedule<EnablePlayerInput>(2f)를 호출하여 2초 후에 플레이어의 입력을 활성화하는 이벤트를 스케줄링합니다.

총평

이 클래스는 플레이어가 죽은 후 부활하는 순간을 처리하는 기능을 담당합니다. 플레이어의 상태를 초기화하고, 부활 위치로 이동시켜 리스폰 소리와 애니메이션을 설정하는 등의 다양한 작업을 수행합니다. 이를 통해 플레이어의 부활이 원활하게 이루어질 수 있도록 보장합니다.

 

아래는 Le Chat 의 답변 내용이예요.

[답변]

이 코드는 Unity 게임 엔진을 사용하여 플랫포머 게임을 개발하는 중인 것으로 보입니다. 이 코드는 플레이어가 죽은 후 다시 생성되었을 때 실행되는 PlayerSpawn 이벤트를 정의합니다.

  1. using 문: 필요한 네임스페이스를 가져옵니다.
  2. PlayerSpawn 클래스: Simulation.Event<PlayerSpawn>를 상속받는 클래스로, 플레이어가 다시 생성되었을 때 실행되는 이벤트입니다.
  3. PlatformerModel model: PlatformerModel 클래스의 인스턴스를 가져옵니다. 이 모델은 게임 상태와 다른 게임 오브젝트에 대한 참조를 저장합니다.
  4. Execute() 메서드: PlayerSpawn 이벤트가 트리거되었을 때 실행되는 메서드입니다. 다음을 수행합니다.
    • 플레이어의 콜라이더를 활성화합니다.
    • 플레이어의 컨트롤을 비활성화합니다.
    • 플레이어의 리스폰 사운드를 재생합니다(옵션).
    • 플레이어의 체력을 1 증가시킵니다.
    • 플레이어를 생성 지점으로 이동시킵니다.
    • 플레이어의 점프 상태를 "Grounded"로 설정합니다.
    • "dead" 애니메이션을 중지합니다.
    • 가상 카메라를 플레이어로 이동시킵니다.
    • 2초 후 EnablePlayerInput 이벤트를 스케줄합니다.

이 코드는 플레이어가 죽은 후 다시 생성되었을 때 게임 내에서 실행되는 이벤트와 관련된 로직을 나타냅니다.

 

ChatGPT(4.0) vs Le Chat(베타) 비교 : 코드 수정

기능 비교를 위해 이번에는 코드 수정을 요청했어요.

[질문] 안녕 ChatGPT or Le Chat, 이제 플레이어가 타일 위에 있을 때 타일과 함께 움직이되, 플레이어의 독립적인 이동 액션 (점프, 좌우 이동)을 방해하지 않도록 TileMover 클래스를 수정해줘

 

아래는 ChatGPT가 제공한 코드이고 실행은 잘되었어요.

[답변]

using UnityEngine;

namespace Platformer.Mechanics
{
    /// <summary>
    /// A simple controller for moving tiles. Provides movement control over a patrol path and moves players standing on it.
    /// </summary>
    [RequireComponent(typeof(Collider2D))]
    public class TileMover : MonoBehaviour
    {
        public PatrolPath path;
        internal PatrolPath.Mover mover;
        internal Collider2D _collider;

        public Bounds Bounds => _collider.bounds;

        void Awake()
        {
            _collider = GetComponent<Collider2D>();
        }

        void Update()
        {
            if (path != null)
            {
                if (mover == null) mover = path.CreateMover(1.0f); // You can adjust the speed as necessary
                float moveX = mover.Position.x - transform.position.x;
                transform.position += new Vector3(moveX, 0, 0) * Time.deltaTime;

                MoveRiders(moveX);
            }
        }

        void MoveRiders(float moveX)
        {
            // Find all colliders on top of the tile
            RaycastHit2D[] hits = Physics2D.BoxCastAll(_collider.bounds.center, _collider.bounds.size, 0f, new Vector2(0, 1), 0.1f);
            foreach (RaycastHit2D hit in hits)
            {
                if (hit.collider != _collider)
                {
                    // Move any objects that are on top of the tile
                    var hitRigidbody = hit.collider.attachedRigidbody;
                    if (hitRigidbody != null)
                    {
                        hitRigidbody.position += new Vector2(moveX, 0) * Time.deltaTime;
                    }
                }
            }
        }
    }
}

 

 

 

아래는 Le Chat 가 제공한 코드이며 에러가 발생했어요.

[답변]

using UnityEngine;

namespace Platformer.Mechanics
{
    /// <summary>
    /// A simple controller for moving tiles. Provides movement control over a patrol path.
    /// </summary>
    [RequireComponent(typeof(Collider2D))]
    public class TileMover : MonoBehaviour
    {
        public PatrolPath path;
        internal PatrolPath.Mover mover;
        internal Collider2D _collider;

        public Bounds Bounds => _collider.bounds;

        private Transform _playerTransform;
        private PlayerController _playerController;

        void Awake()
        {
            _collider = GetComponent<Collider2D>();
            _playerTransform = GameObject.FindGameObjectWithTag("Player").transform;
            _playerController = _playerTransform.GetComponent<PlayerController>();
        }

        void Update()
        {
            if (path != null)
            {
                if (mover == null) mover = path.CreateMover(1.0f); // You can adjust the speed as necessary
                var moveX = mover.Position.x - transform.position.x;

                // 플레이어가 타일 위에 있을 때, 타일과 함께 움직인다.
                if (_collider.OverlapPoint(_playerTransform.position))
                {
                    // 플레이어의 이동 속도에 타일의 이동 속도를 반영한다.
                    _playerController.MoveSpeed += moveX * Time.deltaTime;
                }

                transform.position += new Vector3(moveX, 0, 0) * Time.deltaTime;
            }
        }
    }
}

 

 

ChatGPT(4.0) vs Le Chat(베타) 비교 : 이유에 대한 설명

코드를 왜 다른 방식으로 만드는지 궁금했어요.

[질문] 안녕 ChatGPT or Le Chat, OnCollisionExit2D 는 사용하지 않은 이유가 뭐니?

 

아래는 ChatGPT의 답변 내용이예요.

[답변]

네, 제시한 마지막 코드 예제에서는 OnCollisionExit2D를 사용할 필요가 없습니다. 이는 코드 내에서 플레이어를 타일의 자식으로 설정하거나 부모-자식 관계를 해제하는 로직을 사용하지 않기 때문입니다. 플레이어의 움직임이 타일과 독립적으로 처리되면서도, OnCollisionStay2D를 통해 타일과 플레이어가 접촉하는 동안에만 플레이어의 위치를 타일의 움직임에 맞춰 조정하기 때문에 충분합니다.

설명

  • 플레이어와 타일의 독립적인 이동 처리: 이 접근 방식에서는 타일이 움직일 때 플레이어의 위치를 직접 조정합니다. 플레이어가 타일 위에 있지 않은 경우에는 플레이어의 위치 조정이 필요 없으므로, OnCollisionExit2D에서 처리할 추가적인 로직이 없습니다.
  • 동적인 위치 조정: OnCollisionStay2D에서 타일과 함께 움직이는 로직을 처리하기 때문에, 플레이어가 타일에서 물리적으로 벗어나는 순간에 별도의 상태 변경이 필요 없습니다. 타일에서 벗어나는 순간 자연스럽게 OnCollisionStay2D의 영향이 사라지기 때문입니다.

다른 상황에서 OnCollisionExit2D가 필요한 경우

만약 타일이 플레이어에게 추가적인 효과를 주는 경우 (예: 속도 증가, 점프력 향상 등) 또는 플레이어와 타일 간의 특별한 상호작용이 있는 경우에는 OnCollisionExit2D를 사용하여 이러한 효과를 해제할 수 있습니다. 예를 들어, 플레이어가 특정 타일 위를 벗어날 때 효과를 제거하거나, 플레이어의 특정 상태를 초기화해야 하는 경우에 유용하게 사용될 수 있습니다.

현재 상황에서는 플레이어의 위치만 조정하는 간단한 로직을 구현하는 것이 목표이기 때문에, OnCollisionExit2D를 사용할 필요가 없습니다.

 

아래는 Le Chat 의 답변 내용이예요.

[답변]

OnCollisionExit2D는 충돌이 끝난 시점을 감지하기 위해 사용됩니다. 하지만 현재 코드에서는 플레이어와 타일 사이의 충돌이 끝나는 시점을 감지할 필요가 없기 때문에 OnCollisionExit2D를 사용하지 않았습니다.

OnCollisionStay2D 메서드 내에서 플레이어의 위치를 업데이트하고 있기 때문에, 플레이어가 타일을 떠나도 플레이어의 위치는 자연스럽게 업데이트되며, 타일과 더 이상 충돌하지 않게 됩니다. 따라서 충돌이 끝난 시점을 특별히 감지할 필요가 없습니다.

만약 타일과 플레이어 사이의 충돌이 끝났을 때 특정 작업을 수행해야 한다면, OnCollisionExit2D 메서드를 사용하여 충돌이 끝난 시점을 감지하고 필요한 작업을 수행할 수 있습니다. 하지만 현재 코드에서는 그러한 필요성이 없기 때문에 OnCollisionExit2D를 사용하지 않았습니다.

 

참고로 아래 답변은 ChatGPT 3.5가 했어요

[답변]

OnCollisionExit2D를 사용하는 경우는 물체가 서로 충돌한 후에, 그 충돌이 해체되었을 때입니다. 이 코드에서는 OnCollisionStay2D를 사용하여 충돌이 지속되는 동안에만 플레이어와 타일 사이의 충돌을 처리합니다. 그러므로 플레이어가 타일 위에 있을 때의 상호작용을 처리하기 위해서는 OnCollisionStay2D가 충분합니다. 충돌이 끝날 때 추가 작업이 필요하지 않으므로 OnCollisionExit2D는 사용되지 않았을 것입니다.

ChatGPT(4.0) vs Le Chat(베타) 비교 : 서로의 답을 비교

OnCollisionExit2D 는 사용하지 않은 이유에 대한 답은 ChatGPT가 맞는 것 같아요.

그래서 ChatGPT가 답한 내용을 Le Chat와 ChatGPT 3.5에게 물어봤어요.

[질문] 안녕 Le Chat, 아래 내용이 더 정답이 아닐까?

OnCollisionExit2D를 사용할 필요가 없습니다. 이는 코드 내에서 플레이어를 타일의 자식으로 설정하거나 부모-자식 관계를 해제하는 로직을 사용하지 않기 때문입니다.

[답변]

죄송합니다, 제가 이전에 제공한 답변에 오류가 있었습니다. 당신이 제시한 내용이 더 정확합니다.

OnCollisionExit2D를 사용할 필요가 없는 이유는 바로 코드 내에서 플레이어를 타일의 자식으로 설정하거나 부모-자식 관계를 해제하는 로직을 사용하지 않기 때문입니다. 따라서 타일과 플레이어 사이의 충돌이 끝난 시점을 특별히 감지할 필요가 없습니다.

충돌이 끝나도 플레이어와 타일 사이에는 더 이상 관계가 없기 때문에, 플레이어는 자연스럽게 타일을 떠나게 되며, 타일의 이동에 더 이상 영향을 받지 않습니다. 따라서 OnCollisionExit2D를 사용하지 않아도 됩니다.

죄송합니다. 제가 초기에 제공한 답변에 오류가 있었습니다. 감사합니다.

[질문] 안녕 ChatGPT 3.5, 아래 내용이 더 정답이 아닐까?

OnCollisionExit2D를 사용할 필요가 없습니다. 이는 코드 내에서 플레이어를 타일의 자식으로 설정하거나 부모-자식 관계를 해제하는 로직을 사용하지 않기 때문입니다.

[답변]

네, 맞습니다. 플레이어를 타일의 자식으로 설정하거나 부모-자식 관계를 해제하는 로직이 없으므로 OnCollisionExit2D를 사용할 필요가 없습니다. 이 코드에서는 플레이어가 타일과 충돌하는 동안의 상호작용만을 다루고 있으므로 OnCollisionStay2D로 충분합니다.

 

Le Chat와 ChatGPT 3.5가 비슷하게 답변을 하네요.

하지만 죄송합니다라는 말을 할 줄 아는 Le Chat의 매너가 훨씬 좋네요.

 

AI 챗봇 비교 결과 : ChatGPT 4.0, 3.5, Le Chat

오늘은 두 가지 AI 챗봇을 비교해봤어요. 아직은 챗GPT 4.0 이 좀 더 괜찮아보여요.

 

하지만 Le Chat와 챗GPT 3.5를 비교했을 때는 거의 비슷하거나 조금 더 나은 것 같다는 생각을 해요.

답변도 거의 비슷했어요. 

Gemini 보다는 Le Chat 가 더 나은 것 같아요.

 

Le Chat이 유료화 버젼이 나오면 ChatGPT보다 Le Chat가 좀 더 괜찮아지길 기대해봐요. 

 

[인텔리노마드라이프와 함께 행복하세요 from IntelliOneStudio ]

 

지금까지,

언제나 성장하는 인텔리원스튜디오(IntelliOneStudio)입니다.

감사합니다.

 

 

728x90