华为CodeArts Doer代码智能体体验:百度智能体搜索结果获取工具开发与测试
CodeArts Doer代码智能体是一款集AI IDE、Code Agent、代码大模型为一体的智能编码产品,它面向项目级代码生成、代码续写、研发知识问答、单元测试用例生成、代码解释、代码注释、代码调试、代码翻译、代码检查、代码优化等场景,依据开发者输入的需求描述,准确且高效地生成高质量代码, 如同开发者身边的专属技术顾问。它和字节的TRAE、阿里千问的Qoder、腾讯的Code Buddy是同
引言
最近华为云开启了CodeArts Doer代码智能体体验官活动:https://developer.huaweicloud.com/signup/78745481cafb4d79bf62096f6770c72e?channelCode=hcdg
我最近对AI编程非常感兴趣,自然要参加测试一下。在日常工作和学习中,我们经常需要获取百度搜索结果并进行分析。我们测试的目标就是如何开发一个Python应用,用于获取百度智能体搜索结果的前十条,让我们看看华为这个代码智能体的表现如何。
CodeArts Doer代码智能体简介
CodeArts Doer代码智能体是一款集AI IDE、Code Agent、代码大模型为一体的智能编码产品,它面向项目级代码生成、代码续写、研发知识问答、单元测试用例生成、代码解释、代码注释、代码调试、代码翻译、代码检查、代码优化等场景,依据开发者输入的需求描述,准确且高效地生成高质量代码, 如同开发者身边的专属技术顾问。它和字节的TRAE、阿里千问的Qoder、腾讯的Code Buddy是同类型产品。
点击前面的链接完成报名后,访问链接免费开通服务,然后下载安装,参照官网帮助文档(内含最佳实践)或收录进案例中心的实操案例,就可以使用了。我测试的是VSCode插件版本,模型采用的是默认的质谱GLM。
体验过程
直接代码生成
CodeArts Doer的安装和使用过程和TRAE差不多,所以使用时没有感觉到什么困难。我故意给了一个非常简短的提示词,想看看工具是否能够正确处理:
生成一个python应用,访问百度的智能体搜索结果的前十条
CodeArts Doer开始生成代码:

它生成的这个代码方案是一个经典的requests+BeautifulSoup爬虫的方法,应该是很多Python教程上用的方法,不过这个方法已经不太能用了,因为百度加了反爬虫机制。这个方法的基本思路:
1. 构造百度搜索URL
2. 添加HTTP请求头模拟浏览器访问
3. 发送GET请求获取HTML内容
4. 使用BeautifulSoup解析HTML
5. 提取搜索结果的标题、链接和描述
创建`baidu_ai_search.py`文件:
import requests
from bs4 import BeautifulSoup
import json
import time
import random
def fetch_baidu_ai_search(query, max_results=10):
"""
Fetch search results from Baidu's search
Args:
query (str): Search query
max_results (int): Maximum number of results to return (default: 10)
Returns:
list: List of search result dictionaries
"""
# Baidu search URL
url = "https://www.baidu.com/s"
# Headers to mimic a real browser
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive',
'Upgrade-Insecure-Requests': '1'
}
# Parameters for the search request
params = {
'wd': query,
'rn': str(max_results),
'ie': 'utf-8',
'oe': 'utf-8'
}
try:
# Add random delay to avoid being blocked
time.sleep(random.uniform(1, 3))
# Send GET request
response = requests.get(url, headers=headers, params=params, timeout=10)
response.raise_for_status()
# Parse the HTML content
soup = BeautifulSoup(response.text, 'html.parser')
# Extract search results
results = []
# Find all result containers
result_containers = soup.find_all('div', class_='result')
for idx, container in enumerate(result_containers[:max_results], 1):
try:
# Extract title and link
title_tag = container.find('h3')
if not title_tag:
continue
link_tag = title_tag.find('a')
if link_tag:
title = link_tag.get_text(strip=True)
link = link_tag.get('href', '')
else:
title = title_tag.get_text(strip=True)
link = ''
# Extract description/snippet
snippet_tag = container.find('div', class_='c-abstract') or \
container.find('div', class_='c-span-last') or \
container.find('div', class_='content')
snippet = snippet_tag.get_text(strip=True) if snippet_tag else ''
# Add to results
results.append({
'rank': idx,
'title': title,
'link': link,
'snippet': snippet
})
except Exception as e:
print(f"Error parsing result {idx}: {e}")
continue
return results
except requests.exceptions.RequestException as e:
print(f"Error fetching search results: {e}")
return []
except Exception as e:
print(f"Unexpected error: {e}")
return []
def display_results(results):
"""
Display search results in a formatted way
Args:
results (list): List of search result dictionaries
"""
if not results:
print("No results found.")
return
print(f"\n{'='*80}")
print(f"Found {len(results)} results:")
print(f"{'='*80}\n")
for result in results:
print(f"[{result['rank']}] {result['title']}")
print(f" URL: {result['link']}")
print(f" {result['snippet']}\n")
print("-" * 80 + "\n")
def main():
"""
Main function to run the Baidu search application
"""
print("Baidu Search - Top 10 Results")
print("=" * 50)
# Get search query from user
query = input("\nEnter your search query: ").strip()
if not query:
print("Please enter a search query.")
return
# Fetch results
print(f"\nSearching for: {query}")
print("Please wait...")
results = fetch_baidu_ai_search(query, max_results=10)
# Display results
display_results(results)
# Optional: Save results to JSON file
if results:
save_option = input("\nSave results to JSON file? (y/n): ").strip().lower()
if save_option == 'y':
filename = f"baidu_search_results_{int(time.time())}.json"
with open(filename, 'w', encoding='utf-8') as f:
json.dump(results, f, ensure_ascii=False, indent=2)
print(f"Results saved to: {filename}")
if __name__ == "__main__":
main()
代码调试
运行程序并搜索"智能体":
python baidu_ai_search.py
输入搜索词:智能体,程序运行后输出:
Baidu AI Agent Search - Top 10 Results
==================================================
Enter your search query: 智能体
Searching for: 智能体
Please wait...
No results found.
显然程序没有得到正确的结果。将这个结果反馈给Doer,它做了如下分析:

Doer修改了代码,主要做了如下改进:

改进后的代码就不贴了。Doer增加调试代码的思路是正确的,但是再次运行程序后仍然无法获得正确结果。接下来Doer就进入死胡同了,它总是认为代码的解析有问题,没有怀疑过百度反爬机制的问题。所以最后没有得到可用的代码。
TRAE对比
我刚开始用TRAE的VSCode插件进行了结果分析:

从TRAE的结果分析看,它注意到运行结果反映出百度使用了反爬虫机制,所以建议采用Selenum模拟浏览器。
我又开启了TRAE IDE,从头开始让它生成代码。

TRAE刚开始生成的代码和CodeArts Doer是一样的,也是个老的爬虫方案,但是执行之后,TRAE发现百度返回的是"网络不给力,请稍后重试"的安全验证页面,而不是实际的搜索结果,意识到因为百度的反爬措施检测到了我们的请求可能是爬虫。
为了解决这个问题,TRAE采用了SerpAPI来获取百度搜索结果。SerpAPI是一个第三方搜索API服务,可以提供各种搜索引擎的搜索结果,包括百度。修改后的代码为:
def search_baidu_agent(query):
# 使用SerpAPI获取百度搜索结果
serpapi_key = "YOUR_SERPAPI_KEY" # 请替换为您的SerpAPI密钥
if not serpapi_key or serpapi_key == "YOUR_SERPAPI_KEY":
print("请先在代码中设置您的SerpAPI密钥")
print("您可以在 https://serpapi.com/ 注册并获取API密钥")
return []
url = "https://serpapi.com/search"
params = {
"engine": "baidu",
"q": query,
"api_key": serpapi_key,
"num": 10 # 返回10条结果
}
try:
# 发送请求
response = requests.get(url, params=params, timeout=10)
response.raise_for_status()
# 解析JSON响应
data = response.json()
# 提取搜索结果
results = []
if "organic_results" in data:
for i, result in enumerate(data["organic_results"]):
title = result.get("title", "")
link = result.get("link", "")
summary = result.get("snippet", "")
results.append({
"rank": i + 1,
"title": title,
"link": link,
"summary": summary
})
return results
except Exception as e:
print(f"搜索出错: {e}")
return []
我访问 https://serpapi.com/ 注册并获取API密钥,将 serpapi_key = "YOUR_SERPAPI_KEY" 中的 YOUR_SERPAPI_KEY 替换为实际API密钥。
使用修改后的代码,我们成功获取了百度搜索结果的前十条,并按照预期格式输出。以下是测试结果示例:
正在搜索: 人工智能
=== 百度智能体搜索结果(前10条)===
【1】人工智能_百度百科
链接: https://baike.baidu.com/item/人工智能/9180
摘要: 人工智能(Artificial Intelligence,简称AI),是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。
--------------------------------------------------------------------------------
【2】人工智能的定义是什么? - 知乎
链接: https://www.zhihu.com/question/26733667
摘要: 人工智能(Artificial Intelligence,简称AI)是指由人制造出来的机器所表现出来的智能。人工智能的核心问题包括推理、知识、规划、学习、交流、感知、移动和操作物体的能力等。
--------------------------------------------------------------------------------
...
共找到 10 条结果
Deepseek网页版对比
我也用Deepseek网页版做了对比,在它的分析中直接指出了反爬机制问题。

DeepSeek生成的代码方案就不包括这种经典爬虫方案。

小结
AI编程是兵家不争之地,所以华为推出了Doer应该是对先前Snap的一个重大改进,不过华为在AI方面起步一直偏晚,还有很多工作要做,期待它会越来越好。第一次代码生成有问题不奇怪,很多是基础模型的能力问题,但是如何处理错误,采用何种修复策略就是工具自身的功力问题了。
更多推荐



所有评论(0)