Files
liqiang b119135836
Build latest book artifacts / build (push) Canceled after 0s
dependency resolution / resolve (3.11) (push) Canceled after 0s
dependency resolution / resolve (3.13) (push) Canceled after 0s
deploy-pages / build (push) Canceled after 0s
deploy-pages / deploy (push) Canceled after 0s
i18n consistency check / check (push) Canceled after 0s
provider adoption tests / test (chapter2/context-compression) (push) Canceled after 0s
provider adoption tests / test (chapter2/prompt-injection) (push) Canceled after 0s
provider adoption tests / test (chapter2/system-hint) (push) Canceled after 0s
provider adoption tests / test (chapter3/log-sanitization) (push) Canceled after 0s
web-search-agent tests / test (push) Canceled after 0s
web-search-agent tests / agentbook (push) Canceled after 0s
ai-agent-book 精选快照(<2MB 代码与文档,来自 github.com/bojieli/ai-agent-book)
2026-08-20 13:12:50 +00:00

125 lines
4.8 KiB
Python

# Add the project root to Python path
from pathlib import Path
import sys
import unittest
project_root = Path(__file__).parent.parent.parent
print(project_root)
sys.path.insert(0, str(project_root))
from aworld.agents.llm_agent import Agent
from tests.base_test import assertEqual, init_agent, run_agent, run_task
from aworld.core.context.base import Context
from aworld.core.context.prompts.dynamic_variables import create_simple_field_getter, format_ordered_dict_json, \
get_field_values_from_list, get_value_by_path
from aworld.core.context.prompts.string_prompt_template import StringPromptTemplate
class TestPromptTemplate(unittest.TestCase):
def test_dynamic_variables(self):
context = Context()
context.context_info.update({"task": "chat"})
# Test dot separator
value_dot = get_value_by_path(context, "context_info.task")
assert "chat" == value_dot
# Test slash separator
value_slash = get_value_by_path(context, "context_info/task")
assert "chat" == value_slash
def test_formatted_field_getter(self):
context = Context()
value = {"steps": [1, 2, 3]}
context.trajectories.update(value)
getter = create_simple_field_getter(field_path="trajectories", default="default_value")
result = getter(context=context)
assert "steps" in value
# test default format function
assert "OrderedDict" not in result
# Test formatted field getter with processor
getter = create_simple_field_getter(field_path="trajectories", default="default_value",
processor=format_ordered_dict_json)
result = getter(context=context)
assert "steps" in result
def test_multiple_field_getters(self):
context = Context()
context.context_info.update({"task": "chat"})
context.trajectories.update({"steps": [1, 2, 3]})
field_paths = ["context_info.task", "trajectories.steps"]
result = get_field_values_from_list(context=context, field_paths=field_paths)
assert result["context_info_task"] == "chat"
assert result["trajectories_steps"] == "[1, 2, 3]"
def test_string_prompt_template(self):
# Use proper dot notation for nested field access
template = StringPromptTemplate.from_template(
"Hello {{name}}, welcome to {{place}}! Task: {{task}} Age: {{age}}",
partial_variables={"age": "1"})
assert "name" in template.input_variables
assert "place" in template.input_variables
assert "task" in template.input_variables
context = Context()
context.context_info.update({"task": "chat"})
# Pass task as a direct parameter since template expects it
result = template.format(context=context, name="Alice", place="AWorld", task="chat")
assert result == "Hello Alice, welcome to AWorld! Task: chat Age: 1"
def test_enhanced_field_values_basic(self):
context = Context()
context.context_info.update({"task": "chat"})
# Test retrieving both time variables and context fields
result = get_field_values_from_list(
context=context,
field_paths=["current_time", "context_info.task"],
default="not_found"
)
# Verify context field retrieved
assert result["context_info_task"] == "chat"
# Verify time variable retrieved (should be in HH:MM:SS format)
assert ":" in result["current_time"]
assert len(result["current_time"].split(":")) == 3
def test_undefined_system_prompt_template(self):
agent = init_agent()
agent._log_messages = lambda messages: assertEqual(messages[0]['content'], "You are a helpful assistant.")
result = run_task(
input="What is the weather in Beijing?",
agent=agent
)
assert result is not None
def test_custom_system_prompt_template(self):
context = Context()
context.context_info.set("name", "Qwen")
context.context_info.set("plan", [{"input": "query weather in Beijing"}])
system_prompt_template = StringPromptTemplate.from_template(
"Hello {{context_info.name}}, you are a {{role}}, {{context_info.plan}}",
partial_variables={"role": "assistant", "context_info.plan": lambda ob: "please " + ob[0]['input']})
agent = init_agent(
system_prompt_template=system_prompt_template,
)
agent._log_messages = lambda messages: assertEqual(messages[0]['content'], "Hello Qwen, you are a assistant, please query weather in Beijing")
result = run_task(
input="What is the weather in Beijing?",
agent=agent,
context=context
)
assert result is not None
if __name__ == "__main__":
unittest.main()