智能体工程驱动AI Agent开发(人工智能技术丛书)【行情 报价 价格 评测】-京东

《智能体工程驱动AI Agent开发》1~6章试读-持续更新-CSDN博客

前面我们使用Qwen大模型完成了基础模型的构建构建,并在其基础上借助 Loop 循环,实现了流式交互与并发工具调用的落地实践。但在之前的演示中,我们采用的是虚拟工具模拟调用流程,仅用于验证工具调用的逻辑闭环,并未对接真实的网络服务,难以满足实际开发需求。

生态以阿里搜索为核心载体,涵盖 AI 服务、地图服务、数据服务、开发工具等多个领域,所有工具均支持普通用户免费试用,接口规范、稳定性强,完美适配我们之前搭建的大模型工具调用框架,无需大幅修改代码,即可替换虚拟工具实现真实功能调用。其核心优势在于 “免费易用、生态联动、无缝衔接”,既能满足初学者的学习实践需求,也能支撑简单商业场景的快速落地,无需担心接口费用和技术门槛。

3.2.1  阿里搜索引擎的开通

我们首先需要通过阿里云百炼的控制台,登录“AI搜索开发平台”的“服务广场”,之后点击“立即开通”开通服务(详情参看配套资源中的相关文档),如图3-3所示。

图3-3  联网搜索服务

我们点击“联网搜索服务(web-search)”下方的“查看详情”,打开“服务详情”页面如图3-4所示,点击右边的“查看文档”链接,打开页面如图3-5所示。

图3-4  “服务详情”页面

图3-5  “服务详情”页面

图3-5所示页面右侧可以获取Curl请求示例,部分主函数如下所示:

curl -X POST \

-H "Content-Type: application/json" \

-H "Authorization: Bearer 您的API-KEY" \

"http://xxxx-hangzhou.opensearch.aliyuncs.com/v3/openapi/workspaces/default/web-search/ops-web-search-001" \

-d '{

      "history": [

        {"role": "system", "content": "你是一个机器人助手"},

        {"role": "user", "content": "浙江的省会是哪里"},

        {"role": "assistant", "content": "杭州"}

        ],

      "query":"杭州今日天气怎么样",

      "query_rewrite":true,

      "top_k":5,

      "content_type":"snippet"

}'

我们还需要获取待使用的公网域名以及对应的API Key,如图3-6所示。

图3-7  API Keys页面

下面我们需要创建API Key,并同时记录对应的域名,如图3-8所示。

图3-8  获取到的域名与API Key

我们可以使用页面上提供的公网API域名,读者可以自行保存这个域名。

3.2.2  阿里搜索引擎的实现与使用

下面我们结合阿里云AI搜索开放平台完成阿里搜索引擎的实现与使用,代码如下所示:

import httpx

# ==================== 配置区(在 AI搜索开放平台控制台「API Keys」页面获取) ========

from model_config import ModelConfig

_cfg = ModelConfig.get("ali_search")

# 所有凭据 / 域名由 ModelConfig 单一来源提供 —— 这里不再保留任何默认值

_API_KEY = _cfg["api_key"]

_HOST = _cfg["host"]

_WORKSPACE_NAME = _cfg["workspace"]

_SERVICE_ID = _cfg["service_id"]  # noqa: F841 保留供外部模块导入

SEARCH_URL = f"https://{_HOST}/v3/openapi/workspaces/{_WORKSPACE_NAME}/ web-search/{_SERVICE_ID}"

def ali_search(query: str, top_k: int = 5, content_type: str = "snippet") -> str:

    """阿里云 AI搜索开放平台 联网搜索工具

    参数:

        query: 搜索词

        top_k: 搜索返回结果数(默认 5

        content_type: 搜索结果内容类型(snippet 摘要 / summary 文本摘要 / mainText 正文)

    返回:搜索结果字符串

    """

    # 请求头:API-KEY 认证

    headers = {

        "Authorization": f"Bearer {API_KEY}",

        "Content-Type": "application/json",

    }

    # 请求体:query 必填,其余为可选参数

    payload = {

        "query": query,

        "query_rewrite": True,        # 是否启用 LLM query 进行重写

        "top_k": top_k,               # 返回结果数

        "content_type": content_type, # 结果内容类型

    }

    try:

        resp = httpx.post(SEARCH_URL, headers=headers, json=payload, timeout=30)

        result = resp.json()

        # 接口报错时(响应体含 code/message 字段,如 InvalidParameter

        if "code" in result:

            return f"搜索失败:{result.get('message', result.get('code'))}"

        # 正常响应:result.search_result 为结果列表

        search_result = result.get("result", {}).get("search_result", [])

        if not search_result:

            return f"未找到「{query}」相关结果"

        res = [f"🔍 {query} 搜索结果:"]

        for i, item in enumerate(search_result, 1):

            title = item.get("title", "无标题")

            link = item.get("link", "")

            snippet = item.get("snippet", "")

            res.append(f"\n{i}. {title}\n   链接:{link}\n   摘要:{snippet}")

        return "\n".join(res)

    except Exception as e:

        return f"搜索失败:{str(e)}"

# 测试

if __name__ == "__main__":

    print(ali_search("北京今日天气怎么样"))

输出结果读者可以自行尝试学习。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐