文档首页/ 智能体开发平台 AgentArts/ 高代码开发/ 组件库/ 沙箱工具/ 示例:基于SDK的工具开发与应用实践
更新时间:2026-05-06 GMT+08:00
分享

示例:基于SDK的工具开发与应用实践

本示例介绍基于SDK的工具开发与应用实践,通过langgraph框架开发Agent并集成工具,展示从开发到部署的完整流程。

前提条件

已安装必须的Python包,包括agentarts-sdklanggraph、 langchain-openai等。

基于SDK的工具开发与应用实践

  1. 下载AgentRuntime SDK包及其它依赖包。

    pip install agentarts-sdk
    pip install langgraph
    pip install langchain-openai

  2. 导入代码解释器及其它包。

    import json
    import os
    from typing import TypedDict
    from langchain_core.messages import AIMessage, HumanMessage, SystemMessage
    from langchain_core.tools import tool
    from langchain_openai import ChatOpenAI
    from langgraph.graph import END, StateGraph
    from langgraph.prebuilt import ToolNode
    from agentarts.sdk import AgentArtsRuntimeApp
    from agentarts.sdk.tools import code_session
    app = AgentArtsRuntimeApp()

  3. 创建工具。

    代码解释器工具创建需要时间拉起,拉起时间大约为5s。

    def create():
        client = CodeInterpreter(region="your_region")
        code_interpreter = client.create_code_interpreter(
            name="your_code_interpreter_name",
            api_key_name="your_api_key_name"
        )

  4. 开发工具。

    此步骤以开发一个执行python代码的工具为例,工具接受模型生成的代码和描述,执行代码并返回代码的执行结果。获取API_KEY请参考如何获取沙箱工具的API_KEY
    @tool
    def execute_python_tool(code: str, description: str = "") -> str | None:
        api_key = "your_actual_api_key" # your api key
        with code_session("your_region", "your_code_interpreter_name", api_key) as code_client:
            response = code_client.invoke(
                operate_type="execute_code",
                api_key=api_key,
                arguments={
                    "code": code,
                    "language": "python",
                    "clear_context": False
                }
            )
        return json.dumps(response["result"])
    

  5. 编写系统提示词。

    SYSTEM_PROMPT = """你是一个优秀的AI助手,擅长通过代码执行验证答案的正确性。
    
    验证原则:
    1. 当需要精确计算、数值验证或算法验证时,必须编写代码来验证结果
    2. 使用execute_python_tool工具执行代码进行验证
    3. 返回答案前,使用测试脚本来验证你的理解和计算
    4. 只能通过实际的代码执行展示工作过程
    5. 如果存在不确定的情况,详细说明限制条件并尽可能做验证
    
    需要代码验证的场景
    - 数学计算:包括算术运算、代数计算、概率统计、数列求和、几何计算等
    - 算法验证:需要验证算法正确性,实现逻辑或性能测试时
    - 数据处理:对数据进行统计分析、排序、查找等操作时
    - 任何需要精确结果的问题,当口算或者估算无法保证准确性时
    
    强制要求:
    - 你必须使用execute_python_tool工具来执行python代码
    - 涉及计算的问题,编写程序计算并显示代码和结果
    - 每次给出最终答案前,至少执行一次验证代码
    - 如果工具调用失败,明确告知用户
    - 将代码执行结果作为答案的重要依据
    
    可用工具:
    - execute_python_tool(code: str, description: str): 在沙箱环境中执行Python代码并返回结果
        * code: 要执行的Python代码
        * description: 对代码的描述,用于上下文理解
    
    响应格式要求:
    - 优先展示验证代码和执行结果
    - 清晰说明每一步的计算逻辑
    - 最终答案必须基于代码执行结果
    """

  6. 开发Agent并集成工具。

    在此步骤中,请填写拥有使用权限的模型(例如:DeepSeek-V3),并补充模型的api_key 和 base_url。您还可以根据需要自定义模型参数,并将自定义工具集成到Agent中。

    # 创建Agent
    llm = ChatOpenAI(
        model="DeepSeek-V3",
        api_key=os.environ.get("MODEL_API_KEY", ""),
        base_url=os.environ.get("BASE_URL", ""),
        max_tokens=1000,
        temperature=0.7,
    )
    # 创建工具列表
    tools = [execute_python_tool]
    # 工具绑定Agent
    llm = llm.bind_tools(tools)
    
    # 定义graph状态
    class AgentState(TypedDict):
        messages: list[Union[HumanMessage, SystemMessage, AIMessage]]
    
    def call_model(state: AgentState):
        """调用模型并返回响应"""
        # 只在初始消息为空时添加系统提示
        if not state["messages"] or all(not isinstance(msg, SystemMessage) for msg in state["messages"]):
            messages = [SystemMessage(content=SYSTEM_PROMPT)] + state["messages"]
        else:
            messages = state["messages"]
        response = llm.invoke(messages)
        return {"messages": [response]}
    
    def should_continue(state):
        """判断是否需要继续使用工具"""
        last_message = state["messages"][-1]
        # 如果包含工具调用,则继续执行
        if last_message.tool_calls:
            return "tools"
    
        # 否则结束
        return END
    
    # 创建LangGraph工作流
    workflow = StateGraph(AgentState)
    workflow.add_node("agent", call_model)
    workflow.add_node("tools", ToolNode(tools))
    # 设置入口
    workflow.set_entry_point("agent")
    # 添加边
    workflow.add_conditional_edges(
        "agent",
        should_continue,
        {
            "tools": "tools",
            "__end__": "__end__"
        }
    )
    workflow.add_edge("tools", "agent")
    agent = workflow.compile()

    至此,已经完成了一个简易的Agent开发。

  7. 使用Agent。

    @app.entrypoint
    def agent_chat():
        query = "告诉我1到100之间最大的质数"
    
        # 运行Agent
        result = agent.invoke({
            "messages": [HumanMessage(content=query)]
        })
        print(result["messages"][-1].content)
    
    if __name__ == '__main__':
        app.run()

相关文档