DSPy: 在40行代码中使用自定义工具构建AI智能体 | 从零到英雄

停止编写复杂的提示,让我们来编写可用于生产的代码。

延续我们之前介绍DSPy框架作为管理Prompt Engineering工具的文章(DSPY: 停止提示,开始编程),今天我们将探讨如何应用DSPy来创建一个能够使用自定义工具的AI代理。

什么是DSPy?

DSPy是由斯坦福大学开发的框架,它改变了我们与大型语言模型(LLMs)合作的方式。它不需要编写复杂的提示,而是通过声明性编程来指定程序应该做什么,而不是如何做。

代码是如何工作的

1. LLM 设置:我们使用 Gemini 作为我们的主要语言模型 2. 自定义工具:创建一个模拟函数来获取天气数据 3. 签名:定义 Agent 将接收和发送的数据结构 4. Agent 类: - 使用 ReAct 管理工具的使用 - 维护对话历史 - 处理用户交互

用 DSPy 构建 AI 代理

1. 设置LLM引擎

在这一部分中,我们使用谷歌的新LLM Gemini,但您也可以切换到其他模型,比如OpenAI GPT-4,甚至是在先前文章中提到的OpenThaiGPT本地模型。

import dspy
import os
llm = dspy.LM(
model="gemini/gemini-1.5-flash-latest",
api_key=os.getenv("GEMINI_API_KEY")
)
dspy.configure(lm=llm)

2. 创建自定义工具

这个函数只是使用模拟数据的一个示例,但在实际应用中,您可以用API调用替换它,比如:- 天气API- 数据库查询- 外部服务

def get_weather(city: str) -> str:
"""Get weather data for a city"""
mock_data = {
"New York": "Sunny, 25°C",
"Los Angeles": "Cloudy, 20°C",
"Chicago": "Rainy, 15°C",
"Houston": "Thunderstorms, 30°C",
"Phoenix": "Sunny, 35°C"
}
return mock_data.get(city, "Weather data not available")

3. 定义代理签名

创建一个签名,定义代理程序的输入和输出格式:

class Agent_tools(dspy.Signature):
"""AI assistant Able to use tools"""
input_query = dspy.InputField()
history = dspy.InputField(desc="Chat History")
output = dspy.OutputField(desc="Response to User")

签名是告诉DSPy的一个关键组件:- input_query:用户的问题或指令- history:以前的对话历史- output:代理的回应

4. 创建代理类

创建主Agent类,处理会话和工具使用:

class Agent(dspy.Module):
def __init__(self):
super().__init__()
self.history = []
self.tools_utils = dspy.ReAct(Agent_tools, tools=[get_weather])

def __call__(self, input: str):
self.add_memory(input)
str_history = "\n".join(self.history.copy())
result = self.tools_utils(input_query=input, history=str_history).output
self.add_memory(result)
return result

def add_memory(self, memory: str):
self.history.append(("USER: "if len(self.history) % 2 == 0 else "AI: ") + memory)

使用`dspy.ReAct`的关键特点: - 支持多个工具 - 同时处理多个输入 - 方便添加新的工具

5. 使用代理

最后,我们可以创建一个聊天循环来测试代理。

chat_module = Agent()
while True:
human_input = input("You: ")
print("AI: ", chat_module(human_input))
Result

正如您所见,我们的代理可以同时使用多种工具处理查询。

使用DSPy的好处

1. 简洁的代码:仅需40行即可创建出色的AI代理 2. 灵活性:轻松添加管道和定制工具 3. 效率:DSPy 自动处理提示工程 4. 可读性:代码结构清晰,易于阅读

结论

DSPy使构建AI代理更加容易,特别是对于那些希望减少提示工程复杂性的开发人员而言。根据我在之前文章中提到的测试各种框架的经验,DSPy在当今发展AI代理方面是一个有趣的选择。

2024-11-03 04:22:14 AI中文站翻译自原文