会话
一个 Session
是用户和 UFO 之间的一次对话实例。它是一个持续的交互过程,从用户发起请求开始,到请求完成结束。UFO 支持在同一个会话中进行多个请求。每个请求由一次 Round
交互按顺序处理,直到用户的请求得到满足。我们在下图中展示 Session
和 Round
之间的关系
会话生命周期
一个 Session
的生命周期如下
1. 会话初始化
当用户开始与 UFO 对话时,Session
被初始化。Session
对象被创建,并启动第一次 Round
交互。在此阶段,用户的请求由 HostAgent
处理,以确定执行请求的适当应用程序。Context
对象被创建,用于存储会话中所有 Rounds
共享的对话状态。
2. 会话处理
Session
初始化后,交互的 Round
开始,它通过协调 HostAgent
和 AppAgent
来完成单个用户请求。
3. 下一轮
第一次 Round
完成后,Session
从用户请求下一个请求,以开始下一 Round
交互。这个过程一直持续到用户没有更多的请求。Session
的核心逻辑如下所示
def run(self) -> None:
"""
Run the session.
"""
while not self.is_finished():
round = self.create_new_round()
if round is None:
break
round.run()
if self.application_window is not None:
self.capture_last_snapshot()
if self._should_evaluate and not self.is_error():
self.evaluation()
self.print_cost()
4. 会话终止
如果用户没有更多的请求或决定结束对话,Session
将被终止,对话结束。如果配置了 EvaluationAgent
,它将评估 Session
的完整性。
参考
基类:ABC
UFO 中的基本会话。一个会话由多轮交互和对话组成。
初始化会话。
参数 |
|
---|
源代码在 module/basic.py
中
354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 |
|
application_window
property
writable
获取会话的应用程序。返回:会话的应用程序。
context
property
获取会话的上下文。返回:会话的上下文。
cost
property
writable
获取会话的成本。返回:会话的成本。
current_round
property
获取会话的当前轮次。返回:会话的当前轮次。
evaluation_logger
property
获取用于评估的日志记录器。返回:用于评估的日志记录器。
id
property
获取会话的ID。返回:会话的ID。
results
property
writable
获取会话的评估结果。返回:会话的评估结果。
rounds
property
获取会话的轮次。返回:会话的轮次。
session_type
property
获取会话的类名。返回:会话的类名。
step
property
获取会话的步骤。返回:会话的步骤。
total_rounds
property
获取会话中的总轮次。返回:会话中的总轮次。
add_round(id, round)
向会话添加一轮。
参数 |
|
---|
源代码在 module/basic.py
中
433 434 435 436 437 438 439 |
|
capture_last_snapshot()
捕获应用程序的最后快照,包括屏幕截图和XML文件(如果已配置)。
源代码在 module/basic.py
中
706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 |
|
create_following_round()
创建下一轮。返回:下一轮。
源代码在 module/basic.py
中
426 427 428 429 430 431 |
|
create_new_round()
abstractmethod
创建一个新回合。
源代码在 module/basic.py
中
411 412 413 414 415 416 |
|
evaluation()
评估会话。
源代码在 module/basic.py
中
653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 |
|
experience_saver()
将当前轨迹保存为智能体经验。
源代码在 module/basic.py
中
571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 |
|
initialize_logger(log_path, log_filename, mode='a', configs=configs)
staticmethod
初始化日志记录。log_path:日志文件的路径。log_filename:日志文件的名称。返回:日志记录器。
源代码在 module/basic.py
中
759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 |
|
is_error()
检查会话是否处于错误状态。返回:如果会话处于错误状态,则为True,否则为False。
源代码在 module/basic.py
中
619 620 621 622 623 624 625 626 |
|
is_finished()
检查会话是否结束。返回:如果会话结束,则为True,否则为False。
源代码在 module/basic.py
中
628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 |
|
next_request()
abstractmethod
获取会话的下一个请求。返回:会话的请求。
源代码在 module/basic.py
中
418 419 420 421 422 423 424 |
|
print_cost()
打印会话的总成本。
源代码在 module/basic.py
中
600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 |
|
request_to_evaluate()
abstractmethod
获取要评估的请求。返回:要评估的请求。
源代码在 module/basic.py
中
645 646 647 648 649 650 651 |
|
run()
运行会话。
源代码在 module/basic.py
中
385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 |
|