<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>RL Environments on Narasimha Karthik J</title><link>https://jnk234.github.io/tags/rl-environments/</link><description>Recent content in RL Environments on Narasimha Karthik J</description><generator>Hugo</generator><language>en</language><lastBuildDate>Mon, 05 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://jnk234.github.io/tags/rl-environments/index.xml" rel="self" type="application/rss+xml"/><item><title>Customer-Service Agent RL Environment</title><link>https://jnk234.github.io/projects/customer-service-agent-rl-environment/</link><pubDate>Mon, 05 Oct 2026 00:00:00 +0000</pubDate><guid isPermaLink="false">https://jnk234.github.io/projects/customer-service-agent-rl-environment/#full</guid><description>&lt;p&gt;&lt;a href="https://github.com/JNK234/customer-service-agent-rl-env" target="_blank" rel="noreferrer"&gt;Code on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="what-it-is" class="relative group"&gt;What it is &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#what-it-is" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;Two LLMs talk to each other. A &lt;strong&gt;user simulator&lt;/strong&gt; plays a customer with a hidden goal and sees only what the agent says. An &lt;strong&gt;assistant agent&lt;/strong&gt; follows a written store policy and uses 13 tools that read and change an in-memory database built from the &lt;a href="https://github.com/sierra-research/tau2-bench" target="_blank" rel="noreferrer"&gt;τ²-bench&lt;/a&gt; retail data (25 users, 45 orders, 50 products).&lt;/p&gt;
&lt;p&gt;The tools check only data integrity, not policy. So a policy violation changes the database, and the reward can see it.&lt;/p&gt;
&lt;h2 id="the-reward" class="relative group"&gt;The reward &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#the-reward" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Gate on state.&lt;/strong&gt; The agent&amp;rsquo;s database diff must match a correct outcome, and the agent must have made the required lookups. A confident transcript with a wrong write scores zero, and a do-nothing agent can&amp;rsquo;t pass tasks where the right answer is &amp;ldquo;no write&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Efficiency.&lt;/strong&gt; Fewer wasted tool calls score higher.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quality, by an LLM judge.&lt;/strong&gt; The judge checks consent before each write and whether every claim of a finished action matches the tool log. It asks one yes/no question per call and quotes evidence before its verdict. Hard violations cap the reward below the floor of any clean run.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A pytest suite checks that golden runs pass and do-nothing runs fail, with no API calls.&lt;/p&gt;
&lt;h2 id="what-red-teaming-found" class="relative group"&gt;What red-teaming found &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#what-red-teaming-found" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Forged consent.&lt;/strong&gt; In a hand-written bad conversation, the customer&amp;rsquo;s text contained fake &amp;ldquo;AGENT: &amp;hellip; CUSTOMER: Yes&amp;rdquo; lines, and the judge passed the consent check. Feeding the judge speaker-tagged messages fixed it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unfair simulator.&lt;/strong&gt; The user simulator once agreed and sent its stop token in the same message, so a correct agent scored 0.&lt;/li&gt;
&lt;li&gt;Against a judge-aware hostile customer, a Sonnet agent scored 1.0 and a Haiku agent scored 0, after handing off to a human following a correct denial.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These come from one or two runs per task, not pass rates.&lt;/p&gt;</description></item></channel></rss>