中文 || อังกฤษ
Qwen-Agent เป็นเฟรมเวิร์กสำหรับการพัฒนาแอปพลิเคชัน LLM ตามคำสั่งต่อไปนี้ การใช้เครื่องมือ การวางแผน และความสามารถด้านหน่วยความจำของ Qwen นอกจากนี้ยังมาพร้อมกับแอปพลิเคชันตัวอย่าง เช่น Browser Assistant, Code Interpreter และ Custom Assistant
18 กันยายน 2024: เพิ่มการสาธิต Qwen2.5-Math เพื่อแสดงความสามารถในการใช้เหตุผลเชิงบูรณาการเครื่องมือของ Qwen2.5-Math หมายเหตุ: ตัวดำเนินการ python ไม่ได้อยู่ในแซนด์บ็อกซ์และมีไว้สำหรับการทดสอบในเครื่องเท่านั้น ไม่ใช่สำหรับการใช้งานจริง
ติดตั้งเวอร์ชันเสถียรจาก PyPI:
pip install -U "qwen-agent[gui,rag,code_reapter,python_executor]"# หรือใช้ `pip install -U qwen-agent` สำหรับข้อกำหนดขั้นต่ำ # ข้อกำหนดเพิ่มเติมที่ระบุในวงเล็บคู่คือ:# [gui ] สำหรับการรองรับ GUI ที่ใช้ Gradio;# [rag] สำหรับการรองรับ RAG;# [code_reapreter] สำหรับการรองรับ Code Interpreter;# [python_executor] สำหรับการให้เหตุผลแบบรวมเครื่องมือด้วย Qwen2.5-Math
หรือคุณสามารถติดตั้งเวอร์ชันการพัฒนาล่าสุดได้จากแหล่งที่มา:
โคลนคอมไพล์ https://github.com/QwenLM/Qwen-Agent.gitcd Qwen-Agent pip install -e ./"[gui,rag,code_reapter,python_executor]"# หรือ `pip install -e ./` สำหรับความต้องการขั้นต่ำ
คุณสามารถใช้บริการโมเดลที่ DashScope ของ Alibaba Cloud มอบให้ หรือปรับใช้และใช้บริการโมเดลของคุณเองโดยใช้โมเดล Qwen แบบโอเพ่นซอร์ส
หากคุณเลือกที่จะใช้บริการรูปแบบที่นำเสนอโดย DashScope โปรดตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่าตัวแปรสภาพแวดล้อม DASHSCOPE_API_KEY
ให้เป็นคีย์ DashScope API เฉพาะของคุณ
หรือหากคุณต้องการปรับใช้และใช้บริการโมเดลของคุณเอง โปรดปฏิบัติตามคำแนะนำที่ให้ไว้ใน README ของ Qwen2 สำหรับการปรับใช้บริการ API ที่เข้ากันได้กับ OpenAI โดยเฉพาะ โปรดดูส่วน vLLM สำหรับการปรับใช้ GPU ความเร็วสูง หรือส่วน Ollama สำหรับการปรับใช้ CPU ในเครื่อง (+GPU)
Qwen-Agent นำเสนอส่วนประกอบอะตอมมิก เช่น LLM (ซึ่งสืบทอดมาจาก class BaseChatModel
และมาพร้อมกับการเรียกใช้ฟังก์ชัน) และ Tools (ซึ่งสืบทอดมาจาก class BaseTool
) พร้อมด้วยส่วนประกอบระดับสูง เช่น Agent (ที่ได้มาจาก class Agent
)
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงกระบวนการสร้างเอเจนต์ที่สามารถอ่านไฟล์ PDF และใช้เครื่องมือต่างๆ รวมถึงการผสานรวมเครื่องมือที่กำหนดเอง:
import pprintimport urllib.parseimport json5from qwen_agent.agents import Assistantfrom qwen_agent.tools.base import BaseTool, register_tool# ขั้นตอนที่ 1 (ทางเลือก): เพิ่มเครื่องมือแบบกำหนดเองชื่อ `my_image_gen`.@register_tool('my_image_gen')class MyImageGen(BaseTool):# `คำอธิบาย` จะบอกตัวแทนถึงฟังก์ชันการทำงานของเครื่องมือนี้ คำอธิบาย = 'บริการการวาดภาพด้วย AI (การสร้างภาพ) คำอธิบายข้อความที่ป้อน และส่งคืน URL รูปภาพที่วาดตามข้อมูลข้อความ'# `พารามิเตอร์` จะบอกตัวแทนว่าอินพุตอะไร พารามิเตอร์ที่เครื่องมือ has.parameters = [{'name': 'prompt','type': 'string','description': 'คำอธิบายโดยละเอียดของเนื้อหารูปภาพที่ต้องการ เป็นภาษาอังกฤษ','required': True}]def call(self, params: str, **kwargs) -> str:# `params` เป็นอาร์กิวเมนต์ที่สร้างโดย LLM agent.prompt = json5.loads(params)['prompt']prompt = urllib.parse.quote( พรอมต์) ส่งคืน json5.dumps ( {'image_url': f'https://image.pollinations.ai/prompt/{prompt}'},ensure_ascii=False)# ขั้นตอนที่ 2: กำหนดค่า LLM ที่คุณใช้อยู่ llm_cfg = {# ใช้บริการโมเดลที่ได้รับจาก DashScope:'model': 'qwen-max','model_server': 'dashscope',# 'api_key': 'YOUR_DASHSCOPE_API_KEY',# จะใช้ตัวแปรสภาพแวดล้อม `DASHSCOPE_API_KEY' หากไม่ได้ตั้งค่า 'api_key' ที่นี่ # ใช้ บริการโมเดลที่เข้ากันได้กับ OpenAI API เช่น vLLM หรือ Ollama:# 'model': 'Qwen2-7B-Chat',# 'model_server': 'http://localhost:8000/v1', # base_url หรือที่รู้จัก เป็น api_base# 'api_key': 'EMPTY',# (ไม่บังคับ) ไฮเปอร์พารามิเตอร์ LLM สำหรับรุ่น: 'generate_cfg': {'top_p': 0.8} }# ขั้นตอนที่ 3: สร้างตัวแทน ที่นี่เราใช้ตัวแทน `Assistant` เป็นตัวอย่าง ซึ่งสามารถใช้เครื่องมือและอ่านไฟล์ได้ system_instruction = '''คุณเป็นผู้ช่วยที่เป็นประโยชน์ หลังจากได้รับคำขอของผู้ใช้ คุณควร:- ขั้นแรกวาดภาพและรับ URL รูปภาพ จากนั้นเรียกใช้โค้ด `request.get(image_url)` เพื่อดาวน์โหลดรูปภาพ และสุดท้ายเลือกการดำเนินการรูปภาพจากเอกสารที่กำหนดเพื่อประมวลผลรูปภาพ โปรดแสดงรูปภาพโดยใช้ `plt.show()` ''tools = ['my_image_gen', 'code_reapter'] # `code_reapter` เป็นเครื่องมือในตัวสำหรับการรัน code.files = ['./examples/resource/doc.pdf'] # มอบไฟล์ PDF ให้กับบอท read.bot = Assistant(llm=llm_cfg,system_message=system_instruction,function_list=tools,files=files)# ขั้นตอนที่ 4: เรียกใช้ตัวแทนเป็น chatbot.messages = [] # สิ่งนี้จะเก็บประวัติการแชทในขณะที่ True:# ตัวอย่างเช่น ให้ป้อนข้อความค้นหา "draw a dog and rot 90 องศา".query = input('user query: ')# เพิ่มข้อความค้นหาของผู้ใช้ต่อท้ายข้อความแชท history.messages.append({'role': 'user', 'content ': query})response = []สำหรับการตอบสนองใน bot.run(messages=messages):# Streaming output.print('bot response:')pprint.pprint(response, indent=2)# ผนวกการตอบกลับของ bot ไปที่ ประวัติการแชท.messages.extend(ตอบกลับ)
นอกเหนือจากการใช้การติดตั้งเอเจนต์ในตัว เช่น class Assistant
คุณยังสามารถพัฒนาการใช้งานเอเจนต์ของคุณเองได้โดยการสืบทอดจาก class Agent
โปรดดูไดเร็กทอรีตัวอย่างสำหรับตัวอย่างการใช้งานเพิ่มเติม
ใช่. คลาส LLM จัดให้มีการเรียกใช้ฟังก์ชัน นอกจากนี้ คลาส Agent บางตัวยังสร้างขึ้นจากความสามารถในการเรียกใช้ฟังก์ชัน เช่น FnCallAgent และ ReActChat
เราได้เปิดตัวโซลูชัน RAG ที่รวดเร็ว รวมถึงตัวแทนที่มีราคาแพงแต่มีความสามารถในการแข่งขัน สำหรับการตอบคำถามในเอกสารที่มีความยาวมาก "เข็มในกองหญ้า" ที่ใช้เข็มเดียวซึ่งเกี่ยวข้องกับบริบทโทเค็น 1M ดูบล็อกสำหรับรายละเอียดทางเทคนิค
BrowserQwen เป็นตัวช่วยเบราว์เซอร์ที่สร้างขึ้นจาก Qwen-Agent โปรดดูเอกสารประกอบสำหรับรายละเอียด
ล่ามโค้ดไม่ได้อยู่ในแซนด์บ็อกซ์ และรันโค้ดในสภาพแวดล้อมของคุณเอง โปรดอย่าขอให้ Qwen ทำงานที่เป็นอันตราย และอย่าใช้ล่ามโค้ดโดยตรงเพื่อวัตถุประสงค์ในการผลิต