Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ruby and LLM Ecosystem 2nd

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

Ruby and LLM Ecosystem 2nd

Rubyセミナー オンライン (https://www.ruby.or.jp/ja/news/20260106)

Avatar for Koichi ITO

Koichi ITO

March 11, 2026
Tweet

More Decks by Koichi ITO

Other Decks in Programming

Transcript

  1. w 0QFO"*"1*Λ3VCZ͔Β࢖͏HFN w ΞϓϦଆ͔Β--.Λݺͼग़͢جຊ 3VCZ0QFO"*HFN OpenAI::Client.new.chat( parameters: { messages: [{role:

    "user", content: prompt}], model: "gpt-4o-mini", temperature: 0.0, max_tokens: 10 } ) # gem 'ruby-openai' IUUQTHJUIVCDPNBOUJXPSLHVNSPBECMPCQSPEVDUJPOGBBBDBQQNPEFMTQSPEVDU@SFGVOE@QPMJDZSC-- LLM΁ͷϓϩϯϓςΟϯάจࣈྻ
  2. 3"(ͷΞϓϩʔν ΞϓϦέʔγϣϯ w --.ͦͷ΋ͷΛνϡʔχ ϯά͢ΔͷͰͳ͘ɺݕࡧ ͨ͠֎෦஌ࣝΛϓϩϯϓ τʹຒΊࠐΉ w ݕࡧ͸ओʹϕΫτϧ%# w

    3"(͸ख๏Ͱ͋Γඪ४Խ ͞Εͨن֨Ͱ͸ͳ͍ --. --.΁ͷ"1*ϦΫΤετͱϨεϙϯε --.ΞϓϦجૅ ϕΫτϧ σʔλϕʔε Ϣʔβʔ Chroma, Milvus, pgvector, Pinecone, Weaviate, etc... ֎෦஌ࣝΛऔΓࠐΉ 3"(࣮ݱ
  3. 3"(ͱπʔϧݺͼग़͠ ֎෦πʔϧ "1*ݺͼग़͠ 5PPM6TF ΤʔδΣϯτߏஙڧԽ ΞϓϦέʔγϣϯ w --.஌ࣝʹͳ͍৘ใ͕ඞཁ ͳΒϕΫτϧσʔλϕʔε ໰͍߹ͤ݁ՌΛՃຯͯ͠

    --.΁ϓϩϯϓςΟϯά ͍ΘΏΔ޿ٛͷ3"(  w --.ͷϨεϙϯεʹԠ͡ɺ ֎෦πʔϧݺͼग़͠ͷ࢓૊ ΈΛೖΕΔ 3"(ͱผ࣠ --. --.΁ͷ"1*ϦΫΤετͱϨεϙϯε --.ΞϓϦجૅ ϕΫτϧ σʔλϕʔε ֎෦πʔϧ ίʔυ࣮ߦ Ϣʔβʔ Chroma, Milvus, pgvector, Pinecone, Weaviate, etc... ֎෦஌ࣝΛऔΓࠐΉ 3"(࣮ݱ
  4. -BOHDIBJO7FDUPSTFBSDI require 'langchain' require 'chroma-db' chroma = Langchain::Vectorsearch::Chroma.new( url: ::Chroma.connect_host,

    index_name: 'ruby40_collection', llm: Langchain::LLM::Ollama.new) response = chroma.ask(question: 'Ruby 4.0ͷRuby Boxͷ࡞ऀ͸ʁ') response.chat_completion # => 'tagomoris͞ΜͰ͢ɻ' w --.͕ະ஌ͷ֎෦஌ࣝΛఏڙ͢ΔͨΊɺ ϕΫτϧ%#͔Βҙຯతʹ͍ۙ৘ใΛݕࡧ Ruby 4.0.0ϦϦʔεҎલͷ 2025೥11݄7೔࣌఺Ͱ࣭໰
  5. w --.͕֎෦ػೳͱͯ͠ݺͼग़͠൑அͰ͖Δɺ ͍͔ͭ͘ͷ૊ΈࠐΈπʔϧΛαϙʔτ w -BOHDIBJO5PPM # Fetch weather from https://home.openweathermap.org

    weather = Langchain::Tool::Weather.new( api_key: ENV['OPEN_WEATHER_API_KEY'] ) # Use `eqn` gem calculator = LangChain::Tool::Calculator.new # Use `safe_ruby` gem interpreter = Langchain::Tool::RubyCodeInterpreter.new
  6. w --.ɺπʔϧͳͲΛ૊Έ߹ΘͤͯϢʔβʔͷ ϓϩϯϓςΟϯάʹԠ౴͢Δத֩ͷΫϥε -BOHDIBJO"TTJTUBOU require 'langchain' llm = Langchain::LLM::Ollama.new assistant

    = Langchain::Assistant.new( llm: llm, tools: [Langchain::Tool::Weather.new(api_key: api_key)] ) assistant.add_message(content: '໌೔ͷఱؾ͸ʁ') messages = assistant.run! messages.each { |message| p message.to_hash[:content] }
  7. w -BOHVBHF4FSWFS 1SPUPDPM -41 ʹӨڹ Λड͚ͨΞʔΩςΫνϟ w .$1͸ϗετɺ ΫϥΠΞϯτɺαʔόʔ Ͱ੒Δ

    w ΫϥΠΞϯτɺαʔόʔ ͸+40/31$ج൫ ͷ.$1Ͱ௨৴͢Δ .$1ͷΞʔΩςΫνϟ IUUQTNPEFMDPOUFYUQSPUPDPMJPTQFDJ fi DBUJPOBSDIJUFDUVSF
  8. .$1ϗετத৺ͷΦʔέετϨʔγϣϯ .$1αʔόʔ MCP on JSON-RPC 2.0 .$1 ΫϥΠΞϯτ .$1ϗετ w

    .$1ϗετ͸ɺϢʔβʔͱ--. ͱ.$1ΫϥΠΞϯτͷՍ͚ڮ w .$1ϗετ͸ઃఆʹج͍ͮͯ .$1αʔόʔΛ--.ʹ఻͑Δ w .$1ϗετ͸--.͕.$1αʔ όʔݺͼग़͠Λ͢ΔΑ͏ฦͨ͠Β .$1αʔόʔݺͼग़͠Λ͢Δ w --.͕௚઀.$1αʔόʔͷ ݺͼग़͠Λ͢ΔΘ͚Ͱ͸ͳ͍ --. --.΁ͷ"1*ϦΫΤετͱϨεϙϯε ઃఆϑΝΠϧ NDQKTPO౳ READ .$1αʔόʔ .$1 ΫϥΠΞϯτ Ϣʔβʔ αʔόʔઃఆ ։ൃऀ͸໨తʹԠ͡ MCPαʔόʔΛ࣮૷
  9. w $POUFYU.$1 w 4FSFOB.$1 w 'JHNB.$1 w 1MBZXSJHIU.$1 εΩϧ൛ͷ1MBZXSJHIU$-*΋ొ৔ .$1αʔόʔྫ

    ແݶʹ͋Δ IUUQTSFHJTUSZNPEFMDPOUFYUQSPUPDPMJPʹొ࿥͞ΕͨݕࡧՄೳͳ΋ͷ΋
  10. w 'BTU.$1 ZKBDRVJOGBTUNDQ  w .$13# GVOXBSJPJTJJNDQSC  w .$1PO3VCZ

    SVCZPOBJNDQ@PO@SVCZ  w .$13VCZ4%, NPEFMDPOUFYUQSPUPDPMSVCZTEL 3VCZʹ͓͚Δ.$14%,HFN NPEFMDPOUFYUQSPUPDPMͷ63-͕ѹ౗తͩͬͨͷͰɺͦ͜ʹίϛοτ͍ͯ͠Δ
  11. w 4IPQJGZ͕ࣾ಺Ͱ࡞͍ͬͯͨHFNΛެࣜͱͯ͠ఏ Ҋͯ͠ެ։͕࢝·ͬͨͬΆ͍ w .$1ͷΨόφϯε 4&1 ͕੔͏·Ͱͷؒ ͸ɺ4IPQJGZͰϝϯςφϯε͞Ε͍ͯͨ w "UF㶆(ÖSBM

    5PQIFS#VMMPDL +POBUIBO)FGOFS  ࢲͷਓ͕ϝϯςφʔͱͯ͠׆ಈ͍ͯ͠Δ .$13VCZ4%, Specification Enhancement Proposal
  12. w ެࣜ4%,͸.$1࢓༷΁ͷ४ڌ͕ٻΊΒΕΔ w ద߹ςετͷ߹֨཰΍ϝϯςφϯε౓߹͍Ͱ 5JFS ϑϧαϙʔτ  5JFS ϑϧαϙʔτ Λίϛοτϝϯτ

     5JFS ࣮ݧత Ͱ෼ྨ w ݱࡏ3VCZ4%,͸5JFS 5IF0G fi DJBM4%, ͭ·Γ.$1ͷ࢓༷ͷΞοϓσʔτʹԠͯ͡ɺ4%,΋ରԠ͢Δ͜ͱ͕ཁٻ͞ΕΔ IUUQTNPEFMDPOUFYUQSPUPDPMJPDPNNVOJUZTELUJFST
  13. require 'mcp' server = MCP::Server.new(name: 'example') server.define_tool( name: 'echo', description:

    'Echoes back its arguments', input_schema: { properties: { message: {type: 'string'} }, required: ['message'] } ) do |message:| MCP::Tool::Response.new([{ type: 'text', text: "Echo for #{message}" }]) end MCP::Server::Transports::StdioTransport.new(server).open ྫ