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

Ruby and LLM Ecosystem

Avatar for Koichi ITO Koichi ITO
September 12, 2025

Ruby and LLM Ecosystem

Avatar for Koichi ITO

Koichi ITO

September 12, 2025
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 --.͕ະ஌ͷ֎෦஌ࣝΛఏڙ͢ΔͨΊɺ ϕΫτϧ%#͔Βҙຯతʹ͍ۙ৘ใΛݕࡧ
  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 'BTU.$1 ZKBDRVJOGBTUNDQ  w .$13# GVOXBSJPJTJJNDQSC  w .$1PO3VCZ

    SVCZPOBJNDQ@PO@SVCZ  w .$13VCZ4%, NPEFMDPOUFYUQSPUPDPMSVCZTEL 3VCZʹ͓͚Δ.$14%,HFN NPEFMDPOUFYUQSPUPDPMͷ63-͕ѹ౗తͩͬͨͷͰɺͦ͜ʹίϛοτ͍ͯ͠Δ
  8. w -BOHVBHF4FSWFS 1SPUPDPM -41 ʹӨڹ Λड͚ͨΞʔΩςΫνϟ w .$1͸ϗετɺ ΫϥΠΞϯτɺαʔόʔ Ͱ੒Δ

    w ΫϥΠΞϯτɺαʔόʔ ͸+40/31$ج൫ ͷ.$1Ͱ௨৴͢Δ .$1ͷΞʔΩςΫνϟ IUUQTNPEFMDPOUFYUQSPUPDPMJPTQFDJ fi DBUJPOBSDIJUFDUVSF
  9. .$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αʔόʔΛ࣮૷
  10. 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 ྫ