Utilizarea Tool-urilor LLM în Serverele MCP
Ai construit un server MCP care conține un tool pentru conversia valutelor, folosind rate de schimb actualizate. Integrarea acestuia cu un LLM îi va oferi capacitatea de a răspunde cu precizie la întrebări despre valute și rate de schimb – ceva ce nu poate face în mod implicit.
Marea parte a codului îți este oferită, deoarece accentul principal ar trebui să fie pe înțelegerea fluxului de lucru, nu pe sintaxă.
Acest exercițiu face parte din cursul
Introducere în Model Context Protocol (MCP)
Instrucțiuni pentru exercițiu
- Trimite interogarea utilizatorului (
user_query) și lista formatată de tool-uri (anthropic_tools) către Claude. - Apelează tool-ul MCP ales de LLM, folosind numele și argumentele extrase din blocul de utilizare a tool-ului.
- Trimite rezultatul (
result) înapoi către Claude pentru răspunsul final.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
async def call_anthropic_llm(user_query: str):
"""Call Claude with MCP tools."""
print(f"\nUser: {user_query}\n")
mcp_tools = await get_tools_from_mcp()
anthropic_tools = []
for tool in mcp_tools:
anthropic_tool = {
"name": tool.name,
"description": tool.description or "",
"input_schema": tool.inputSchema,
}
anthropic_tools.append(anthropic_tool)
# Send the user query and formatted tools to the LLM
client = AsyncAnthropic(api_key="")
response = await client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=____,
tools=____,
)
if response.stop_reason == "tool_use":
tool_use = next(block for block in response.content if block.type == "tool_use")
name = tool_use.name
args = tool_use.input
print(f"Model decided to call: {name}")
print(f"Arguments: {args}\n")
# Call the MCP tool
result = await call_mcp_tool(____, ____)
# Send the result back to Claude for the final response
followup = await client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[
{"role": "user", "content": user_query},
{"role": "assistant", "content": response.content},
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": tool_use.id,
"content": ____,
}
],
},
],
tools=anthropic_tools,
)
final_text = next((block.text for block in followup.content if block.type == "text"), None)
if final_text:
print(f"\nAssistant: {final_text}")
return str(final_text)
else:
print("No follow-up message from model.")
else:
text = next((block.text for block in response.content if block.type == "text"), "")
print(f"\nAssistant: {text}")
return str(text)
if __name__ == "__main__":
asyncio.run(call_anthropic_llm("How much is 250 US dollars in euros?"))