- user prompt: 我们通过聊天框发送给AI模型的消息;
- system prompt: 用来描述AI的角色、性格、背景信息、语气等;
每次用户发送user prompt的时候,系统会自动把system prompt发送给AI
- function calling: 规定了AI使用工具时应该返回的格式;
- MCP: 是一个通信协议,专门用来规范Agent和Tool服务之间是怎么交互的,称Tool服务为MCP server,调用它的Agent为MCP client,MCP实际上用来帮助Agent管理工具、资源和提示词;
MCP server可以和Agent部署在一起,通过stdio标准输入输出来通信,也可以部署在远程,通过HTTP网络协议来访问;
需要准备的:
-
一个Gemini模型的API KEY
-
一个Python环境
-
安装必要的Python库:pydantic_ai, dotenv
-
一个.env文件,用来存储API KEY
-
一个Agent_demo目录,用来存放Agent的代码
python
from pydantic_ai.models.gemini import GeminiModel
from pydantic_ai import Agent
from dotenv import load_dotenv # 加载.env文件中的API KEY
import tools
load_dotenv()
model = GeminiModel("gemini-2.5-flash-preview-04-17")
agent = Agent(model,
system_prompt="You are an experienced programmer",
tools=[tools.read_file, tools.list_files, tools.rename_file])
def main():
history = []
while True:
user_input = input("Input: ") # 通过标准输入接收用户的鹅指令
resp = agent.run_sync(user_input,
message_history=history) # 将用户输入和历史记录直接传给Agent
history = list(resp.all_messages()) # 保留聊天记录
print(resp.output) # 打印AI的返回结果
if __name__ == "__main__":
main()
python
from pathlib import Path
import os
base_dir = Path("./test")
# 读文件
def read_file(name: str) -> str:
"""Return file content. If not exist, return error message.
"""
print(f"(read_file {name})")
try:
with open(base_dir / name, "r") as f:
content = f.read()
return content
except Exception as e:
return f"An error occurred: {e}"
# 列目录
def list_files() -> list[str]:
print("(list_file)")
file_list = []
for item in base_dir.rglob("*"):
if item.is_file():
file_list.append(str(item.relative_to(base_dir)))
return file_list
# 改文件名
def rename_file(name: str, new_name: str) -> str:
print(f"(rename_file {name} -> {new_name})")
try:
new_path = base_dir / new_name
if not str(new_path).startswith(str(base_dir)):
return "Error: new_name is outside base_dir."
os.makedirs(new_path.parent, exist_ok=True)
os.rename(base_dir / name, new_path)
return f"File '{name}' successfully renamed to '{new_name}'."
except Exception as e:
return f"An error occurred: {e}"