Пример вопросов и ответов по AI-агенту
В этой главе мы создадим нашего первого настоящего AI-агента.
Мы начнём с простого Q&A-агента и постепенно добавим больше функций.
Подготовка структуры проекта
Сначала создайте каталогexample-ai-agent:
mkdir example-ai-agent
Перейдите в каталогexample-ai-agentи используйте команду uv, чтобы создать виртуальное окружение:
cd example-ai-agent # 创建名为 .venv 的虚拟环境(默认) uv venv # 激活环境(macOS/Linux) source .venv/bin/activate # 激活环境(Windows) .venv\Scripts\activate
Используйте uv, чтобы создать и активировать виртуальное окружение. Для получения дополнительной информации можно прочитатьруководство по uv。
Создайте структуру каталогов проекта:
example-ai-agent/
├── .env
├── .gitignore
├── requirements.txt
├── test_basic_agent.py
├── README.md
├── src/
│ ├── __init__.py
│ └── simple_agent.py
└── tests/
└── __init__.py

Получите API Key в Alibaba Bailian
В этой главе требуется функция поиска, поэтому мы используем модель Alibaba Qwen, так как она имеет встроенную функцию поиска.
Модель Tongyi Qianwen в Alibaba Cloud Bailian поддерживает API, совместимые с OpenAI. Вам нужно только изменить API Key, BASE_URL и имя модели, чтобы перенести существующий код OpenAI в Alibaba Cloud Bailian.
- base_url: замените на https://dashscope.aliyuncs.com/compatible-mode/v1
- api_key: замените на ваш API Key от Alibaba Cloud Bailian
- model: замените на qwen3-max
Ссылка для справки:https://help.aliyun.com/zh/model-studio/compatibility-of-openai-with-dashscope
Нам нужно активировать сервис моделей Alibaba Cloud Bailian и получить API-KEY.
Сначала войдите на платформу Bailian Model Studio, используя основную учётную запись Alibaba Cloud:https://bailian.console.aliyun.com/, затем нажмите Login в правом верхнем углу. После входа нажмите на значок шестерёнки ⚙️ в правом верхнем углу, выберите API key и скопируйте его. Если у вас его нет, вы также можете создать API key:


Активация Alibaba Cloud Bailian не влечёт никаких расходов. Плата взимается только за вызовы моделей (после превышения бесплатной квоты), развёртывание моделей и тонкую настройку моделей.
] API теперь тарифицируются по токенам. К счастью, цены вполне доступные, поэтому мы можем начать с покупки самого дешёвого пакета:Платформа сервиса больших моделей Bailian от Alibaba Cloud。
Вы также можете напрямую использовать пакет Coding Plan от Bailian и Ark:https://www.example.com/claude-code/coding-plan.html。
Создайте базовый класс Agent:
Пример
import os
from typing import List, Dict, Any
from openai import OpenAI
from dotenv import load_dotenv
# Загрузить переменные окружения
load_dotenv()
class SimpleQAAgent:
"""Простой агент вопросов и ответов"""
def __init__(self, model: str = "qwen3-max"): # Установить модель по умолчанию DeepSeek
"""
Инициализировать агент
Аргументы:
model: имя используемой модели, по умолчанию DeepSeek
"""
# api_key = os.getenv("OPENAI_API_KEY")
api_key = "sk-xxx" # Ваш API-ключ
base_url = "https://dashscope.aliyuncs.com/compatible-mode/v1"
if not api_key:
raise ValueError("Пожалуйста, задайте переменную окружения OPENAI_API_KEY")
self.client = OpenAI(
api_key = api_key,
base_url = base_url)
self.model = model
self.conversation_history: List[Dict[str, str]] = []
self.system_prompt = "Вы — полезный ИИ-ассистент. Пожалуйста, отвечайте на вопросы пользователей вежливо и точно."
def add_to_history(self, role: str, content: str):
"""Добавить сообщение в историю диалога"""
self.conversation_history.append({
"role": role,
"content": content
})
# Сохранять длину истории в пределах 10 ходов (чтобы предотвратить переполнение токенов)
if len(self.conversation_history) > 10:
self.conversation_history = self.conversation_history[-10:]
def ask(self, question: str) -> str:
"""
Задать вопрос агенту
Аргументы:
question: Вопрос пользователя
Возвращает:
Ответ агента
"""
# Добавить вопрос пользователя в историю
self.add_to_history("user", question)
# Подготовить список сообщений
messages = [
{"role": "system", "content": self.system_prompt}
]
messages.extend(self.conversation_history)
try:
# Вызов OpenAI API
response = self.client.chat.completions.create(
model=self.model,
messages=messages,
temperature=0.7,
max_tokens=500
)
# Извлечь ответ
answer = response.choices[0].message.content
# Добавить ответ ассистента в историю
self.add_to_history("assistant", answer)
return answer
except Exception as e:
error_msg = f"Ошибка вызова API: {str(e)}"
print(error_msg)
return error_msg
def clear_history(self):
"""Очистить историю разговора"""
self.conversation_history.clear()
Создайте тестовый скрипт для тестирования базового агента:
Пример
from src.simple_agent import SimpleQAAgent
def test_basic_agent():
"""Тест базового агента вопросов и ответов"""
print("=== Тест базового агента вопросов и ответов ===")
# Создать агента
agent = SimpleQAAgent()
# Тест вопросов и ответов
questions = [
"Здравствуйте, представьтесь, пожалуйста",
"Что такое Python?",
"В чём разница между машинным обучением и искусственным интеллектом?"
]
for question in questions:
print(f"\nПользователь: {question}")
answer = agent.ask(question)
print(f"Ассистент: {answer}")
# Тест согласованности диалога
print("\n=== Тест согласованности диалога ===")
agent.clear_history()
# Первый раунд
q1 = "Мой любимый цвет — синий"
a1 = agent.ask(q1)
print(f"Пользователь: {q1}")
print(f"Ассистент: {a1}")
# Второй раунд (должен помнить предыдущий разговор)
q2 = "Какой цвет я только что назвал своим любимым?"
a2 = agent.ask(q2)
print(f"\nПользователь: {q2}")
print(f"Ассистент: {a2}")
print("\nТест завершён!")
if __name__ == "__main__":
test_basic_agent()
Запустите тест:
python test_basic_agent.py === 测试基础问答 Agent === User: 你好,请介绍一下自己 example 助理: 你好!我是通义千问(Qwen),是阿里巴巴集团自主研发的超大规模语言模型。我可以帮助你回答问题、创作文字,比如写故事、写公文、写邮件、写剧本、逻辑推理、编程等等,还能表达观点,玩游戏等。如果你有任何问题或需要帮助,随时告诉我! User: Python是什么? 助理: 你好!Python 是一种**高级、解释型、通用的编程语言**,由荷兰程序员 **吉多·范罗苏姆(Guido van Rossum)** 于1991年首次发布。它的设计哲学强调代码的**可读性**和**简洁性**,语法清晰简洁,使得初学者也能快速上手。 ...
У этого базового агента есть несколько очевидных ограничений:
- Может отвечать только на основе знаний из обучающих данных
- Не может получать информацию в реальном времени
- Не может выполнять вычисления
- Не может управлять внешними системами
Именно поэтому нам нужно добавить инструменты в агента.
Добавить инструмент поиска
В Qwen есть встроенная функция поиска; передавenable_search: trueпараметры, можно включить функцию веб-поиска.
# 导入依赖与创建客户端...
completion = client.chat.completions.create(
# 需使用支持联网搜索的模型
model="qwen3-max",
messages=[{"role": "user", "content": "杭州明天天气如何"}],
# 由于 enable_search 非 OpenAI 标准参数,使用 Python SDK 需要通过 extra_body 传入(使用Node.js SDK 需作为顶层参数传入)
extra_body={"enable_search": True}
)
Документация:https://help.aliyun.com/zh/model-studio/web-search
Агент с интегрированным инструментом поиска
Теперь мы интегрируем инструмент поиска в агента. Создайте файл agent_with_search.py в каталоге src:
Пример
import os
from openai import OpenAI
from dotenv import load_dotenv
load_dotenv()
class AgentWithSearch:
"""Агент, основанный на встроенной возможности веб-поиска Qwen"""
def __init__(self, model: str = "qwen3-max"):
api_key = "sk-xxx"
base_url = "https://dashscope.aliyuncs.com/compatible-mode/v1"
if not api_key:
raise ValueError("Пожалуйста, установите переменную окружения OPENAI_API_KEY (ключ DashScope)")
self.client = OpenAI(
api_key=api_key,
base_url=base_url
)
self.model = model
self.system_prompt = """
Вы — полезный ИИ-ассистент.
Когда вопрос касается информации в реальном времени, последних событий или контента, требующего проверки фактов,
вы можете получить последнюю информацию через веб-поиск и указать в своих ответах, что информация взята из интернета.
"""
def ask(self, question: str) -> str:
messages = [
{"role": "system", "content": self.system_prompt},
{"role": "user", "content": question}
]
try:
response = self.client.chat.completions.create(
model=self.model,
messages=messages,
temperature=0.7,
max_tokens=800,
extra_body={
"enable_search": True
}
)
return response.choices[0].message.content
except Exception as e:
return f"Ошибка: {repr(e)}"
def interactive_chat(self):
print("=== Агент веб-поиска Qwen ===")
print("Введите quit / exit, чтобы завершить разговор")
while True:
question = input("\n"Вы: ").strip()
if question.lower() in {"quit", "exit"}:
break
print("Ассистент:", self.ask(question))
Тест поискового агента
Создайте файл test_search_agent.py в корневом каталоге:
Пример
from src.agent_with_search import AgentWithSearch
def test_search_agent():
agent = AgentWithSearch()
questions = [
"Какая сегодня погода в Пекине?",
"Какие последние новости технологий?",
"Где проходили Олимпийские игры 2024 года?",
"Что такое Python?"
]
for q in questions:
print(f"\n"Пользователь: {q}")
print("Ассистент:", agent.ask(q)[:300], "...")
if __name__ == "__main__":
test_search_agent()
Запустите тест:
python test_search_agent.py User: 今天北京的天气怎么样? 助理: 今天是2026年2月7日,星期六。根据最新天气预报信息,北京今天的天气情况如下: - **天气状况**:多云转晴 - **气温范围**:最低气温约 **-9℃**,最高气温约 **2℃**(部分区域如海淀区记录为 **-5℃ ~ 5℃**) - **风向风力**:白天到夜间有 **东北风1级**,部分地区午后转为 **南风转西北风,小于3级** - **空气质量**:**37(优)** - **穿衣建议**:建议穿棉衣、冬大衣、皮夹克、厚呢外套、羽绒服等厚重保暖衣物,并佩戴手套、帽子等防寒配件 ...Другие расширения
