mirror of
https://github.com/meta-llama/llama-stack.git
synced 2025-08-12 04:50:39 +00:00
effective agents
This commit is contained in:
parent
7d111c7510
commit
b153d76c96
1 changed files with 226 additions and 0 deletions
226
docs/notebooks/Llama_Stack_Agent_Workflows.ipynb
Normal file
226
docs/notebooks/Llama_Stack_Agent_Workflows.ipynb
Normal file
|
@ -0,0 +1,226 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Llama Stack Agent Workflows\n",
|
||||
"\n",
|
||||
"This notebook contains minimal implementations of common agent workflows discussed in the blog post [Building Effective Agent Workflows](https://www.anthropic.com/research/building-effective-agents). Examples are copied from [anthropic-cookbook](https://github.com/anthropics/anthropic-cookbook/tree/main/patterns/agents). "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"MODEL_ID = \"meta-llama/Llama-3.3-70B-Instruct\""
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from llama_stack_client import LlamaStackClient\n",
|
||||
"from llama_stack_client.types.agent_create_params import AgentConfig\n",
|
||||
"from llama_stack_client.lib.agents.react.agent import ReActAgent\n",
|
||||
"from llama_stack_client.lib.agents.agent import Agent\n",
|
||||
"from rich.pretty import pprint\n",
|
||||
"import json\n",
|
||||
"import uuid\n",
|
||||
"\n",
|
||||
"client = LlamaStackClient(base_url=\"http://localhost:8321\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## 1. Basic Multi-LLM Workflow\n",
|
||||
"\n",
|
||||
"1. **Prompt Chaining**: Decomposes a task into sequential subtasks, where each step builds on previous results. \n",
|
||||
"\n",
|
||||
"2. **Parallelization**: Distributes independent subtasks acorss multiple LLMs for concurrent processing. \n",
|
||||
"\n",
|
||||
"3. **Routing**: Dynamically selects specialized LLM paths based on input characteristics. "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"#### 1.1 Prompt Chaining"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 19,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"========= Turn: 0 =========\n",
|
||||
"92: customer satisfaction score\n",
|
||||
"45%: revenue growth\n",
|
||||
"23%: market share\n",
|
||||
"5%: customer churn\n",
|
||||
"43: new user acquisition cost\n",
|
||||
"78%: product adoption rate\n",
|
||||
"87: employee satisfaction\n",
|
||||
"34%: operating margin\n",
|
||||
"8%: customer churn (changed to reflect the original value for comparison)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"========= Turn: 1 =========\n",
|
||||
"92%: customer satisfaction\n",
|
||||
"45%: revenue growth\n",
|
||||
"23%: market share\n",
|
||||
"5%: customer churn\n",
|
||||
"0.043: new user acquisition cost\n",
|
||||
"78%: product adoption rate\n",
|
||||
"87%: employee satisfaction\n",
|
||||
"34%: operating margin\n",
|
||||
"8%: previous customer churn\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"========= Turn: 2 =========\n",
|
||||
"92%: customer satisfaction\n",
|
||||
"87%: employee satisfaction\n",
|
||||
"78%: product adoption rate\n",
|
||||
"45%: revenue growth\n",
|
||||
"34%: operating margin\n",
|
||||
"23%: market share\n",
|
||||
"8%: previous customer churn\n",
|
||||
"5%: customer churn\n",
|
||||
"0.043: new user acquisition cost\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"========= Turn: 3 =========\n",
|
||||
"| Metric | Value |\n",
|
||||
"|:--|--:|\n",
|
||||
"| Customer Satisfaction | 92% |\n",
|
||||
"| Employee Satisfaction | 87% |\n",
|
||||
"| Product Adoption Rate | 78% |\n",
|
||||
"| Revenue Growth | 45% |\n",
|
||||
"| Operating Margin | 34% |\n",
|
||||
"| Market Share | 23% |\n",
|
||||
"| Previous Customer Churn | 8% |\n",
|
||||
"| Customer Churn | 5% |\n",
|
||||
"| New User Acquisition Cost | 0.043 |\n",
|
||||
"\n",
|
||||
"\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"vanilla_agent_config = AgentConfig(\n",
|
||||
" model=MODEL_ID,\n",
|
||||
" instructions=\"\"\"\n",
|
||||
" You are a helpful assistant capable of structuring data extraction and formatting. \n",
|
||||
"\n",
|
||||
" You will be given tasks to extract and format data from a performance report. Here is the report:\n",
|
||||
"\n",
|
||||
" Q3 Performance Summary:\n",
|
||||
" Our customer satisfaction score rose to 92 points this quarter.\n",
|
||||
" Revenue grew by 45% compared to last year.\n",
|
||||
" Market share is now at 23% in our primary market.\n",
|
||||
" Customer churn decreased to 5% from 8%.\n",
|
||||
" New user acquisition cost is $43 per user.\n",
|
||||
" Product adoption rate increased to 78%.\n",
|
||||
" Employee satisfaction is at 87 points.\n",
|
||||
" Operating margin improved to 34%.\n",
|
||||
" \"\"\",\n",
|
||||
" sampling_params={\n",
|
||||
" \"strategy\": {\"type\": \"top_p\", \"temperature\": 1.0, \"top_p\": 0.9},\n",
|
||||
" },\n",
|
||||
" toolgroups=[],\n",
|
||||
" tool_config={\n",
|
||||
" \"tool_choice\": \"auto\",\n",
|
||||
" \"tool_prompt_format\": \"python_list\",\n",
|
||||
" },\n",
|
||||
" input_shields=[],\n",
|
||||
" output_shields=[],\n",
|
||||
" enable_session_persistence=False,\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"vanilla_agent = Agent(client, vanilla_agent_config)\n",
|
||||
"\n",
|
||||
"session_id_1 = vanilla_agent.create_session(session_name=f\"vanilla_agent_{uuid.uuid4()}\")\n",
|
||||
"\n",
|
||||
"prompts = [\n",
|
||||
" \"\"\"Extract only the numerical values and their associated metrics from the text.\n",
|
||||
" Format each as 'value: metric' on a new line.\n",
|
||||
" Example format:\n",
|
||||
" 92: customer satisfaction\n",
|
||||
" 45%: revenue growth\"\"\",\n",
|
||||
"\n",
|
||||
" \"\"\"Convert all numerical values to percentages where possible.\n",
|
||||
" If not a percentage or points, convert to decimal (e.g., 92 points -> 92%).\n",
|
||||
" Keep one number per line.\n",
|
||||
" Example format:\n",
|
||||
" 92%: customer satisfaction\n",
|
||||
" 45%: revenue growth\"\"\",\n",
|
||||
"\n",
|
||||
" \"\"\"Sort all lines in descending order by numerical value.\n",
|
||||
" Keep the format 'value: metric' on each line.\n",
|
||||
" Example:\n",
|
||||
" 92%: customer satisfaction\n",
|
||||
" 87%: employee satisfaction\"\"\",\n",
|
||||
"\n",
|
||||
" \"\"\"Format the sorted data as a markdown table with columns:\n",
|
||||
" | Metric | Value |\n",
|
||||
" |:--|--:|\n",
|
||||
" | Customer Satisfaction | 92% |\"\"\",\n",
|
||||
"]\n",
|
||||
"\n",
|
||||
"for i, prompt in enumerate(prompts): \n",
|
||||
" response = vanilla_agent.create_turn(\n",
|
||||
" messages=[\n",
|
||||
" {\n",
|
||||
" \"role\": \"user\",\n",
|
||||
" \"content\": prompt,\n",
|
||||
" }\n",
|
||||
" ],\n",
|
||||
" session_id=session_id_1,\n",
|
||||
" stream=False,\n",
|
||||
" )\n",
|
||||
" print(\"========= Turn: \", i, \"=========\")\n",
|
||||
" print(response.output_message.content)\n",
|
||||
" print(\"\\n\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "master",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.10.16"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue