在之前的文章中,我们教过大家如何 5 分钟实现网站复刻,同时为大家介绍了 screenshot-to-code 这个开源项目,以及如何基于该项目增加调用 Gemini 模型,最终实现上传图片生成代码的效果。
当时就有不少小伙伴提出疑问,怎么快速找到需要修改的地方呢?
在此之前,我们要先花一些时间去了解阅读源码才能找到相关函数,但在今天,给大家介绍一个豆包MarsCode的利器:#Workspace,有了它,妈妈再也不用担心我找不到修改函数的入口啦!
今天给大家演示一下,如何利用豆包MarsCode 的 #Workspace 功能,快速上手修改开源项目!
在修改之前,需要首先了解并熟悉当前项目的模块和架构,我们可以使用豆包 MarsCode #Workspace 功能,总结并输出模块的架构:
接着,我们可以把 #Workspace 输出的 mermaid 内容,贴到 mermaid 在线展示网站(https://sourl.cn/RUYGf4)上,就得到了 screenshot-to-code 项目的模块架构:
了解熟悉完架构后,接着使用 #Workspace 让豆包MarsCode 告诉我们如何本地启动项目:
根据它给的方式,我们在终端内一步步执行,即可成功启动项目。
下一步,我们需要增加调用 Gemini 模型,但模块代码这么多,该怎么快速找到需要修改哪些地方呢?
这时我们再次使出 #Workspace 利器,可以看到豆包MarsCode精准地给出了我们要修改的地方:
接下来,让我们按照豆包MarsCode 给的教程,动手改起来。
首先,我们需要打开 frontend/src/lib/models.ts 增加 Gemini 模型的枚举。当输入 GEMINI 之后,豆包 MarsCode 自动为你推荐了补全代码,点击 Tab 键采纳即可。
紧接着,我们需要打开 frontend/src/App.tsx,找到修改入口:
我们先拿豆包 MarsCode 来解释一下这个函数的功能。
根据解释,该函数只是用于更新指令并生成代码,和我们要改的模型无关,我们忽略这个文件直接改后端代码。
后端部分主要修改 llm.py 和 generate_code.py 2 个文件。根据前面的架构介绍,llm.py 负责调用 LLM,generate_code.py 则是生成代码的路由处理。因此我们需要先改 llm.py,增加调用 Gemini。
在这里,我们直接复制上次的代码,修改 llm.py:
class Llm(Enum):
GPT_4_VISION = "gpt-4-vision-preview"
GPT_4_TURBO_2024_04_09 = "gpt-4-turbo-2024-04-09"
GPT_4O_2024_05_13 = "gpt-4o-2024-05-13"
CLAUDE_3_SONNET = "claude-3-sonnet-20240229"
CLAUDE_3_OPUS = "claude-3-opus-20240229"
CLAUDE_3_HAIKU = "claude-3-haiku-20240307"
CLAUDE_3_5_SONNET_2024_06_20 = "claude-3-5-sonnet-20240620"
//新增gemini
GEMINI_1_5_PRO_LATEST = "gemini-1.5-pro-latest"
async def stream_gemini_response(
messages: List[ChatCompletionMessageParam],
api_key: str,
callback: Callable[[str], Awaitable[None]],
) -> str:
genai.configure(api_key=api_key)
generation_config = genai.GenerationConfig(
temperature = 0.0
)
model = genai.GenerativeModel(
model_name = "gemini-1.5-pro-latest",
generation_config = generation_config
)
contents = parse_openai_to_gemini_prompt(messages);
response = model.generate_content(
contents = contents,
#Support streaming
stream = True,
)
for chunk in response:
content = chunk.text or ""
await callback(content)
if not response:
raise Exception("No HTML response found in AI response")
else:
return response.text;
def parse_openai_to_gemini_prompt(prompts):
messages = []
for prompt in prompts:
message = {}
message['role'] = prompt['role']
if prompt['role'] == 'system':
message['role'] = 'user'
if prompt['role'] == 'assistant':
message['role'] = 'model'
message['parts'] = []
content = prompt['content']
if isinstance(content, list):
for content in prompt['content']:
part = {}
if content['type'] == 'image_url':
base64 = content['image_url']['url']
part['inline_data'] = {
'data': base64.split(",")[1],
'mime_type': base64.split(";")[0].split(":")[1]
}
elif content['type'] == 'text':
part['text'] = content['text']
message['parts'].append(part)
else:
message['parts'] = [content]
messages.append(message)
return messages
最后,我们再修改 generate_code.py,增加调用 Gemini 的函数:
if validated_input_mode == "video":
if not anthropic_api_key:
await throw_error(
"Video only works with Anthropic models. No Anthropic API key found. Please add the environment variable ANTHROPIC_API_KEY to backend/.env or in the settings dialog"
)
raise Exception("No Anthropic key")
completion = await stream_claude_response_native(
system_prompt=VIDEO_PROMPT,
messages=prompt_messages, # type: ignore
api_key=anthropic_api_key,
callback=lambda x: process_chunk(x),
model=Llm.CLAUDE_3_OPUS,
include_thinking=True,
)
exact_llm_version = Llm.CLAUDE_3_OPUS
elif (
code_generation_model == Llm.CLAUDE_3_SONNET
or code_generation_model == Llm.CLAUDE_3_5_SONNET_2024_06_20
):
if not anthropic_api_key:
await throw_error(
"No Anthropic API key found. Please add the environment variable ANTHROPIC_API_KEY to backend/.env or in the settings dialog"
)
raise Exception("No Anthropic key")
completion = await stream_claude_response(
prompt_messages, # type: ignore
api_key=anthropic_api_key,
callback=lambda x: process_chunk(x),
model=code_generation_model,
)
exact_llm_version = code_generation_model
# 增加调用gemini
elif (
code_generation_model == Llm.GEMINI_1_5_PRO_LATEST
):
if not GEMINI_API_KEY:
await throw_error(
"No GEMINI API key found. Please add the environment variable ANTHROPIC_API_KEY to backend/.env or in the settings dialog"
)
raise Exception("No GEMINI key")
completion = await stream_gemini_response(
prompt_messages, # type: ignore
api_key=GEMINI_API_KEY,
callback=lambda x: process_chunk(x),
)
exact_llm_version = code_generation_model
else:
completion = await stream_openai_response(
prompt_messages, # type: ignore
api_key=openai_api_key,
base_url=openai_base_url,
callback=lambda x: process_chunk(x),
model=code_generation_model,
)
exact_llm_version = code_generation_model
经过以上几个步骤的修改,我们就完成了代码修改部分,最后我们再安装 google-generativeai 库:
cd backend
poetry add google-generativeai
安装完库后,再次启动项目,就可以愉快地使用 Gemini 来生成代码啦,大家赶快去试试使用 #Workspace 吧!
更多内容推荐
两天内,两大开源模型打擂台:都在卷更小、更便宜、更快、更简洁
在涵盖不同语言的多语种MMLU基准测试当中,Mistral Large 2的表现与Meta全新的Llama 3.1-405B相当,而且由于体量较小,所以有着更加显著的成本效益。
智谱新发开源大模型:9B 参数,覆盖编程场景
“过去几年智谱的商业实践为我们积累了非常多的经验,不敢说是 best practice,但是 better practice。”张鹏在演讲中如是说。
跟大厂拼价格到底!智谱 AI 宣布模型全面降价,刘慈欣、AI 老罗线上“整活儿”
还可以根据使用规模快速为调整价格和并发
智谱清言 App 全新升级视频通话功能,并推出新一代基座大模型
CogVideoX-5B 开源、GLM-4-Flash 免费
23|易速鲜花聊天客服机器人的开发(下)
Streamlit 和 Gradio 都是让数据科学家和开发者能够快速为机器学习模型创建 Web UI 的框架。
2023-10-30
Meta、微软、Mistral AI、Hugging Face、通义、港中文六路进发开源大模型 | 大模型一周大事
大模型的快节奏发展,让了解最新技术动态、积极主动学习成为每一位从业者的必修课。InfoQ研究中心期望通过每周更新大模型行业最新动态,为广大读者提供全面的行业回顾和要点分析。
17|HuggingFace 与 Pre-trained Model:借助 AI 社区的力量
2023-10-25
22|易速鲜花聊天客服机器人的开发(上)
在这个聊天机器人的构建过程中,我们会进一步复习 LangChain 中的对话模型、提示模板、记忆的实现,以及检索功能和 RAG 功能的实现。
2023-10-27
面壁小钢炮 3.0 重磅发布!“无限”长文本,性能超 Kimi
量化后仅 2GB 内存,端侧友好~
21|部署一个鲜花网络电商的人脉工具(下)
带你继续完成易速鲜花电商人脉工具的后续部分。
2023-10-25
直播回放|AI 绘画发展脉络与 LoRA 模型训练实战
这次加餐是南柯老师的直播回放,帮你从大厂算法专家的视角梳理绘画技术的发展脉络,以及初学者入门学习AI绘画技术的路径与建议。另外,直播中还演示了如何训练一个赫本LoRA模型。
2023-11-23
国产版 Sora 到来!视频大模型更上一层楼 | 大模型一周大事
大模型的快节奏发展,让了解最新技术动态、积极主动学习成为每一位从业者的必修课。InfoQ研究中心期望通过每周更新大模型行业最新动态,为广大读者提供全面的行业回顾和要点分析。
网易有道 CEO 周枫:模型即应用的时代到来,Super App 随时会诞生
作者 | 华卫 “大模型的Super App尚未出现,但随时可能会诞生。” 3.0。 现场,网易有道CEO周枫表示:“当前已经是‘模型即应用’的时代,但大模型也不是万能的,关键是抓住场景。
Llama 3 In Action:部署策略和高级特性应用
Meta发布Llama 3模型,含8亿和70亿参数版本,均开源并支持商业用途。模型性能提升主要得益于数据工程优化。生产环境部署时需考虑计算资源和成本,AWS提供了多种实例选择。Llama 3的开源促进了社区创新应用的发展。
编程语言通义千问升级旗舰模型 Qwen-Max,性能接近 GPT-4o
9月19日云栖大会,阿里云CTO周靖人宣布,通义旗舰模型Qwen-Max全方位升级,性能接近GPT-4o。
当在本地就可以运行 AI 代码助手时,谁还需要 GitHub Copilot 呢?
作为生成式人工智能的早期用例,代码助手实践已经获得了相当多的关注——尤其是在微软推出GitHub Copilot之后。但是,如果你不喜欢让微软动你的代码,或者不愿意每月支付10美元的费用,那么你可以构建自己的助手。
Firebase Vertex AI SDK 简化基于 Gemini 的移动应用开发
本文提到 Firebase Vertex AI SDK 测试阶段,助力开发超越简单聊天模型的应用程序,提供colab集成SDK步骤,支持多模态输入,简化开发者工作流。
编程语言神秘大模型一夜“征服”所有人,超 GPT-4 却无人认领?网友:OpenAI 要有大麻烦了
整理 | 华卫基准测试网站的神秘模型,在大模型领域掀起了巨大波澜。gpt2-chatbot。没有出处,也没有介绍,在没有官方文件的情况下,一夜间“惊艳”所有人的视线。
14|工具和工具箱:LangChain 中的 Tool 和 Toolkits 一览
这节课我们来看看 LangChain 中各种强大的工具,以及如何使用它们。
2023-10-09
吴恩达发布开源 Python 库,一个接口可调用多个大模型
无缝对接 OpenAI 、Anthropic 、Azure 、Google 等多家 AI 服务商~
推荐阅读
电子书
大厂实战PPT下载
换一换 张红兵 | Fabarta 解决方案负责人
孙建业 | 作业帮 大数据平台架构负责人
陈子煜 | 得物 商家前端负责人
评论