ChinaTravel: Un benchmark reale per agenti linguistici nella pianificazione di viaggi in Cina
Codice ufficiale per l'articolo "ChinaTravel: Un benchmark reale per agenti linguistici nella pianificazione di viaggi in Cina".
🏆 Sfida di Pianificazione Viaggi IJCAI 2025 (TPC@IJCAI)
Siamo orgogliosi di annunciare che ChinaTravel è stato selezionato come benchmark ufficiale per la Travel Planning Challenge (TPC) @ IJCAI 2025!
Sito ufficiale della competizione: https://chinatravel-competition.github.io/IJCAI2025/
I partecipanti sono invitati a sviluppare nuovi agenti in grado di affrontare scenari reali di pianificazione viaggi sotto vincoli complessi. Questa competizione metterà in mostra approcci all'avanguardia nella ricerca sugli agenti linguistici.
📝 ChangeLog
2025.09
- Caricata la soluzione vincente della traccia DSL TPC@IJCAI2025. Grazie a @evergreenee per il contributo.
2025.06
- Correzione della raccolta degli errori nel codice di valutazione del ragionamento di senso comune.
- Correzione della pipeline dell'agente puramente neurale
- Correzione del caricamento dei dataset da huggingface
- Aggiornamento della gestione delle eccezioni nella verifica della sintassi
2025.05
- Aggiornamento dei log per la versione più recente.
- Fornire il codice di valutazione per il TPC.
2025.04
- Aggiunto il caricatore di dati locale. Gli utenti ora possono caricare query personalizzate localmente. Quando si specificano valori splits_name non predefiniti (ad es. "abc") per "run_exp.py", il sistema caricherà automaticamente i file corrispondenti da evaluation/default_splits/abc.txt, dove il file TXT contiene i nomi dei file delle query target.
- Classificazione dettagliata dei vincoli. Consulta la documentazione dettagliata in Evaluation README
- Introdotto il baseline LLM-modulo
- Supporto per inferenza LLM locale con Qwen3-8B/4B.
🚀 Avvio Rapido
⚙️ Configurazione
- Crea un ambiente conda e installa le dipendenze:
conda create -n chinatravel python=3.9
conda activate chinatravel
pip install -r requirements.txt - Scarica il database e decomprimilo nella directory "chinatravel/environment/"
- Scarica gli LLM open-source (opzionale).
bash download_llm.sh- Scarica i tokenizzatori.
wget https://cdn.deepseek.com/api-docs/deepseek_v3_tokenizer.zip -P chinatravel/local_llm/
unzip chinatravel/local_llm/deepseek_v3_tokenizer.zip -d chinatravel/local_llm/▶️ Esecuzione
Supportiamo deepseek (API ufficiale di deepseek), gpt-4o (chatgpt-4o-latest), glm4-plus e inferenze locali con Qwen (Qwen3-8B), llama, mistral (Mistral-7B-Instruct-v0.3), ecc.
export OPENAI_API_KEY=""python run_exp.py --splits easy --agent LLMNeSy --llm deepseek --oracle_translation
python run_exp.py --splits medium --agent LLMNeSy --llm deepseek --oracle_translation
python run_exp.py --splits human --agent LLMNeSy --llm deepseek --oracle_translation
python run_exp.py --splits human --agent LLMNeSy --llm Qwen3-8B --oracle_translation
python run_exp.py --splits human --agent LLMNeSy --llm deepseek
python run_exp.py --splits human --agent LLMNeSy --llm Qwen3-8B
python run_exp.py --splits human --agent LLM-modulo --llm deepseek --refine_steps 10 --oracle_translation
python run_exp.py --splits human --agent LLM-modulo --llm Qwen3-8B --refine_steps 10 --oracle_translation
Nota:
- Il flag
--oracle_translationabilita l'accesso alla verità annotata di riferimento, che include: hard_logic_py: Codice DSL di verifica eseguibilehard_logic_nl: Le corrispondenti descrizioni dei vincoli- Struttura di esempio dell'annotazione:
{
"hard_logic_py": [
"
total_cost=0
for activity in allactivities(plan):
total_cost+=activity_cost(activity)
total_cost += innercity_transport_cost(activity_transports(activity))
result=(total_cost<=1000)
",
"
innercity_transport_set=set()
for activity in allactivities(plan):
if activity_transports(activity)!=[]:
innercity_transport_set.add(innercity_transport_type(activity_transports(activity)))
result=(innercity_transport_set<={'taxi'})
"
],
"hard_logic_nl": ["总预算为1800元", "市内交通选择taxi"],
}
``
- Il metodo LLM-modulo richiede la modalità oracle_translation per il suo processo di raffinamento simbolico
📊 Valutazione
bash
python eval_exp.py --splits human --method LLMNeSy_deepseek_oracletranslation
python eval_exp.py --splits human --method LLMNeSy_deepseek
python eval_exp.py --splits human --method LLM-modulo_deepseek_10steps_oracletranslation
python eval_exp.py --splits human --method LLM-modulo_Qwen3-8B_10steps_oracletranslationbash python eval_tpc.py --splits tpc_phase1 --method YOUR_METHOD_NAMEIn TPC@IJCAI2025, il codice di valutazione è fornito nel fileeval_tpc.py. Puoi eseguire il codice di valutazione come segue:
python:chinatravel/agent/your_agent.py from .base import BaseAgentBaseAgent📚 Documentazione
🛠️ Sviluppo Avanzato
1. Sviluppa il Tuo Algoritmo Agente
Per sviluppare il tuo algoritmo agente, devi ereditare la classe
dachinatravel/agent/base.pye aggiungere la logica del tuo algoritmo alla funzioneinit_agentinchinatravel/agent/load_model.py. Forniamo un esempio di agente vuoto chiamatoTPCAgent.BaseAgentPassaggi:
- Eredita la classe
: Crea un nuovo file Python nella directorychinatravel/agente definisci la tua classe agente, ereditando daBaseAgent.
class YourAgent(BaseAgent): def __init__(self, kwargs): super().__init__(kwargs) # Initialization logic
def act(self, observation): # Implement the decision - making logic of the agent pass
- Aggiungi il codice alla funzione init_agent: Apri il file chinatravel/agent/load_model.py e aggiungi il supporto per il tuo nuovo agente nella funzione init_agent.
python:
def init_agent(kwargs):
# ... existing code ...
elif kwargs["method"] == "YourMethodName":
agent = YourAgent(
kwargs
)
# ... existing code ...
return agent
2. Sviluppa il Tuo LLM Locale
Per sviluppare il tuo modello linguistico locale (LLM), devi ereditare la classe AbstractLLM dal file chinatravel/agent/llms.py e aggiungere il relativo codice di inferenza LLM locale in llms.py. Forniamo un esempio vuoto di LLM chiamato TPCLLM.
Passaggi:
- Eredita la classe AbstractLLM: Definisci la tua classe LLM nel file chinatravel/agent/llms.py, ereditando da AbstractLLM.
python
class YourLLM(AbstractLLM):
def __init__(self):
super().__init__()
# Initialization logic
self.name = "YourLLMName"def _get_response(self, messages, one_line, json_mode): # Implement the response logic of the LLM response = "Your LLM response" if json_mode: # Handle JSON mode pass elif one_line: # Handle one - line mode response = response.split("\n")[0] return response
- Aggiungi codice alla funzione init_agent: Apri il file chinatravel/agent/load_model.py e aggiungi il supporto per il tuo nuovo llm nella funzione init_llm.
python:
def init_llm(kwargs):
# ... existing code ...
elif llm_name == "glm4-plus":
llm = YourLLM()
# ... existing code ...
return llm
3. Esegui il tuo codice utilizzando gli script di esperimento
Dopo aver completato lo sviluppo sopra indicato, puoi utilizzare gli script di esperimento per eseguire il tuo codice.
Esempio di esecuzione:
bash
python run_tpc.py --splits easy --agent TPCAgent --llm TPCLLM
python run_exp.py --splits easy --agent YourMethodName --llm YourLLMName
@misc{shao2024chinatravelrealworldbenchmarklanguage, title={ChinaTravel: A Real-World Benchmark for Language Agents in Chinese Travel Planning}, author={Jie-Jing Shao and Xiao-Wen Yang and Bo-Wen Zhang and Baizhi Chen and Wen-Da Wei and Guohao Cai and Zhenhua Dong and Lan-Zhe Guo and Yu-feng Li}, year={2024}, eprint={2412.13682}, archivePrefix={arXiv}, primaryClass={cs.AI}, url={https://arxiv.org/abs/2412.13682}, } `` English | 简体中文 | 繁體中文 | 日本語 | 한국어 | हिन्दी | ไทย | Français | Deutsch | Español | Italiano | Русский | Português | Nederlands | Polski | العربية | فارسی | Türkçe | Tiếng Việt | Bahasa Indonesia | অসমীয়াI risultati verranno salvati nella directoryresults/YourMethodName_YourLLMName_xxx, ad esempio,results/TPCAgent_TPCLLM.✉️ Contatti
Se riscontri problemi, contatta Jie-Jing Shao, Bo-Wen Zhang, Xiao-Wen Yang.
📌 Citazione
Se il nostro articolo o le risorse correlate risultano utili per la tua ricerca, ti chiediamo gentilmente di citarli.
--- Tranlated By Open Ai Tx | Last indexed: 2025-10-17 ---