ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Agent 开发代码片段分享

Agent 开发代码片段分享

分享一个学习中的代码片段,通过火山引擎Agent Plan的API Key +langchain搭建一个简单的Agent助手

代码如下:

fromlangchain_openaiimportChatOpenAIfromlangchain.agentsimportcreate_agent,AgentStatefromlangchain.agents.middlewareimportbefore_agent,after_agent,before_model,after_model,wrap_model_call,wrap_tool_callfromlanggraph.runtimeimportRuntimefromlangchain_core.toolsimporttoolfromdotenvimportload_dotenvimportos load_dotenv()llm=ChatOpenAI(model='ark-code-latest',api_key=os.getenv("API_KEY"),base_url=os.getenv("BASE_URL"),)# TODO: Tools工具# @tool是Python 的装饰器语法,把普通函数自动转换成LangChain的BaseTool工具对象@tool(description="获取体重,返回值是整数,单位千克")defget_weight()->int:return90@tool(description="获取身高,返回值是整数,单位厘米")defget_height()->int:return180@tool(description="获取名字")defget_name()->str:return"马牛逼"@tool(description="获取兴趣爱好")defget_interest()->str:return"唱、跳、rap、🏀、music"# TODO: Middleware 中间件(一共有6种)@before_agentdeflog_before_agent(state:AgentState,runtime:Runtime)->None:print(f'\n[before_agent]Starting agent with {len(state['messages'])}messages\n')@after_agentdeflog_after_agent(state:AgentState,runtime:Runtime)->None:print(f'\n[after_agent]Agent completed with {len(state['messages'])}messages\n')@before_modeldeflog_before_model(state:AgentState,runtime:Runtime)->None:print(f'\n[before_model]About to call model with {len(state['messages'])}messages\n')@after_modeldeflog_after_model(state:AgentState,runtime:Runtime)->None:print("\nafter_model\n",state["messages"][-1].content)@wrap_model_call# 模型调用时拦截defmodel_call_hook(request,handler):print('\n模型调用了\n')returnhandler(request)@wrap_tool_call# 工具调用时拦截deftool_call_hook(request,handler):print('\n工具调用了\n')print(f"\n工具执行:{request.tool_call['name']}\n")print(f"\n工具执行传入参数:{request.tool_call['args']}\n")returnhandler(request)agent=create_agent(model=llm,tools=[get_weight,get_height,get_name,get_interest],system_prompt='''你是信息助手 ''',middleware=[log_before_agent,log_after_agent,log_before_model,log_after_model,model_call_hook,tool_call_hook])print(agent.invoke({"messages":[{"role":'user',"content":"告诉我信息"}]}))
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进