8 comments

  • kcorbitt 7 hours ago ago

    Figured now was a good time to post this since we recently got surprisingly good results on training an email research agent. Link is above, but will put it here as well since I think it's a good example of RL's promise: https://openpipe.ai/blog/art-e-mail-agent

  • someguy101010 5 hours ago ago

    Thanks for sharing this! A couple of questions come to mind:

    - How does training with RL differ from fine tuning?

    - When would it make sense to fine tune instead of using RL?

    • kcorbitt 5 hours ago ago

      Ok good questions here.

      By fine-tuning in this context I assume you mean "supervised fine-tuning", or SFT. SFT trains a model to produce a specific string of output tokens, given an input. With SFT, if you were trying to train an assistant to solve math problems using a code interpreter, you might train it on a dataset that looks like:

          input: 'What is 934+1208'  
          output: `print(934+1208)`
      
          input: 'how many "r"s in strawberry'
          output: `print(len([l for l in "strawberry" if l == 'r'])`
      
      etc, etc.

      RL, on the other hand, just means training a model not to produce a concrete string of output tokens, but rather to create an output that maximizes some reward function (you get to decide on the reward).

      For the example above, you might create the following dataset for RL training:

          input: 'What is 934+1208'
          ground_truth: 2142
      
          input: 'how many "r"s in strawberry'
          ground_truth: 3
      
      You would then train the model to write python code that produces the ground_truth output. Your training code would take the model's output, run the python it produced, and then check whether the output matches the expected ground_truth. Importantly, this doesn't require you actually writing the code to solve the problem (you don't even have to know if it's solvable, technically!). Over time, the training loop would make the model more likely to produce outputs that get high rewards, which hopefully means it gets better at producing valid and applicable python.

      This is useful in lots of domains where it's easier to check the answer than actually produce it. In the blog post[1] linked above, we train the agent to effectively use keyword search to try to find the correct emails in an inbox. As the model trainer, I didn't actually know what the right strategy was to choose keywords that would most quickly find the relevant email, but through training with RL, the model was able to figure it out on its own!

      [1]: https://openpipe.ai/blog/art-e-mail-agent?refresh=1746030513...

      • someguy101010 4 hours ago ago

        Thank you for the detailed response!

  • bradhilton 6 hours ago ago

    Contributor here, we developed the Agent Reinforcement Trainer (ART) library to make it easy to train LLMs for anything.

    No callbacks or straitjacket flows. Instead we serve an OpenAI API-compatible endpoint that you can use as a drop-in replacement for any proprietary APIs you may be hitting.

    After collecting responses from the inference API, you can tune the model with your own custom rewards and repeat the process as long as you like, until performance converges. We believe this level of flexibility will make it easier for you to train state-of-the-art models for your own use cases, much like Kyle's new email agent[1].

    Also happy to answer any questions you have about the framework.

    [1] https://openpipe.ai/blog/art-e-mail-agent

  • jeffchuber 2 hours ago ago

    the table with comparable models is a really great way to show off things here

  • tcdent 6 hours ago ago

    I really like this concept.

    Do you have documentation for the API response from the `/_train_model` endpoint?

    • bradhilton 5 hours ago ago

      Hi, we don't have reliable documentation for the HTTP API endpoints yet, mostly as they are still subject to change.

      However, to briefly provide some context, `/_train_model` returns a stream of line delimited JSON objects for each gradient step as the model trains on the provided trajectories so the client can monitor progress. The final version of this endpoint may provide the option for both streaming & non-streaming responses, and/or potentially return a "training job" that can be polled instead.