ChinaTravel: Bộ tiêu chuẩn thực tế cho Tác nhân Ngôn ngữ trong Lập kế hoạch Du lịch Trung Quốc
Mã nguồn chính thức cho bài báo "ChinaTravel: Bộ tiêu chuẩn thực tế cho Tác nhân Ngôn ngữ trong Lập kế hoạch Du lịch Trung Quốc".
🏆 Thử thách Lập kế hoạch Du lịch IJCAI 2025 (TPC@IJCAI)
Chúng tôi tự hào thông báo rằng ChinaTravel đã được chọn là bộ tiêu chuẩn chính thức cho Thử thách Lập kế hoạch Du lịch (TPC) @ IJCAI 2025!
Trang web Cuộc thi Chính thức: https://chinatravel-competition.github.io/IJCAI2025/
Chúng tôi mời các thí sinh phát triển các tác nhân mới có thể giải quyết các tình huống lập kế hoạch du lịch thực tế với các ràng buộc phức tạp. Cuộc thi này sẽ trình diễn các phương pháp nghiên cứu tác nhân ngôn ngữ tiên tiến nhất.
📝 Nhật ký thay đổi
2025.09
- Đăng tải giải pháp vô địch của TPC@IJCAI2025 ở nhánh DSL. Cảm ơn @evergreenee vì những đóng góp của họ.
2025.06
- Sửa lỗi thu thập trong mã đánh giá kiến thức thường thức.
- Sửa quy trình của tác nhân thuần thần kinh.
- Sửa lỗi load_datasets từ huggingface.
- Cập nhật xử lý ngoại lệ khi xác minh cú pháp.
2025.05
- Cập nhật nhật ký cho phiên bản mới nhất.
- Cung cấp mã đánh giá cho TPC.
2025.04
- Thêm bộ tải dữ liệu cục bộ. Người dùng hiện có thể tải các truy vấn tùy chỉnh tại chỗ. Khi chỉ định giá trị splits_name không mặc định (ví dụ: "abc") cho "run_exp.py", hệ thống sẽ tự động tải các tệp tương ứng từ evaluation/default_splits/abc.txt, trong đó tệp TXT chứa tên tệp truy vấn mục tiêu.
- Phân loại ràng buộc chi tiết. Xem tài liệu chi tiết tại Evaluation README
- Giới thiệu phương pháp LLM-modulo cơ bản
- Hỗ trợ suy luận LLM cục bộ với Qwen3-8B/4B.
🚀 Bắt đầu nhanh
⚙️ Cài đặt
- Tạo môi trường conda và cài đặt các phụ thuộc:
conda create -n chinatravel python=3.9
conda activate chinatravel
pip install -r requirements.txt - Tải xuống cơ sở dữ liệu và giải nén vào thư mục "chinatravel/environment/"
- Tải xuống các mô hình LLM mã nguồn mở (tùy chọn).
bash download_llm.sh- Tải xuống các bộ tách từ.
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/▶️ Chạy
Chúng tôi hỗ trợ deepseek (API chính thức từ deepseek), gpt-4o (chatgpt-4o-latest), glm4-plus, và suy luận cục bộ với Qwen (Qwen3-8B), llama, mistral (Mistral-7B-Instruct-v0.3), v.v.
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
Lưu ý:
- Cờ
--oracle_translationcho phép truy cập vào dữ liệu thực tế đã được chú thích bao gồm: hard_logic_py: Mã DSL xác minh có thể thực thihard_logic_nl: Mô tả các ràng buộc tương ứng- Cấu trúc chú thích ví dụ:
{
"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"],
}
``
- Phương pháp LLM-modulo yêu cầu chế độ oracle_translation cho quá trình tinh chỉnh biểu tượng của nó
📊 Đánh giá
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_NAMETrong TPC@IJCAI2025, mã đánh giá được cung cấp trong tệpeval_tpc.py. Bạn có thể chạy mã đánh giá như sau:
python:chinatravel/agent/your_agent.py from .base import BaseAgentBaseAgent📚 Tài liệu
🛠️ Phát triển nâng cao
1. Phát triển thuật toán Agent riêng của bạn
Để phát triển thuật toán agent của riêng bạn, bạn cần kế thừa lớp
từchinatravel/agent/base.pyvà thêm logic cho thuật toán của mình vào hàminit_agenttrongchinatravel/agent/load_model.py. Chúng tôi cung cấp một ví dụ agent trống có tên làTPCAgent.BaseAgentCác bước:
- Kế thừa lớp
: Tạo một file Python mới trong thư mụcchinatravel/agentvà định nghĩa lớp agent của riêng bạn, kế thừa từBaseAgent.
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
- Thêm mã vào hàm init_agent: Mở tệp chinatravel/agent/load_model.py và thêm hỗ trợ cho tác nhân mới của bạn trong hàm init_agent.
python:
def init_agent(kwargs):
# ... existing code ...
elif kwargs["method"] == "YourMethodName":
agent = YourAgent(
kwargs
)
# ... existing code ...
return agent
2. Phát triển LLM cục bộ của riêng bạn
Để phát triển mô hình ngôn ngữ lớn (LLM) cục bộ của riêng bạn, bạn cần kế thừa lớp AbstractLLM từ chinatravel/agent/llms.py và thêm mã suy luận LLM cục bộ tương ứng vào llms.py. Chúng tôi cung cấp một ví dụ LLM trống có tên TPCLLM.
Các bước thực hiện:
- Kế thừa lớp AbstractLLM: Định nghĩa lớp LLM của riêng bạn trong tệp chinatravel/agent/llms.py, kế thừa từ 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
- Thêm mã vào hàm init_agent: Mở tệp chinatravel/agent/load_model.py và thêm hỗ trợ cho llm mới của bạn trong hàm init_llm.
python:
def init_llm(kwargs):
# ... existing code ...
elif llm_name == "glm4-plus":
llm = YourLLM()
# ... existing code ...
return llm
3. Chạy Mã của Bạn Bằng Các Script Thí Nghiệm
Sau khi hoàn thành phát triển ở trên, bạn có thể sử dụng các script thí nghiệm để chạy mã của mình.
Ví dụ về cách chạy:
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 | অসমীয়াKết quả sẽ được lưu trong thư mụcresults/YourMethodName_YourLLMName_xxx, ví dụ:results/TPCAgent_TPCLLM.✉️ Liên hệ
Nếu bạn gặp bất kỳ vấn đề nào, vui lòng liên hệ Thiệu Giới Kình, Trương Bá Văn, Dương Tiêu Văn.
📌 Trích dẫn
Nếu bài báo hoặc các tài nguyên liên quan của chúng tôi có giá trị đối với nghiên cứu của bạn, xin vui lòng trích dẫn.
--- Tranlated By Open Ai Tx | Last indexed: 2025-10-17 ---