AWEL是什么?

AWEL(Agentic Workflow Expression Language)是一套专为大模型应用开发设计的智能体工作流表达语言,它提供了强大的功能和灵活性。通过 AWEL API 您可以专注于大模型应用业务逻辑的开发,而不需要关注繁琐的模型和环境细节,AWEL 采用分层 API 的设计, AWEL 的分层 API 设计架构如下图所示:

智能体编排语言(AWEL) - 图1

AWEL分层设计

AWEL在设计上分为三个层次,依次为算子层、AgentFrame层以及DSL层,以下对三个层次做简要介绍。

  • 算子层

算子层是指LLM应用开发过程中一个个最基本的操作原子,比如在一个RAG应用开发时。 检索、向量化、模型交互、Prompt处理等都是一个个基础算子。 在后续的发展中,框架会进一步对算子进行抽象与标准化设计。 可以根据标准API快速实现一组算子。

  • AgentFrame层

AgentFrame层将算子做进一步封装,可以基于算子做链式计算。 这一层链式计算也支持分布式,支持如filter、join、map、reduce等一套链式计算操作。 后续也将支持更多的计算逻辑。

  • DSL层

DSL层提供一套标准的结构化表示语言,可以通过写DSL语句完成AgentFrame与算子的操作,让围绕数据编写大模型应用更具确定性,避免通过自然语言编写的不确定性,使得围绕数据与大模型的应用编程变为确定性应用编程。

使用案例

AWEL初步的版本也已经在V0.4.2发布,我们内置提供了一些使用样例。

算子层API-RAG例子

源码在项目中位置 examples/awel/simple_rag_example.py

  1. with DAG("simple_rag_example") as dag:
  2. trigger_task = HttpTrigger(
  3. "/examples/simple_rag", methods="POST", request_body=ConversationVo
  4. )
  5. req_parse_task = RequestParseOperator()
  6. # TODO should register prompt template first
  7. prompt_task = PromptManagerOperator()
  8. history_storage_task = ChatHistoryStorageOperator()
  9. history_task = ChatHistoryOperator()
  10. embedding_task = EmbeddingEngingOperator()
  11. chat_task = BaseChatOperator()
  12. model_task = ModelOperator()
  13. output_parser_task = MapOperator(lambda out: out.to_dict()["text"])
  14. (
  15. trigger_task
  16. >> req_parse_task
  17. >> prompt_task
  18. >> history_storage_task
  19. >> history_task
  20. >> embedding_task
  21. >> chat_task
  22. >> model_task
  23. >> output_parser_task
  24. )

位运算会将整个过程以DAG的形式编排。

智能体编排语言(AWEL) - 图2

算子层API调用模型+缓存例子

智能体编排语言(AWEL) - 图3

AgentFream层API样例

  1. af = AgentFream(HttpSource("/examples/run_code", method = "post"))
  2. result = (
  3. af
  4. .text2vec(model="text2vec")
  5. .filter(vstore, store = "chromadb", db="default")
  6. .llm(model="vicuna-13b", temperature=0.7)
  7. .map(code_parse_func)
  8. .map(run_sql_func)
  9. .reduce(lambda a, b: a + b)
  10. )
  11. result.write_to_sink(type='source_slink')

DSL层API样例

DSL 采用ANTLR4 / Lark解析器

  1. CREATE WORKFLOW RAG AS
  2. BEGIN
  3. DATA requestData = RECEIVE REQUEST FROM
  4. http_source("/examples/rags", method = "post");
  5. DATA processedData = TRANSFORM requestData USING embedding(model = "text2vec");
  6. DATA retrievedData = RETRIEVE DATA
  7. FROM vstore(database = "chromadb", key = processedData)
  8. ON ERROR FAIL;
  9. DATA modelResult = APPLY LLM "vicuna-13b"
  10. WITH DATA retrievedData AND PARAMETERS (temperature = 0.7)
  11. ON ERROR RETRY 2 TIMES;
  12. RESPOND TO http_source WITH modelResult
  13. ON ERROR LOG "Failed to respond to request";
  14. END;

当前支持的算子

基础算子

  • BaseOperator
  • JoinOperator
  • ReduceOperator
  • MapOperator
  • BranchOperator
  • InputOperator
  • TriggerOperator

流算子

  • StreamifyAbsOperator
  • UnstreamifyAbsOperator
  • TransformStreamAbsOperator

可执行环境

  1. 普通单机环境
  2. Ray环境