BiGuan's picture
Upload agent.py
5be8aa7 verified
Raw
History Blame
2.09 kB
"""
HF Agents Course — Unit 4
GAIA Level 1 Agent (LangGraph + Qwen3.5-35B-A3B)
"""
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langgraph.graph import StateGraph, END
from langchain_core.messages import HumanMessage
from typing import TypedDict, Annotated
import operator
# =========================
# 基础配置
# =========================
load_dotenv()
AGICTO_API_KEY = os.getenv("AGICTO_API_KEY")
AGICTO_BASE_URL = os.getenv("AGICTO_BASE_URL", "https://agicto.com/v1")
llm = ChatOpenAI(
model="qwen3.5-35b-a3b",
openai_api_key=AGICTO_API_KEY,
openai_api_base=AGICTO_BASE_URL,
temperature=0.1,
max_tokens=1024,
)
# =========================
# System Prompt(GAIA 专用)
# =========================
SYSTEM_PROMPT = (
"You are a GAIA benchmark agent.\n"
"Think step-by-step internally.\n"
"Do NOT explain your reasoning.\n"
"Output ONLY the final exact answer.\n"
"No units, no punctuation, no extra words.\n"
"If the question includes a file URL, use its content."
)
# =========================
# LangGraph State
# =========================
class AgentState(TypedDict):
messages: Annotated[list, operator.add]
def build_graph():
def run_agent(state: AgentState) -> AgentState:
response = llm.invoke(state["messages"])
return {"messages": [response]}
graph = StateGraph(AgentState)
graph.add_node("agent", run_agent)
graph.set_entry_point("agent")
graph.add_edge("agent", END)
return graph.compile()
graph = build_graph()
# =========================
# ✅ HF 官方接口
# =========================
def agent(question: str, files: list[str] | None = None) -> str:
"""
必须保留此函数签名,HF Unit 4 评分器会直接调用。
"""
messages = [
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": question},
]
result = graph.invoke({"messages": messages})
answer = result["messages"][-1].content
# ✅ GAIA 硬性规则
return answer.strip().splitlines()[0]