커스텀 LLM-Job 예외 [deepseek-coder-v2:latest 도구를 지원하지 않음, "type":"api_error","param":null,"code":null]

사용자 지정 LLM을 활성화했지만, 챗봇을 시도할 때 문제가 발생하고 있습니다.

로그

메시지 (2건 보고됨)

Job exception: {"error":{"message":"registry.ollama.ai/library/deepseek-coder-v2:latest does not support tools","type":"api_error","param":null,"code":null}}

백트레이스

/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:173:in `block (2 levels) in `block in perform_completion!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-http-0.6.0/lib/net/http.rb:2433: `block in transport_request'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-http-0.6.0/lib/net/http/response.rb:320: `reading_body'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-http-0.6.0/lib/net/http.rb:2430: `transport_request'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-http-0.6.0/lib/net/http.rb:2384: `request'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rack-mini-profiler-4.0.1/lib/patches/net_patches.rb:19: `block in request_with_mini_profiler'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rack-mini-profiler-4.0.1/lib/mini_profiler/profiling_methods.rb:51: `step'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rack-mini-profiler-4.0.1/lib/patches/net_patches.rb:18: `request_with_mini_profiler'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:168: `block in perform_completion!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-http-0.6.0/lib/net/http.rb:1632: `start'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-http-0.6.0/lib/net/http.rb:1070: `start'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:139: `perform_completion!'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/open_ai.rb:53: `perform_completion!'
/var/www/discourse/plugins/discourse-ai/lib/completions/llm.rb:415: `generate'
/var/www/discourse/plugins/discourse-ai/lib/personas/bot.rb:89: `reply'
/var/www/discourse/plugins/discourse-ai/lib/ai_bot/playground.rb:494: `reply_to'
/var/www/discourse/plugins/discourse-ai/app/jobs/regular/create_ai_reply.rb:18: `execute'
/var/www/discourse/app/jobs/base.rb:318: (2 levels) in `block in perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-7.0.0/lib/rails_multisite/connection_management/null_instance.rb:49: `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-7.0.0/lib/rails_multisite/connection_management.rb:17: `with_connection'
/var/www/discourse/app/jobs/base.rb:305: `block in perform'
/var/www/discourse/app/jobs/base.rb:301: `each'
/var/www/discourse/app/jobs/base.rb:301: `perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:220: `execute_job'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:185: (4 levels) in `block in process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:180: `traverse'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:183: `block in traverse'
/var/www/discourse/lib/sidekiq/discourse_event.rb:6: `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:182: `traverse'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:183: `block in traverse'
/var/www/discourse/lib/sidekiq/pausable.rb:131: `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:182: `traverse'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:183: `block in traverse'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/job/interrupt_handler.rb:9: `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:182: `traverse'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:183: `block in traverse'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/metrics/tracking.rb:26: `track'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/metrics/tracking.rb:134: `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:182: `traverse'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:173: `invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:184: (3 levels) in `block in process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:145: (6 levels) in `block in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/job_retry.rb:118: `local'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:144: (5 levels) in `block in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/config.rb:39: `block in <class:Config>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:139: (4 levels) in `block in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:281: `stats'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:134: (3 levels) in `block in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/job_logger.rb:15: `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:133: (2 levels) in `block in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/job_retry.rb:85: `global'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:132: `block in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/job_logger.rb:40: `prepare'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:131: `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:183: (2 levels) in `block in process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:182: `handle_interrupt'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:182: `block in process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:181: `handle_interrupt'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:181: `process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:86: `process_one'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:76: `run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/component.rb:10: `watchdog'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/component.rb:19: `block in safe_thread'
curl -X POST http://localhost:11434/v1/chat/completions -H "Content-Type: application/json" -d '{
  "model": "deepseek-coder-v2:latest",
  "messages": [
    {
      "role": "system",
      "content": "You are a helpful assistant."
    },
    {
      "role": "user",
      "content": "What is the latest version of Conan as per 2025"
    }
  ],
  "temperature": 0.7,
  "max_tokens": 200
}'

{"id":"chatcmpl-940","object":"chat.completion","created":1757057197,"model":"deepseek-coder-v2:latest","system_fingerprint":"fp_ollama","choices":[{"index":0,"message":{"role":"assistant","content":" 2023년 초 마지막 업데이트 이후, 저는 미래 예측 능력이나 실시간 데이터가 없으므로 2025년 이후의 \"Conan\"에 대한 구체적인 정보는 가지고 있지 않습니다. 그러나 C/C++ 의존성 관리용 패키지 매니저인 Conan의 최신 버전을 찾는 일반적인 방법을 안내해 드릴 수 있습니다:\n\n1. **공식 웹사이트 방문:** Conan의 최신 버전에 대한 정보를 얻는 가장 신뢰할 수 있는 방법은 공식 웹사이트인 https://conan.io/을 방문하는 것입니다. 그곳에서 일반적으로 최신 릴리스 노트 및 관련 문서를 찾을 수 있습니다.\n\n2. **GitHub 저장소 확인:** Conan의 코드베이스는 GitHub에 호스팅되므로, 릴리스나 태그를 확인하여 다양한 버전에 해당하는 정보를 살펴볼 수도 있습니다. 저장소에는 커밋 및 풀 리퀘스트 형태로 릴리스 노트가 포함된 경우가 많습니다.\n\n3"},"finish_reason":"length"}],"usage":{"prompt_tokens":30,"completion_tokens":200,"total_tokens":230}}

이것이 주요 오류인 것 같습니다:

deepseek-coder-v2:latest does not support tools

여기 모델 목록을 살펴보면: deepseek-coder · Ollama

deepseek-coder-v2가 도구를 지원하지 않는 것으로 보입니다. 따라서 페르소나에서 도구를 제거하거나, deepseek-coder-v2-tool-calling처럼 도구 호출을 지원하는 모델로 전환해야 합니다.

입력을 사용하여 CURL 명령을 실행하면 문제가 없이 출력이 생성됩니다. 페르소나 및 관련 설정에서 커스터마이징을 하지 않았습니다.

@awesomerobot

자세한 정보와 몇 가지 예시를 제공해 주실 수 있을까요? 이를 통해 더 명확한 이해를 하고 더 나은 논의를 이끌어낼 수 있을 것입니다.

curl 명령어에 도구 호출이 포함되지 않은 것 같으니, 그것이 원인이 아닐까요? 페르소나 설정에서 여기에 도구가 나열되어 있나요?

@awesomerobot

아직 커스텀 페르소나(Personas)를 추가하지 않았기 때문에 앱에서 보이는 페르소나는 모두 기본 옵션일 뿐입니다. 또한 현재 그중 어떤 것도 사용 중이 아닙니다!

페르소나:

도구

방금 전 스크린샷을 다시 확인해 보니, 메시지에서 forum helper 페르소나를 사용 중인 것 같습니다. 이 페르소나에는 제거할 수 없는 내장 도구가 포함되어 있으며, 현재 사용 중인 모델과 호환되지 않습니다.

도구가 포함되지 않은 사전 설정된 페르소나 중 하나(예: “creative”)를 사용하거나, 도구가 없는 새로운 페르소나를 만들어 보세요.

페르소나가 LLM의 효과적인 작동에 필수적인지 명확히 설명해 주실 수 있을까요?

네, 저희 AI 기능은 지정된 페르소나를 가진 LLM을 사용합니다.

활성화된 페르소나가 둘 이상이고 새 메시지를 생성하면, 페르소나를 선택할 수 있는 드롭다운 메뉴가 표시됩니다:

테스트 목적으로 내장된 Creative 페르소나를 활성화하면:

페이지를 새로고침한 후 해당 페르소나로 새 메시지를 시작할 때, Creative 페르소나에는 도구가 포함되지 않으므로 LLM과 함께 정상적으로 작동할 것으로 예상됩니다.

현재 이 옵션만 표시되고 있습니다. 설정에 대해 도움을 주실 수 있을까요?

/admin/plugins/discourse-ai/ai-personas 페이지를 방문하여 새로운 페르소나를 생성하거나, 도구가 없는 페르소나를 활성화해야 합니다. 기존 페르소나를 테스트해 보고 싶다면, 도구가 포함되어 있지 않은 Creative 페르소나가 좋은 선택지입니다.

다음과 같이 여기서 편집을 클릭합니다:

그리고 페르소나 설정 하단에서 활성화하고, "create user"를 클릭한 후 변경 사항을 저장해야 합니다.

이 작업이 완료되면 Creative 페르소나가 목록에 표시되어야 합니다(먼저 페이지를 새로고침해야 할 수 있습니다).

기본 모달도 선택해야 하나요?

또한, 다음 설정에 대한 도움도 부탁드립니다:

AI helper proofreader persona 
AI helper title suggestions persona 
AI helper explain persona 
AI helper post illustrator persona 
AI helper smart dates persona 
AI helper translator persona 
AI helper markdown tables persona 
AI helper custom prompt persona 
AI helper image caption persona 
AI embeddings semantic search hyde persona 
AI summarization persona 
AI summary gists persona 
AI bot discover persona 
AI Discord search persona 
AI translation locale detector persona 
AI translation post raw translator persona 
AI translation topic title translator persona 
AI translation short text translator persona 
Inferred concepts generate persona 
Inferred concepts match persona 
Inferred concepts deduplicate persona 
AI embeddings generate for PMs 
AI bot public sharing allowed groups 

LLM에 질문을 입력하고 더 나은 결과를 얻기 위해 사용할 페르소나 설정 방법

포럼과 모델에 데이터가 없는 경우를 제외하고, 해당 데이터에 기반한 답변을 얻고 싶습니다

@awesomerobot

소중한 의견 주셔서 정말 감사합니다. 봇에서 응답은 받고 있지만, 포럼 콘텐츠가 포함되지 않는 것 같습니다. 포럼 콘텐츠를 포함시킬 수 있도록 개선할 수 있는 방법이 있을까요? 다시 한번 감사합니다!

도구 사용(tool use)을 지원하는 LLM으로 전환해야 합니다. 예를 들어, 저희가 제공하는 “포럼 도우미” 페르소나는 "search"와 “read” 도구를 사용하여 포럼에서 관련 콘텐츠를 찾아 답변에 반영합니다.

모델이 네이티브 도구 지원을 제공하지 않는 경우, 프롬프트에 도구를 포함하는 XML 대안을 항상 사용할 수 있습니다: